diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..0fe3f6de0 --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +EDU_EMAIL=SEE_README +EDU_PW=SEE_README +EDU_API_URL=SEE_README \ No newline at end of file diff --git a/.github/workflows/slack-notify.yml b/.github/workflows/slack-notify.yml new file mode 100644 index 000000000..6cf562483 --- /dev/null +++ b/.github/workflows/slack-notify.yml @@ -0,0 +1,13 @@ +name: Docs PR Bot +on: + pull_request: + types: [opened] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: craftech-io/slack-action@v1 + with: + slack_webhook_url: ${{ secrets.SLACK_WEBHOOK_URL }} + if: always() diff --git a/.gitignore b/.gitignore index b2d6de306..7fb431e21 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ # Misc .DS_Store +.env .env.local .env.development.local .env.test.local @@ -18,3 +19,6 @@ npm-debug.log* yarn-debug.log* yarn-error.log* + +.idea +.yarn diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..80ada0917 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,9 @@ +{ + "printWidth": 100, + "proseWrap": "always", + "semi": false, + "trailingComma": "all", + "singleQuote": true, + "tabWidth": 2, + "useTabs": false +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..5c529e808 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + "recommendations": [ + "esbenp.prettier-vscode", + "ban.spellright", + "unifiedjs.vscode-mdx" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..822d64456 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,23 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch Docusaurus", + "runtimeExecutable": "yarn", + "cwd": "${workspaceFolder}", + "runtimeArgs": ["start"] + }, + { + "type": "node", + "request": "launch", + "name": "Install Packages", + "runtimeExecutable": "yarn", + "cwd": "${workspaceFolder}" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..4086e376a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,33 @@ +{ + "editor.rulers": [100], + "workbench.colorCustomizations": { + "titleBar.activeBackground": "#a334fb", + "titleBar.activeForeground": "#fff" + }, + "prettier.proseWrap": "always", + "[mdx]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "spellright.language": [ + "en" + ], + "spellright.documentTypes": [ + "markdown", + "mdx" + ], + "spellright.parserByClass": { + "mdx": { + "parser": "markdown" + } + }, + "spellright.ignoreRegExpsByClass": { + "mdx": [ + "/&/g", + "/ /g", + "/—/g", + "/>/g", + "/</g" + ], + } +} diff --git a/.vscode/spellright.dict b/.vscode/spellright.dict new file mode 100644 index 000000000..18d69b26b --- /dev/null +++ b/.vscode/spellright.dict @@ -0,0 +1,27 @@ +DevAddr +DevAddrs +NwkAddr +NwkAddrs +AppEUI +DevEUI +NwkSKey +AppSKey +docusaurus +Merkle +Helius +GenesysGo +Mainnet +Devnet +veHNT +veMOBILE +veIOT +Landrush +Beaconer +Permissionless +trustless +Denylist +denylist +misasserted +Hivemapper +Passpoint +Ubiquiti diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 20844e790..721583bda 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,22 +1,16 @@ -# How to Contribute to this repository # +# How to Contribute to this repository -We value contributions from the community and will do everything we -can go get them reviewed in a timely fashion. If you have code to send -our way or a bug to report: +We value contributions from the community and will do everything we can to get them reviewed in a +timely fashion. If you have code to send our way or a bug to report: -* **Contributing Code**: If you have new documentation, fork this - repo, create a logically-named branch, and [submit a PR against this - repo](https://github.com/helium/docs). Include a - write up of the PR with details on what it does. +- **Contributing Code**: If you have new documentation, fork this repo, create a logically-named + branch, and [submit a PR against this repo](https://github.com/helium/docs). Include a write up of + the PR with details on what it does. -* **Reporting Bugs**: Open an issue [against this - repo](https://github.com/helium/docs/issues) with as much - detail as you can. At the very least you'll include steps to - reproduce the problem. +- **Reporting Bugs**: Open an issue [against this repo](https://github.com/helium/docs/issues) with + as much detail as you can. At the very least you'll include steps to reproduce the problem. -This project is intended to be a safe, welcoming space for -collaboration, and contributors are expected to adhere to the -[Contributor Covenant Code of -Conduct](http://contributor-covenant.org/). +This project is intended to be a safe, welcoming space for collaboration, and contributors are +expected to adhere to the [Contributor Covenant Code of Conduct](http://contributor-covenant.org/). -Above all, thank you for taking the time to be a part of the Helium community. \ No newline at end of file +Above all, thank you for taking the time to be a part of the Helium Community. diff --git a/README.md b/README.md index c6e078c8f..82894db07 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ Documentation for the Helium network. - [Yarn](https://yarnpkg.com/getting-started/install) version >= 1.5 -## Installation +## Helium Documentation Installation Guide -- [Installation Guide](https://docs.helium.com/open-source/docs/installation/) +- [Installation Guide](https://docs.helium.com/faq/docs-installation/) ## Contributing @@ -20,39 +20,35 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md) for more instructions. ## Creating a New Doc -When authoring a new doc, be sure to apply `prettier` to it during review. For -example: `npx prettier --write --prose-wrap always docs/blockchain/new_doc.mdx` +When authoring a new doc, be sure to apply `prettier` to it during review. For example: +`npx prettier --write --prose-wrap always docs/blockchain/new_doc.mdx` It will apply appropriate line wraps and other formatting niceties. ## Editing an Existing Doc -When editing an existing doc, line wrap should not be applied (don't run -`prettier`), and lines that run wider than 80 chars in width are okay. Applying -`prettier` would cause many unimportant line changes and make review more -difficult. +When editing an existing doc, line wrap should not be applied (don't run `prettier`), and lines that +run wider than 80 chars in width are okay. Applying `prettier` would cause many unimportant line +changes and make review more difficult. -Instead, from time to time, `prettier` will be run against the documents and -those unimportant commits will be added to `.git-blame-ignore-revs` +Instead, from time to time, `prettier` will be run against the documents and those unimportant +commits will be added to `.git-blame-ignore-revs` -Use the style guide found [here](docs/style-guide.md) to learn what markdown syntax -is available. +Use the style guide found [here](docs/style-guide.md) to learn what markdown syntax is available. For more advanced content consider using [JSX](https://v2.docusaurus.io/docs/markdown-features/#embedding-react-components-with-mdx). ## Linking to Other Docs -When linking to other docs always use full path links or abbreviated links to -full path links at the bottom of the doc. Abbreviated links help improve -readability of the raw markdown and makes common links reusable in the same doc. +When linking to other docs always use full path links or abbreviated links to full path links at the +bottom of the doc. Abbreviated links help improve readability of the raw markdown and makes common +links reusable in the same doc. -Abbreviated Links Example: -If you would like to link to the development devices introduction page found at -`/use-the-network/devices/development`, use -`[development devices][devices.development]` inline with your text content. -Next, create the link to the full path at the very bottom of the doc markdown -like this `[devices.development]: /use-the-network/devices/development`. +Abbreviated Links Example: If you would like to link to the development devices introduction page +found at `/network-iot/devices/development`, use `[development devices][devices.development]` inline +with your text content. Next, create the link to the full path at the very bottom of the doc +markdown like this `[devices.development]: /network-iot/devices/development`. ## Adding Images @@ -84,14 +80,13 @@ Create a new \*.mdx extension file following the existing naming conventions. ### Doc Front Matter -When creating a new doc, use the following front matter at the very top of the -doc with the following fields: +When creating a new doc, use the following front matter at the very top of the doc with the +following fields: -`id: ` This should match the filename without the extension. -`title: ` The title of your document. If this field is not present, the document's title will default to its id. -`description: ` The description of your document. -`sidebar_label: ` This should match id name but with spaces and capitalized -first letters. +`id: ` This should match the filename without the extension. `title: ` The title of your document. +If this field is not present, the document's title will default to its id. `description: ` The +description of your document. `sidebar_label: ` This should match id name but with spaces and +capitalized first letters. ``` --- @@ -103,18 +98,19 @@ sidebar_label: Devices ``` `slug: ` If the doc id path has repeated sections like the following doc path -`use-the-network/devices/devices`, define a `slug:` field in the front matter to -make it pretty as shown below. This way when this doc is navigated to, the URL -shown will not have repeating sections names in it. +`network-iot/devices/devices`, define a `slug:` field in the front matter to make it pretty as shown +below. This way when this doc is navigated to, the URL shown will not have repeating sections names +in it. ``` -slug: use-the-network/devices +slug: network-iot/devices ``` + ## Check for dead links `yarn build` does a good job of checking for dead links. -TODO: add to CI + ## Sidebar Links @@ -127,5 +123,5 @@ When adding items use the raw id path, slug paths will not work. ## Attribution -This website is built using [Docusaurus 2](https://v2.docusaurus.io/), a modern -static website generator. +This website is built using [Docusaurus 2](https://v2.docusaurus.io/), a modern static website +generator. diff --git a/docs/api/blockchain/accounts.mdx b/docs/api/blockchain/accounts.mdx deleted file mode 100644 index b5980f8b4..000000000 --- a/docs/api/blockchain/accounts.mdx +++ /dev/null @@ -1,1740 +0,0 @@ ---- -id: accounts -sidebar_label: Accounts -slug: /api/blockchain/accounts ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Accounts - ---- - -## List Accounts - -``` -GET https://api.helium.io/v1/accounts -``` - -Retrieve the current set of known accounts.The result is paged. A `cursor` field -is present if more results are available. - -Note: The cursor for accounts is valid for a limited time. If you receive a -`400` http response code for a cursor based request, you will need to start -fetching accounts from the beginning of the list. - - - - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ---------------------------------------- | -| cursor (optional) | _string_ | Cursor for the page of accounts to fetch | - - - - -200: OK - -```json -{ - "data": [ - { - "sec_nonce": 0, - "sec_balance": 0, - "nonce": 2, - "dc_nonce": 0, - "dc_balance": 0, - "block": 435239, - "balance": 0, - "address": "13etjTqyGLK7WQh8pp9VJy5ejh5MXmwFee2eAi3TfAA5kS1jEJb" - }, - { - "sec_nonce": 0, - "sec_balance": 0, - "nonce": 1, - "dc_nonce": 0, - "dc_balance": 0, - "block": 435239, - "balance": 0, - "address": "14Vshtwv9RMY5GuTe1sgLDJmmF2f46EW3etEJzjDjhKJSEprtHh" - }, - { - "sec_nonce": 0, - "sec_balance": 0, - "nonce": 0, - "dc_nonce": 0, - "dc_balance": 0, - "block": 435239, - "balance": 404040732, - "address": "14PaJeSfNp5Q3MtDw5yEsJwb2kHJqbcjjLe9aycjroqNFnL4EyS" - }, - { - "sec_nonce": 0, - "sec_balance": 0, - "nonce": 0, - "dc_nonce": 0, - "dc_balance": 0, - "block": 435239, - "balance": 1025990703, - "address": "13rUthiDQUeY9HfwoZFpkqtsbtaubzRyerCsSu1qdDXuVZGL45k" - }, - { - "sec_nonce": 0, - "sec_balance": 0, - "nonce": 0, - "dc_nonce": 0, - "dc_balance": 0, - "block": 435239, - "balance": 179087000000, - "address": "14Xg1SqiJDsmM2YvchR4UacevcuxjfyrjdyNEpRMmfBU7vrZba9" - } - ], - "cursor": "eyJoZWlnaHQiOjQzNTIzOSwiYmVmb3JlX2Jsb2NrIjo0MTM3MDIsImJlZm9yZV9hZGRyZXNzIjoiMTRpdndTNnRBQXVzRFo0QXVucTZXZ2dUc285cEZFbXZ2eXM5S1NXYUJDRENMd1UyMURkIn0" -} -``` - - - - ---- - -## List Richest Accounts - -``` -GET https://api.helium.io/v1/accounts/rich -``` - -Returns up to 100 of the accounts sorted by highest token balance. - - - - -_Query Parameters_ - -| param | Type | Note | -| ---------------- | -------- | -------------------------------------------------- | -| limit (optional) | _string_ | Number of accounts to return. Default 100, max 100 | - - - - -200: OK - -Result for `/v1/accounts/rich?limit=2` - -```json -{ - "data": [ - { - "address": "1398hLeHESZHE5jVtaLAV5fdg2vrUeZEs2B92t7TzeQTtugr8dL", - "balance": 616416488712965, - "block": 489719, - "dc_balance": 0, - "dc_nonce": 0, - "nonce": 3, - "sec_balance": 351543978600, - "sec_nonce": 0 - }, - { - "address": "14GWyFj9FjLHzoN3aX7Tq7PL6fEg4dfWPY8CrK8b9S5ZrcKDz6S", - "balance": 292033864604925, - "block": 489719, - "dc_balance": 0, - "dc_nonce": 0, - "nonce": 0, - "sec_balance": 166398670100, - "sec_nonce": 0 - } - ] -} -``` - - - - ---- - -## Account for Address - -``` -GET https://api.helium.io/v1/accounts/:address -``` - -Retrieve a specific account record.The account details for a record include -additional speculative nonces that indicate what the expected nonce for the -account is for a specific balance. Any transactions affecting the given balance -type should use an adjusted speculative nonce for that balance type. - -For example, when constructing a payment transaction, get the -`speculative_nonce` field for the source account and use `speculative_nonce + 1` -for the new transaction nonce.Currently only the speculative_nonce is supported. -It indicates the expected nonce for the account - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch details for | - - - - -200: OK - -```json -{ - "data": { - "address": "1122ZQigQfeeyfSmH2i4KM4XMQHouBqK4LsTp33ppP3W2Knqh8gY", - "balance": 0, - "block": 311833, - "dc_balance": 100000000000000, - "dc_nonce": 0, - "nonce": 0, - "sec_balance": 0, - "sec_nonce": 0, - "speculative_nonce": 0 - } -} -``` - - - - ---- - -## Hotspots for Account - -``` -GET https://api.helium.io/v1/accounts/:address/hotspots -``` - -Fetches hotspots owned by a given account address.The list of returned hotspots -is paged. If a `cursor` field is present more results are available. - -The `filter_modes` parameter can be used to filter hotspot by how they were -added to the blockchain. Supported values are `full`, `dataonly`, or `light`. A -comma separated list (no whitespace) can be used to filter for multiple modes. - -Note: The cursor for accounts is valid for a limited time. If you receive a -`400` http response code for a cursor based request, you will need to start -fetching accounts from the beginning of the list. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch details for | - -_Query Parameters_ - -| param | Type | Note | -| ----------------------- | -------- | --------------------------------------------- | -| cursor (optional) | _string_ | Cursor for the next page of hotspots to fetch | -| filter_modes (optional) | _string_ | Filter hotspot types | - - - - -200: OK - -The hotspot list for an account - -```json -{ - "data": [ - { - "lng": -81.70707772367822, - "lat": 41.480133219396784, - "status": { - "online": "online", - "height": 435166, - "gps": "good_fix" - }, - "score_update_height": 435153, - "score": 0.9222412109375, - "owner": "13GCcF7oGb6waFBzYDMmydmXx4vNDUZGX4LE3QUh8eSBG53s5bx", - "nonce": 1, - "name": "sneaky-violet-penguin", - "location": "8c2ab38f19a43ff", - "geocode": { - "short_street": "W 32nd St", - "short_state": "OH", - "short_country": "US", - "short_city": "Cleveland", - "long_street": "West 32nd Street", - "long_state": "Ohio", - "long_country": "United States", - "long_city": "Cleveland", - "city_id": "Y2xldmVsYW5kb2hpb3VuaXRlZCBzdGF0ZXM" - }, - "block_added": 96087, - "block": 435241, - "address": "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB" - } - ] -} -``` - - - - ---- - -## Validators for Account - -``` -GET https://api.helium.io/v1/accounts/:address/validators -``` - -Fetches validators owned by a given account address. The list of returned -validators is paged. If a `cursor` field is present more results are available. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ------------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch validators for | - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ----------------------------------------------- | -| cursor (optional) | _string_ | Cursor for the next page of validators to fetch | - - - - -200: OK - -The validator list for an account - -```json -{ - "data": [ - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.17/tcp/2154"], - "height": 57692 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0.99200439453125, - "penalties": [ - { - "type": "performance", - "height": 57777, - "amount": 0 - }, - { - "type": "tenure", - "height": 57777, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "shallow-butter-shark", - "last_heartbeat": 57777, - "block_added": 50636, - "block": 57780, - "address": "1Z9zkkswtjmrHsu7XK21rdxprwhNmhqpX4NirghEynauaohVjYu" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.16/tcp/2154"], - "height": 57662 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.3520050048828125, - "penalties": [ - { - "type": "performance", - "height": 57483, - "amount": 0 - }, - { - "type": "performance", - "height": 57498, - "amount": 0 - }, - { - "type": "performance", - "height": 57530, - "amount": 0 - }, - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "performance", - "height": 57559, - "amount": 0 - }, - { - "type": "performance", - "height": 57573, - "amount": 0 - }, - { - "type": "performance", - "height": 57585, - "amount": 0 - }, - { - "type": "performance", - "height": 57684, - "amount": 0 - }, - { - "type": "tenure", - "height": 57483, - "amount": 1 - }, - { - "type": "tenure", - "height": 57498, - "amount": 1 - }, - { - "type": "tenure", - "height": 57530, - "amount": 1 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57684, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "amusing-sepia-caterpillar", - "last_heartbeat": 57771, - "block_added": 50614, - "block": 57780, - "address": "1Y8Rr9WaEcQBWn7Jh7QnXrctZ99a15PQEpoLQHCNTeZcDY5ziA7" - } - ], - "cursor": "eyJoZWlnaHQiOjU3NzgwLCJiZWZvcmVfYmxvY2siOjM3ODQ4LCJiZWZvcmVfYWRkcmVzcyI6IjFiSEwxblFQNWdSSHFKRVN2VFJXWHAzZTg5RnVYNXZwWnFBdGl1NlUxaVZlSERxenU4TiJ9" -} -``` - - - - ---- - -## OUIs for Account - -``` -GET https://api.helium.io/v1/accounts/:address/ouis -``` - -Fetches OUIs owned by a given account address.The list of returned OUIs -is paged. If a `cursor` field is present more results are available. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch details for | - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ----------------------------------------- | -| cursor (optional) | _string_ | Cursor for the next page of OUIs to fetch | - - - - -200: OK - -The oui list for account `13tyMLKRFYURNBQqLSqNJg9k41maP1A7Bh8QYxR13oWv7EnFooc` - -```json -{ - "data": [ - { - "subnets": [ - { - "mask": 8388352, - "base": 0 - } - ], - "owner": "13tyMLKRFYURNBQqLSqNJg9k41maP1A7Bh8QYxR13oWv7EnFooc", - "oui": 1, - "nonce": 0, - "block": 762440, - "addresses": ["112qB3YaH5bZkCnKA5uRH7tBtGNv2Y5B4smv1jsmvGUzgKT71QpE"] - } - ] -} -``` - - - - ---- - -## Activity for Account - -:::caution -The `/activity` route will be deprecated on May 1, 2022 and will be replaced by [`/roles`, described below](#roles-for-account) -::: - -``` -GET https://api.helium.io/v1/accounts/:address/activity -``` - -Fetches transactions that indicate activity for an account. This includes any -transaction that involves the account, usually as a payer, payee or owner. - -You may optionally add a transaction type filter. For example: -`activity?filter_types=rewards_v2` will provide reward transactions only. - -The results are paged. If a `cursor` field is present in the response, more -results are available. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ----------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch activity for | - -_Query Parameters_ - -| param | Type | Note | -| ---------------------- | -------- | ----------------------------------------- | -| filter_types(optional) | _string_ | Comma separated list of transaction types | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -```json -{ - "data": [ - { - "type": "rewards_v1", - "time": 1608741833, - "start_epoch": 644049, - "rewards": [ - { - "type": "poc_challengers", - "gateway": "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB", - "amount": 8423208, - "account": "13GCcF7oGb6waFBzYDMmydmXx4vNDUZGX4LE3QUh8eSBG53s5bx" - } - ], - "height": 644084, - "hash": "6A_8hid6ZIiyg32dzQwFajM-iDyAvYJdVccSpxyymi8", - "end_epoch": 644083 - }, - { - "type": "rewards_v1", - "time": 1608735310, - "start_epoch": 643939, - "rewards": [ - { - "type": "poc_witnesses", - "gateway": "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB", - "amount": 256295305, - "account": "13GCcF7oGb6waFBzYDMmydmXx4vNDUZGX4LE3QUh8eSBG53s5bx" - } - ], - "height": 643984, - "hash": "FQnpxKBulLblJqSMsbgGbmv8ZHmu_2z4XJIeYKJGuIo", - "end_epoch": 643983 - }, - { - "type": "rewards_v1", - "time": 1608726763, - "start_epoch": 643837, - "rewards": [ - { - "type": "poc_challengees", - "gateway": "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB", - "amount": 16652034, - "account": "13GCcF7oGb6waFBzYDMmydmXx4vNDUZGX4LE3QUh8eSBG53s5bx" - } - ], - "height": 643871, - "hash": "yaEqGXHWOtElgG2RpaTuop2cwFaRypPIaOtsd11hPeQ", - "end_epoch": 643870 - }, - { - "type": "rewards_v1", - "time": 1608715628, - "start_epoch": 643648, - "rewards": [ - { - "type": "poc_challengers", - "gateway": "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB", - "amount": 8050332, - "account": "13GCcF7oGb6waFBzYDMmydmXx4vNDUZGX4LE3QUh8eSBG53s5bx" - }, - { - "type": "poc_challengees", - "gateway": "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB", - "amount": 45796610, - "account": "13GCcF7oGb6waFBzYDMmydmXx4vNDUZGX4LE3QUh8eSBG53s5bx" - } - ], - "height": 643687, - "hash": "-I__6qbqiopjMd94Zi94ixO-vyqFMeZdn0t2TRiTEjc", - "end_epoch": 643686 - }, - { - "type": "rewards_v1", - "time": 1608713272, - "start_epoch": 643540, - "rewards": [ - { - "type": "poc_challengees", - "gateway": "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB", - "amount": 15927309, - "account": "13GCcF7oGb6waFBzYDMmydmXx4vNDUZGX4LE3QUh8eSBG53s5bx" - } - ], - "height": 643647, - "hash": "mRYgIcJW-HcraoJQ3M5xlywDrNqNlHeeX2klKsGRGok", - "end_epoch": 643646 - }, - { - "type": "rewards_v1", - "time": 1608691560, - "start_epoch": 643255, - "rewards": [ - { - "type": "poc_challengers", - "gateway": "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB", - "amount": 8639175, - "account": "13GCcF7oGb6waFBzYDMmydmXx4vNDUZGX4LE3QUh8eSBG53s5bx" - } - ], - "height": 643353, - "hash": "jd5mq1OMG1q7g_JNJr5gFHD17uMSawvFNt8ARty2OGQ", - "end_epoch": 643352 - } - ] -} -``` - - - - ---- - -## Roles for Account - -``` -GET https://api.helium.io/v1/accounts/:address/roles -``` - -Fetches transactions that indicate an account as a participant. This includes any -transaction that involves the account, usually as a payer, payee or owner. - -The results are paged. If a `cursor` field is present in the response, more -results are available. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ----------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch activity for | - -_Query Parameters_ - -| param | Type | Note | -| ---------------------- | -------- | ----------------------------------------- | -| filter_types(optional) | _string_ | Comma separated list of transaction types | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -```json -{ - "data": [ - { - "type": "rewards_v2", - "time": 1643683979, - "role": "payee", - "height": 1207030, - "hash": "6A_8hid6ZIiyg32dzQwFajM-iDyAvYJdVccSpxyymi8" - }, - { - "type": "rewards_v2", - "time": 1643624875, - "role": "payee", - "height": 1206107, - "hash": "FQnpxKBulLblJqSMsbgGbmv8ZHmu_2z4XJIeYKJGuIo" - }, - { - "type": "assert_location_v2", - "time": 1643622489, - "role": "owner", - "height": 1206070, - "hash": "yaEqGXHWOtElgG2RpaTuop2cwFaRypPIaOtsd11hPeQ" - }, - { - "type": "add_gateway_v1", - "time": 1643622489, - "role": "owner", - "height": 1206070, - "hash": "-I__6qbqiopjMd94Zi94ixO-vyqFMeZdn0t2TRiTEjc" - } - ] -} -``` - - - - ---- - -## Roles Counts for Account - -``` -GET https://api.helium.io/v1/accounts/:address/roles/count -``` - -Count transactions that indicate activity for an account. This includes any -transaction that involves the account, usually as a payer, payee or -owner. - -The results are a map keyed by the given `filter_types` and the count of -transaction of that type. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | --------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch counts for | - -_Query Parameters_ - -| param | Type | Note | -| ------------ | -------- | ----------------------------------------- | -| filter_types | _string_ | Comma separated list of transaction types | - - - - -200: OK - -Fetch counts with `filter_types=add_gateaway_v1,assert_location_v1` for account -`13ENbEQPAvytjLnqavnbSAzurhGoCSNkGECMx7eHHDAfEaDird` - -```json -{ - "data": { - "add_gateway_v1": 5777, - "assert_location_v1": 5878 - } -} -``` - - - - ---- - -## Elections for Account - -``` -GET https://api.helium.io/v1/accounts/:address/elections -``` - -Fetches elections that hotspots for the given account are elected in. - -The results are paged. If a `cursor` field is present in the response, more -results are available. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ----------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch activity for | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -```json -{ - "data": [ - { - "type": "consensus_group_v1", - "time": 1608276577, - "proof": "g1AAAAdHeJxF1Hs403scB3BWZIdDuQxzadTRcctPSO5iLqedI3ILMwxDmEs4p6whSTEqyrbsnCNMSCObueS2Vi6VS3I8Cp1OF2zusllhzvpj_PX95_08r8_n_TzfT5yEhMT-aFC86NGRwI9ayb7Ga3lcJh9L0qTkHXXTzr0HL1YSTO5lofGR6DvfU26AC0hHgrZ968eJF4KzjfhZcqHsq9FQiDbfIAwZfzWO-s_GSyQPBAvu9PkmlT5U4SBpziI1YK9EZZNrZzy-DTu5_5CJOQs3E5urJbDq5UVW1ifX0s4CqeduzYBzvw3lRhcgs6cOnA_gxCbMc9tU8TBXcWLDXmi0gL6kKDtqbvXA-ogHm5asq4k7ZCCaql21vQnp98hV_8_Fr4duN7XFpZgBi3gpKWX-pUDV95mqYjPOIv55Q-o2CpY6NtDeL2ArzIQQaertsFGjA8cslzmGO2YGvmH-Yf7fI3OWl4suvAxyOf22kK5tdOpnrvq1WdL21UqRWVJYZsJcCKoO13N6qon3DfCOfbJWHBYRN4TunpmQnbQUm8waaIO97appqLcX-yr2K7-LPTemCkvKq3ceP7RWA_HbMR3tsEfzvSN1CcoXx7D7KsMfMytU9yAXN7jFjqiCntu2IvNNzrevvJCbuNx2_mjSIjViwd_n2eCyCfCOmOAyBa2-JDYJnh82U4tyAGx2R4ulpFvX6B-NMYbtcGiJ0mO4xrs3WzumkkabPiGELzE-ciI7mQzgpnv-m1kCy1sfTy5A2ASXhYrMvhwBPD37Sm-JxMHgoG71dORWfxPeawaTP6z7PsDmk5rY_IHoKL1pO55BYGk_dpf1Znkaadw2-2Mf0boporKsu1ZuxzQn7g2P-sIFC-IpaPDWPR9gJKXup6gqoWkgO2jmRO-GyCQNIkiOLTJqbbJawFxa8786Foot8heF0bqLf8OJkQeWxKbRBy6mQiNxHFcw88C-3Z-gAyWjDRhJMdG8giTcEtPhe8oVgINgGrg6qI1ePUHtnLK3D73xLcbjdzdml9C42EKh1nPl1HkQzLq17jM_uvXHSsMi1uz8sTuJZueuSWZJywG_XWCWGyg6icktzBKcONINuS1EaBK-GDZ4rTdP3al25FmT2F-mafJV31PugKtoiQ0TOFcbFd6pwZGbBrPNnF9PMko-eCebTrk4dfZK6N343u21EU7xOPXVMCjjs9qiuhmwdn3vSUTfxK2zMiCi3QpEjP5Ll8su_GkPZfDyJatwq9cJtCs1KgxlSPkhJU4Um1cSstPtea3fwPgulyjrDNMIVULwfbPkWd7NM84G695IQWl3spbIpKZUXbCf3bfFA1B3H4LnSa2-vneHQy1cqz9rK1uknbMQm95BYPq9FOwZ0MJH81dHL5yW-vi0z9lKf8XPv8PDONtauHsTBnKGgAKbesgpbaU3jV9ttc80evnbOHZa6dLT4mgn3kJBMB_odf0y30wHGgB1LT2-UF-rz94_tOWe7m4WIwUJ9xGITVAgarxJYRpMVoupGS4mDef1DGRhOlKsuI9PnbZ-RNLaLXcKNdFzFHqP4WGy2heByqzm2hsvVdk9H2SsliLuXzzsLIpURQfWD0qvZabH5BXue3knB3er9KIm8_ikwn7I3LpJkbsY9eosDPVrApJ0wmdM0yq3InI9s5ZWY8OWqyzdYpB-NMEumptHf9hYGpXLw2EKKzL3q6j4zyrYTFelum79XmyXVnNCFLmV7vICT92kv6KUy9ycH7FTiaNFFjVIEEKiZt87vCiPFaMK_LmR1z4wAZ91TV2BQ1N6hm0ZW_aV1EL14Jrjbbs4u-0O24UGxGxWAj8fDGzSIHZQOj7KM39t7ZmrMJdjLVAYiSBYEg08GvqA8d86echrm9e_csw4sQeOQK_HCGqFe36R44jNywNZ_Hya3wirsvhu95DlmCHHJEt5NjJiOwHNTHiqwdv5LTIqG2VCLQopt41atJWKNMEi2uyff-gNroh_NJlYiMCCYAeaVB16GHW6BlRtB5sznF6VAMkKsnxTUlg1yog-bf5UTPp-mouFdgSYdrBHMQwNIoFYN57qLx0Ad9p8EtHP15_bXZOkgz_4jnukL-PPK-9B59dw6w4v_agIP4uPnU4HWzB5BSAYzLWMyA0bpkc3Q8DKSa3LA88SKjawieRVXBzaOkx6XmwiNxv0INkrD4nBb2DMFgKtumWZ-m5R7y9MWn6vXMeA-u7xO2wh74gLkgbL4KjIX5PpTHQ6AvRWQe1RF_j8-I2VRNFUtUPsctTggyP3p4ztVQWHIREnO-ueFMVSLC0Hrpd_wgjP_Q_ffiin", - "members": [ - "112qqYc77fYcGLYrD5Bd1zG1dwoXGCzaQ63oby8ws9mhDrhieTRv", - "11hxEKmhr2xgVu8srSdkmoQYNVYYKppKd82mtanBbU5kd9r42hs", - "11LmZdUgSn5Pwa8a2Q16EUDfyLutpDeQoUgzgerHJc73p8NTC3V", - "112374TV64PVuBDDArCymuiqA6AQdNr3q9JVthoYo5r9kBCS6N3", - "1124oBcVaT6pubZWxuPisQs8hNKaYp9cduvQ9skcpRmt14LnhsnX", - "11eq43bdC6iAsQJtSsxbEwZZP9ECZX7QYnWXn95uc3Ajym9bdP6", - "112vbpLrhj8kQdBn8FDBYR2KcXVh95HmPfgyZfuA8kL5kRKVEWyc", - "112hX6sPHCgYXP98tdac5TqPNfU17t3K8ZwdpLd1UfFSD8Xoqv3H", - "115fXeCtfk9FjpoNXn8QCikp1GVGgGg2S5BXq8RJovcDvFrXrL8", - "11xrgEdiN9DA2cyauB29AXDy8WoMEwhqaL1chU83YWGx7q81sp8", - "11d13u5TospVvAD8pGCYNZR3GrEykB4osswni5fcXnonfHDSEpG", - "11diD2YbFNJ4yHDoWZpJErdJmwRsGEepCteEHfFMwakrTxjvMRG", - "112PSpVub6tJxekGMF4N3wp7Yb883pPWiF4WCw9BeuugXJucGZqB", - "11pf3gLhyFPRCedRPngEUu3Rr25sRYi16WRRS1ZYsA6hGMpkaXU", - "11zcBW5mQx2iJbNUg3MhvUEVbnB7Ty4dFL7Pgt2qvENZiNSotuV", - "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB" - ], - "height": 637456, - "hash": "mKX9qDdsbbHfkllXZJPmDnaWftsHeFxodSfyTPTSPMA", - "delay": 5 - }, - { - "type": "consensus_group_v1", - "time": 1607829748, - "proof": "g1AAAAdAeJxF0nk81IkbB_DxDZspsTFj5PqOa8XkmoZhLIZhpNySKzYy5Mo1SGKw5MiZIwxlI-YnJqac5UghlN-Oe2VD_LDGEZqc-emPmf3r-efzer1fn-d5_CEQiLAPEHA0kBAh9jJzyB7cZncmiwst1Yq8DWwaXb_MI-XWHd0YoNe-9CNlqk4AQAOqgbh50QFmI5Kp_3VTCXFyOOmbrs0pmt1tefcoKm82AGKiy_3Lr8_bmZ1krVea5ZI8WG6f0ZpN45I5zGCJM7pwDqmCLqpGZDWDY51dzX9IxooIRVS-C7vl-vfIaFR6-zQ55kfKTN0UQEIWYmPn2HE_X9VlwqvHpyEU0TXGUzquVAvVYf3wsmWW31GkTPDM-mQwYz1q-3mXyUcPwsxcNK3G4r4w_p-B3F0h4zgOylgDzjfx8wvwLkbYlyB08Gnza5jJtRcDend7JyMe1m5xe2ram_Hgf_uwTVGr6VNyoWwKUij-D0zmbXpZ6jTcBVseAAzB3kg77eq_FzD_UhtDlihEiRqv89992AwPn8A7a9MdOGRzptCrxy91zFRp29WOSS9Las9lftTPXbXqPrco75cKq-OS0Fq4Uv59Z3mPnZTcleE0JHaAkLqbLmqNeGCbiVwtqAfAIHP9Te1Cvs-GKLV7MpJTlinzLFtrTcQMIuep4EkXArflAY7xrTFD5aGyBk9JlKT7PjEbfrgTautxwSWF7bTr2PMjRVQ3AUBDimV_3tn2WGxseW7VqgI8attd-8NysMvX8GLUtY3WhaPN1hLn0svarhokH0KGxiPZPzVgze0QEdCE4gUFmUQfnSKOKVf8Aj2AluEF0oYvYuXqQkdLKqETig0nnj_plJjwCV7imp4dQS4336igMhRUvl32tz-t3Nq6WZ-b73BtJ8rO0YqVf2SuTGNJyAPlDvtH_SfNvd5q1PMcOPJn3RpBa-ChqQreORxzh68zaOubbyGx73a6qN5u_pdPnR-Dyn0TparvMFBKsBzuaiXv8H2JjOha45-JzhIND6wzPz6ncvP5TT_cMgEu_tgNB4AK_ego2nSIsDDrU7j3Y9jGg_Phw8GvWj7oxruZeSrqm3NIAatLoVcrGKWk-KfP5a3yvKpijdoyQv35W5LDyjv4q_r__dqhzrkPTnVSytmWj1U-7wyZylu80Y2GkmLRjNmumRMEp6PIX8fIzdTj5Jmhcniiwb2oQPk_arZaPIstsHVO0HwV3rMc9CI58qpmSLUNRqnooEjv2UQTkneS7iXo6vyxV9dgPIDK7WmUerPmN9n3S-6xZ1jltnp0_lnZhEv7pe6D0LYeq0IbBwB0qd1CXBr8UnvhzQhhr1Slqo_pYrkHTaMJ-GhbtOvIZ3DIXwgNi9R7OOFJI5K4qOkTdcuznSsLX8BG_aS0FTjLNPDfno1jsnNxIh3f8-OW70rTM3suHuxXaOiHGOQJtRh6JZitH0V69bYrYnpo0rqNWXggSBslTdQ8rQCaZFfGA7t4i20ZDvrsUHWYHWm4kT_rqfqoi1iHO7Vh_bt48s8IvqATbPGV69wfso1eIkt00MeV1fbwKdRmI50_8Q0nNmNkzTKqxLI6Mm2PzLGY0VZ0PZg9cAPULAElRu6IGOeEA3KwGUNrY7_DUirHFJMuel9RSjVnrGOKM5PsVh2anXa8eeuQRp5kknmF7VOOiYTMZq1mrLSL5cV3hyWUFuQZYlIUFwcnZn-KN73xH74h6SoAlLq898Ak5J8GxRZFy8lTG2nvy3K0pJT1AsoiBYZTjftCOKZSmZ8yOgV-ilgRoa2Gp4XtetiEHgvW0j004UMGer7Dcu95B0lyGlAM1rxPQJPqnVFeJCOpqA7XwoQYXPct5lDzAACam_oCC8eu9ZdVv2AGFfye_exKmKVWxmgihrgtbDYFQ3FIG4B9vQx3zbbO74WqGnn_9WvcFciIxpi_tNUrbMrfrx9xSQ1_9dv0OSNHFZrlse2xiK24830JwRTK56mIwEGC4T4fABJXFb_nYNAW00liuZVNWahxjRqtd0bQHPFLfoycniuqHHL1vXhFsuMmHe_EU8D4n6RIcUlvYxvsL3kHCoM-iQA-cUk3I1bGlunaV797lD9fKX8iEKckL6Ql7MxGqvlA1iMFCwDw-JNO01vjNJu8aWavmOi5g5Bfy2Gw0NGhROwYKh1848khjxML5VqboXJTNd0YxjyZ3lutX9Lx_S2MzT58AktOGeCSUisTiyWPfsnM_69vFtXh12mDLQR1efCcjvWEzJhmG2oZAFHrGz6uMW9nyry_M1lht8E2byY_yeXQGaaTKitAdlHz_T_1TBOF", - "members": [ - "11GgZk795fcucYYaCz6f3iXJpR8iA5FVBJFgYzFbdeciXVacrke", - "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB", - "11aEVjsaJN7gfjggGvFuGEgixQVRtkWzEpzX15YHiZJkLSsuwdv", - "112Lx9Tren485XT7PvY7GHnmUVMTvyjwZ6hrxL7ozeDvqE7Jy6pA", - "11L2XXdnBjVmJiyb86yLyhbkg75VYEjSx9D6qMKYdsS3mnJzXoS", - "11JtrTKA3wGNE2Fgep5HLC2B3YTRDsAt4vNc7GEsVp8Y7nYKGz1", - "11JJ4RR6oPbpVouU1rzkRQC9T4VavDZrbbPaes8FVoD33uyxHQV", - "11cgLFT851vXJT4iAno1G89kct7qVM4H17EYrbJmZBuJhAyuvgD", - "112vXW9jvfNKVzWGfMYZhEmBxbGVro5iNZmUWiermAXgRebac3Pa", - "112NFATPKh4y7dXudyM9NwFwxzoLYHbX5eFzMjbQtCXTnQJrL1Ze", - "11BBZMfB8c8L3V5YVQ8KSTsVF9gx5HFcDyB5c2S1E2g86w7UPdc", - "1156oi8swcmxmR4RGM7fGHFA2JP4Lk4UjXL11tcxZQGCqfh58Po", - "112tfwpKvCqwDfzsfyAnQwj7gbmx59zKCKDaxBsmCZ4pPBd8Gasv", - "112QirNzqW2LuGAuorXA68mr9qiuWnaEALFPkeBi5AK5S5gccRjS", - "112pArcjJA6mPKAFVifkK84YVkVUro5iWh2TSbTwBcV7xrsyQyQ2", - "114eVcYfr3ujqUGsEKs1pJQQGAJTA5Lf4JgG9BjVmKnodr41Q5q" - ], - "height": 629706, - "hash": "c8gPYHwWpEGHMLhDynUHHw1k-qhW61JBPW8Q4kTlic0", - "delay": 5 - } - ] -} -``` - - - - ---- - -## Challenges for Account - -``` -GET https://api.helium.io/v1/accounts/:address/challenges -``` - -Fetches challenges that hotspots owned by the given account are involved in as a -challenger, challengee, or witness. - -The results are paged. If a `cursor` field is present in the response, more -results are available. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ----------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch activity for | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -```json -{ - "data": [ - { - "type": "poc_receipts_v1", - "time": 1608740853, - "secret": "AEGM923859xCnALUTWtVzYIkRKXAL4E0Ss1JRchMhhMdBOhuXOob79UwlghHhEZN2ChZe7vvnltg8Z2D-adlb-kkL-hv_ONvpcsFXPw9y_LYzIwTS7TAIVbqKfuBn_IVRcc", - "request_block_hash": "JTUr-_hX--L6TuwIkx-DEzeB--yMheo2Ud-yZ4LNVt4", - "path": [ - { - "witnesses": [ - { - "timestamp": 1608740090285495600, - "snr": -9, - "signal": -100, - "packet_hash": "p2ZijVno8DHGJui_bV6u-tABHQOiEB_c3NCFOv_-1xE", - "owner": "146MwmL9eJJCdrykbgdL3dobdChP4Ut34mCZMR3Hv9HXTeBJQzC", - "location": "8c44a105ca1d3ff", - "is_valid": true, - "gateway": "11fJaz1xwA2Xh1gQQWRh6FzDabEPkLs5bSMdDnSrb4CL1L5Y5Su", - "frequency": 905.2999877929688, - "datarate": "SF9BW125", - "channel": 7 - } - ], - "receipt": { - "timestamp": 1608740088868575200, - "snr": 0, - "signal": 0, - "origin": "p2p", - "gateway": "112V5U5MSMVBDTe6cCzWEXzuCbjK96GbKXwDPFSCyjeVnL3wHk5L", - "frequency": 0, - "datarate": null, - "data": "5_w", - "channel": 0 - }, - "geocode": { - "short_street": "Leslie Dr", - "short_state": "FL", - "short_country": "US", - "short_city": "Hallandale Beach", - "long_street": "Leslie Drive", - "long_state": "Florida", - "long_country": "United States", - "long_city": "Hallandale Beach", - "city_id": "aGFsbGFuZGFsZSBiZWFjaGZsb3JpZGF1bml0ZWQgc3RhdGVz" - }, - "challengee_owner": "1444k99dYKjngxQnqGxrB3CmqaFdGzPRWsxqbbu3LjjCyBocGhi", - "challengee_lon": -80.12177083059214, - "challengee_location": "8c44a10564825ff", - "challengee_lat": 25.9903614158387, - "challengee": "112V5U5MSMVBDTe6cCzWEXzuCbjK96GbKXwDPFSCyjeVnL3wHk5L" - } - ], - "onion_key_hash": "I86cUPLZ46naXW6IFhhXGVFeKftMi4FhtpsJwtW03T8", - "height": 644070, - "hash": "Z5yrO_XbwTT89xFjA1_3OlSke1KmkJ7VZmigd7NDVk8", - "fee": 0, - "challenger_owner": "13GCcF7oGb6waFBzYDMmydmXx4vNDUZGX4LE3QUh8eSBG53s5bx", - "challenger_lon": -81.70707772367822, - "challenger_location": "8c2ab38f19a43ff", - "challenger_lat": 41.480133219396784, - "challenger": "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB" - }, - { - "type": "poc_receipts_v1", - "time": 1608739733, - "secret": "ABCXJG0PUoO0iyTzvmd-XPVfJdPW3HBztPWjld7TLvOtBA-1qOjN6UNWkVmPp69FkUrnqZmJr1Zz-H-4v1lu7HGaABQ0p3X_Ge4hNZ6b2SpijiqUYf7i9JjgxzwMUtvy8bg", - "request_block_hash": "pO2v0ZyCEOYRZy7SXcsb2fGvTvfYRUxAlz4NHLG1H44", - "path": [ - { - "witnesses": [ - { - "timestamp": 1608738987154888200, - "snr": -11.199999809265137, - "signal": -106, - "packet_hash": "zgFKUHVz-ZZa-Wk4h_XwCtB9TcJGvBZRNynSTMaEyis", - "owner": "13s2SCJbWP9ZmGW5uULCehV7EJRDdYqLrmNCQCtoj5Y1RDerZAq", - "location": "8c2ab38f1d5c9ff", - "is_valid": true, - "gateway": "112GGQtavNrmWhEoLd5ABF1fbfXLccS747ez1dZHoh9TvgjJw29p", - "frequency": 904.5, - "datarate": "SF9BW125", - "channel": 3 - }, - { - "timestamp": 1608738987176681500, - "snr": -5.5, - "signal": -106, - "packet_hash": "zgFKUHVz-ZZa-Wk4h_XwCtB9TcJGvBZRNynSTMaEyis", - "owner": "13s2SCJbWP9ZmGW5uULCehV7EJRDdYqLrmNCQCtoj5Y1RDerZAq", - "location": "8c2ab38f1da8bff", - "is_valid": true, - "gateway": "11uHyX8PJhk7kqRiW2JaF2dR2PGVX8vB7FcQXVW6M1rY2BbuQHU", - "frequency": 904.5, - "datarate": "SF9BW125", - "channel": 3 - }, - { - "timestamp": 1608738987229829600, - "snr": 3, - "signal": -119, - "packet_hash": "zgFKUHVz-ZZa-Wk4h_XwCtB9TcJGvBZRNynSTMaEyis", - "owner": "13GCcF7oGb6waFBzYDMmydmXx4vNDUZGX4LE3QUh8eSBG53s5bx", - "location": "8c2ab38f19a43ff", - "is_valid": false, - "gateway": "1182nyT3oXZPMztMSww4mzaaQXGXd5T7JwDfEth6obSCwwxxfsB", - "frequency": 904.5, - "datarate": "SF9BW125", - "channel": 3 - } - ], - "receipt": { - "timestamp": 1608738985817671400, - "snr": 0, - "signal": 0, - "origin": "p2p", - "gateway": "11nCHecDUTkDxMNfAuMjF8cev7bfoKetWj4Y1MWDoSstDGhbMSs", - "frequency": 0, - "datarate": null, - "data": "W1k", - "channel": 0 - }, - "geocode": { - "short_street": "Bridge Ave", - "short_state": "OH", - "short_country": "US", - "short_city": "Cleveland", - "long_street": "Bridge Avenue", - "long_state": "Ohio", - "long_country": "United States", - "long_city": "Cleveland", - "city_id": "Y2xldmVsYW5kb2hpb3VuaXRlZCBzdGF0ZXM" - }, - "challengee_owner": "13JyFksMcfyMTpycMy1XStssPWcQJut61n68sMUhG1cJQBmwUWi", - "challengee_lon": -81.70946661837299, - "challengee_location": "8c2ab38f56003ff", - "challengee_lat": 41.48413978192872, - "challengee": "11nCHecDUTkDxMNfAuMjF8cev7bfoKetWj4Y1MWDoSstDGhbMSs" - } - ], - "onion_key_hash": "doMVn-c8K7SnduqUU4CJFGloUeAMB0pYRcOkTrAyt4Y", - "height": 644054, - "hash": "QKjdegKY_muFONmC3mbwKjlCP4BaR9zCsXZSanKQWgY", - "fee": 0, - "challenger_owner": "13hc8BeaE5kUiMYW1FLU8dnV4t2XUM4sWxHxM2E34NF3tnJdiXj", - "challenger_lon": -73.93747871760092, - "challenger_location": "8c2a100dc6dd5ff", - "challenger_lat": 40.697659486078635, - "challenger": "11eqcRNEgAk7vioFtgtTWUERyV98Vj5iDEm75YMbUCS3uaLKFXR" - } - ] -} -``` - - - - ---- - -## Pending Transactions for Account - -``` -GET https://api.helium.io/v1/accounts/:address/pending_transactions -``` - -Fetches the outstanding transactions for the given account. See Pending -Transactions for details.The list of returned pending transactions is paged. If -a `cursor` field is present more results are available. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch details for | - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ------------------------------------------------- | -| cursor (optional) | _string_ | Cursor for the next page of transactions to fetch | - - - - -200: OK - -A single pending transaction for a given account - -```json -{ - "data": [ - { - "created_at": "2020-04-30T18:13:17.411141Z", - "failed_reason": "", - "hash": "IUXgVfnYPlv_Br3Rhng6bKTaLb_AzX9DC3E9NGJhAKs", - "status": "pending", - "txn": { - "fee": 0, - "nonce": 6, - "payer": "13C8mAv3M3SUQ1ZgREHsGxabcsHtDCkmkJLp9sGimqfWT4GRf9W", - "payments": [ - { - "amount": 2, - "payee": "13C8mAv3M3SUQ1ZgREHsGxabcsHtDCkmkJLp9sGimqfWT4GRf9W" - } - ], - "signature": "TcB6zhMf6_ImaMyuTbWRd33W-hlzCwxxZtyIeJRQwUTvHN00V1U4Jn7ooyNHjFAoBgvxBDN2VmQ5Fez0OQoICA" - }, - "type": "payment_v2", - "updated_at": "2020-04-30T18:47:19.960477Z" - } - ] -} -``` - - - - ---- - -## Rewards for an Account - -``` -GET https://api.helium.io/v1/accounts/:address/rewards -``` - -Returns reward entries by block and gateway for a given account in a timeframe. -Timestamps are given in ISO 8601 format. The block that contains the `max_time` -timestamp is **excluded** from the result. - -The result will be a list of rewards between `min_time` and `max_time` both -given in UTC. Both default to "now" which means that at least one of the two -parameters is required. - -The result includes a `type` field which is the type of activity that generated the -reward. - -This route is paged using a `cursor`. - -:::info -For older reward results, if the `type` is `null` the amount is a total for that -account or hotspot in the given block. -::: - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch details for | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | -------------------------------------- | -| cursor (optional) | _string_ | Cursor for page of rewards to fetch | -| max_time (optional) | _string_ | Last timestamp to include rewards for | -| min_time (required) | _string_ | First timestamp to include rewards for | - - - - -200: OK - -Rewards for an account with `min_time=2020-08-27&max_time=2020-08-28` - -```json -{ - "data": [ - { - "type": null, - "timestamp": "2020-08-27T23:55:45.000000Z", - "hash": "HF7qP3usRFFhjcSajGRElHGdQOzUS47UJfSeYRGA-1o", - "gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88", - "block": 470714, - "amount": 8650492, - "account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM" - } - ], - "cursor": "eyJlbmRfYmxvY2siOjQ2OTUzMCwiYmxvY2siOjQ3MDcwMCwiYW5jaG9yX2Jsb2NrIjo0NzA3MDB9" -} -``` - - - - ---- - -## Rewards in a Rewards Block for an Account - -``` -GET https://api.helium.io/v1/hotspots/:address/rewards/:block -``` - -Returns rewards for a given account for a given block. - -The result includes a `type` field which is the type of activity that generated -the reward. - -This route is paged using a `cursor`. - -:::info -For older reward results, if the `type` is `null` the amount is a total for that -account in the given block. -::: - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | -------------------------- | -| address (required) | _string_ | B58 address of the hotspot | - - - - -200: OK - -Rewards for an account in block `470788` - -```json -{ - "data": [ - { - "type": null, - "timestamp": "2020-08-28T01:29:46.000000Z", - "hash": "DTU1GGfR0eU15hv6KiV_bg6FOJXfUWz4TjIq1H7TGy4", - "gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88", - "block": 470788, - "amount": 7885016, - "account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM" - } - ] -} -``` - - - - ---- - -## Reward Totals for an Account - -``` -GET https://api.helium.io/v1/accounts/:address/rewards/sum -``` - -Returns the total rewards for a given account in a given timeframe. Timestamps -can be given in ISO 8601 format (e.g. `2020-08-27T00:00:00Z`) or in relative -time (e.g. `-1 week`, which when url esacped becomes `-1%20week`). When ommitted -the current time is assumed. - -The results can also be bucketed in time by specifying a `bucket` query -parameter which buckets information per bucket in the given timeframe. Data is -bucketed per hotspot and time for the account to make hotspot performance -comparison possible. Valid bucket values include `hour`, `day` and `week`). - -For example to get the last 7 days of rewards bucketed by day use the following -path/parameters: `?min_time=-7%20day&bucket=day` - -The block that contains the `max_time` timestamp is -**excluded** from the result. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch details for | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| min_time (required) | _string_ | First time to include rewards for | -| max_time (required) | _string_ | Last time to include rewards for | -| bucket (optional) | _string_ | Bucket specifier | - - - - -200: OK - -Returns the total rewards over a given time range - -```json -{ - "data": { - "max_time": "2020-08-29T00:00:00Z", - "min_time": "2020-08-27T00:00:00Z", - "sum": "176714898" - } -} -``` - - - - ---- - -## Stats for Account - -``` -GET https://api.helium.io/v1/accounts/:address/stats -``` - -Fetches account statistics for a given account. This currently includes account -balance information (in bones) for the last month (daily), last week (every 8 -hours), and daily (hourly). - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | -------------------------------------- | -| address (required) | _string_ | Account B58 address to fetch stats for | - - - - -200: OK - -```json -{ - "data": { - "last_week": [ - { - "timestamp": "2020-12-24T00:00:00.000000Z", - "balance": 2726587598732 - }, - { - "timestamp": "2020-12-23T16:00:00.000000Z", - "balance": 2726579175524 - }, - { - "timestamp": "2020-12-23T08:00:00.000000Z", - "balance": 2726236453934 - }, - { - "timestamp": "2020-12-23T00:00:00.000000Z", - "balance": 2726227814759 - }, - { - "timestamp": "2020-12-22T16:00:00.000000Z", - "balance": 2725942362517 - }, - { - "timestamp": "2020-12-22T08:00:00.000000Z", - "balance": 2725650289654 - }, - { - "timestamp": "2020-12-22T00:00:00.000000Z", - "balance": 2725147917954 - }, - { - "timestamp": "2020-12-21T16:00:00.000000Z", - "balance": 2724406718606 - }, - { - "timestamp": "2020-12-21T08:00:00.000000Z", - "balance": 2724056284882 - }, - { - "timestamp": "2020-12-21T00:00:00.000000Z", - "balance": 2723209316840 - }, - { - "timestamp": "2020-12-20T16:00:00.000000Z", - "balance": 2722951323859 - }, - { - "timestamp": "2020-12-20T08:00:00.000000Z", - "balance": 2722934379280 - }, - { - "timestamp": "2020-12-20T00:00:00.000000Z", - "balance": 2722897458808 - }, - { - "timestamp": "2020-12-19T16:00:00.000000Z", - "balance": 2722688076583 - }, - { - "timestamp": "2020-12-19T08:00:00.000000Z", - "balance": 2722582293089 - }, - { - "timestamp": "2020-12-19T00:00:00.000000Z", - "balance": 2722544226107 - }, - { - "timestamp": "2020-12-18T16:00:00.000000Z", - "balance": 2722495151953 - }, - { - "timestamp": "2020-12-18T08:00:00.000000Z", - "balance": 2720896037594 - }, - { - "timestamp": "2020-12-18T00:00:00.000000Z", - "balance": 2720485905293 - }, - { - "timestamp": "2020-12-17T16:00:00.000000Z", - "balance": 2719886473562 - }, - { - "timestamp": "2020-12-17T08:00:00.000000Z", - "balance": 2719278670960 - }, - { - "timestamp": "2020-12-17T00:00:00.000000Z", - "balance": 2719231394336 - } - ], - "last_month": [ - { - "timestamp": "2020-12-24T00:00:00.000000Z", - "balance": 2726587598732 - }, - { - "timestamp": "2020-12-23T00:00:00.000000Z", - "balance": 2726227814759 - }, - { - "timestamp": "2020-12-22T00:00:00.000000Z", - "balance": 2725147917954 - }, - { - "timestamp": "2020-12-21T00:00:00.000000Z", - "balance": 2723209316840 - }, - { - "timestamp": "2020-12-20T00:00:00.000000Z", - "balance": 2722897458808 - }, - { - "timestamp": "2020-12-19T00:00:00.000000Z", - "balance": 2722544226107 - }, - { - "timestamp": "2020-12-18T00:00:00.000000Z", - "balance": 2720485905293 - }, - { - "timestamp": "2020-12-17T00:00:00.000000Z", - "balance": 2719231394336 - }, - { - "timestamp": "2020-12-16T00:00:00.000000Z", - "balance": 2716992988275 - }, - { - "timestamp": "2020-12-15T00:00:00.000000Z", - "balance": 2714499571334 - }, - { - "timestamp": "2020-12-14T00:00:00.000000Z", - "balance": 2712996222990 - }, - { - "timestamp": "2020-12-13T00:00:00.000000Z", - "balance": 2703175106511 - }, - { - "timestamp": "2020-12-12T00:00:00.000000Z", - "balance": 2701913148104 - }, - { - "timestamp": "2020-12-11T00:00:00.000000Z", - "balance": 2699717238347 - }, - { - "timestamp": "2020-12-10T00:00:00.000000Z", - "balance": 2698120119399 - }, - { - "timestamp": "2020-12-09T00:00:00.000000Z", - "balance": 2696104012737 - }, - { - "timestamp": "2020-12-08T00:00:00.000000Z", - "balance": 2694835982946 - }, - { - "timestamp": "2020-12-07T00:00:00.000000Z", - "balance": 2692158753830 - }, - { - "timestamp": "2020-12-06T00:00:00.000000Z", - "balance": 2689398873651 - }, - { - "timestamp": "2020-12-05T00:00:00.000000Z", - "balance": 2687488073405 - }, - { - "timestamp": "2020-12-04T00:00:00.000000Z", - "balance": 2686193207861 - }, - { - "timestamp": "2020-12-03T00:00:00.000000Z", - "balance": 2684790604843 - }, - { - "timestamp": "2020-12-02T00:00:00.000000Z", - "balance": 2682678566170 - }, - { - "timestamp": "2020-12-01T00:00:00.000000Z", - "balance": 2680802668931 - }, - { - "timestamp": "2020-11-30T00:00:00.000000Z", - "balance": 2679059221953 - }, - { - "timestamp": "2020-11-29T00:00:00.000000Z", - "balance": 2677312562564 - }, - { - "timestamp": "2020-11-28T00:00:00.000000Z", - "balance": 2675534596168 - }, - { - "timestamp": "2020-11-27T00:00:00.000000Z", - "balance": 2674031525165 - }, - { - "timestamp": "2020-11-26T00:00:00.000000Z", - "balance": 2673184081131 - }, - { - "timestamp": "2020-11-25T00:00:00.000000Z", - "balance": 2671270944491 - }, - { - "timestamp": "2020-11-24T00:00:00.000000Z", - "balance": 2669603645697 - } - ], - "last_day": [ - { - "timestamp": "2020-12-23T19:00:00.000000Z", - "balance": 2726587598732 - }, - { - "timestamp": "2020-12-23T18:00:00.000000Z", - "balance": 2726587598732 - }, - { - "timestamp": "2020-12-23T17:00:00.000000Z", - "balance": 2726587598732 - }, - { - "timestamp": "2020-12-23T16:00:00.000000Z", - "balance": 2726579175524 - }, - { - "timestamp": "2020-12-23T15:00:00.000000Z", - "balance": 2726579175524 - }, - { - "timestamp": "2020-12-23T14:00:00.000000Z", - "balance": 2726322880219 - }, - { - "timestamp": "2020-12-23T13:00:00.000000Z", - "balance": 2726322880219 - }, - { - "timestamp": "2020-12-23T12:00:00.000000Z", - "balance": 2726306228185 - }, - { - "timestamp": "2020-12-23T11:00:00.000000Z", - "balance": 2726306228185 - }, - { - "timestamp": "2020-12-23T10:00:00.000000Z", - "balance": 2726306228185 - }, - { - "timestamp": "2020-12-23T09:00:00.000000Z", - "balance": 2726252381243 - }, - { - "timestamp": "2020-12-23T08:00:00.000000Z", - "balance": 2726236453934 - }, - { - "timestamp": "2020-12-23T07:00:00.000000Z", - "balance": 2726236453934 - }, - { - "timestamp": "2020-12-23T06:00:00.000000Z", - "balance": 2726236453934 - }, - { - "timestamp": "2020-12-23T05:00:00.000000Z", - "balance": 2726236453934 - }, - { - "timestamp": "2020-12-23T04:00:00.000000Z", - "balance": 2726236453934 - }, - { - "timestamp": "2020-12-23T03:00:00.000000Z", - "balance": 2726236453934 - }, - { - "timestamp": "2020-12-23T02:00:00.000000Z", - "balance": 2726227814759 - }, - { - "timestamp": "2020-12-23T01:00:00.000000Z", - "balance": 2726227814759 - }, - { - "timestamp": "2020-12-23T00:00:00.000000Z", - "balance": 2726227814759 - }, - { - "timestamp": "2020-12-22T23:00:00.000000Z", - "balance": 2726184001677 - }, - { - "timestamp": "2020-12-22T22:00:00.000000Z", - "balance": 2726184001677 - }, - { - "timestamp": "2020-12-22T21:00:00.000000Z", - "balance": 2726184001677 - }, - { - "timestamp": "2020-12-22T20:00:00.000000Z", - "balance": 2725942362517 - }, - { - "timestamp": "2020-12-22T19:00:00.000000Z", - "balance": 2725942362517 - } - ] - } -} -``` - - - diff --git a/docs/api/blockchain/assert-locations.mdx b/docs/api/blockchain/assert-locations.mdx deleted file mode 100644 index d657b306e..000000000 --- a/docs/api/blockchain/assert-locations.mdx +++ /dev/null @@ -1,108 +0,0 @@ ---- -id: assert-locations -sidebar_label: Assert Locations -slug: /api/blockchain/assert-locations ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Assert Locations - ---- - -## List Assert Locations - -``` -GET https://api.helium.io/v1/assert_locations -``` - -Use this API to list `assert_location` transactions. - -This route is `cursor` paginated. - - - - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| cursor (optional) | _string_ | Cursor for page to fetch | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -Return a page of `assert_location` transactions. - -```json -{ - "data": [ - { - "elevation": 0, - "fee": 55000, - "gain": 23, - "gateway": "112tfWD6YdC6xR22VT2D5Sbi98R5ixTUtDuDAzagv4Xz8wAjCTf4", - "hash": "yF8KGoIs_08GvA_IGL_L9DVem0SUNehr5kFcxDkDPWc", - "height": 950804, - "lat": 38.91382465500603, - "lng": -77.12481928707234, - "location": "8c2aa84c195dbff", - "nonce": 1, - "owner": "13uBLKd9B4CppL3tQq2W7jENQVygGZg3ou7dwoDdUjTQcoNBYm4", - "payer": "13ENbEQPAvytjLnqavnbSAzurhGoCSNkGECMx7eHHDAfEaDirdY", - "staking_fee": 1000000, - "time": 1628021279, - "type": "assert_location_v2" - }, - { - "elevation": 10, - "fee": 55000, - "gain": 28, - "gateway": "1123Py2LUM13aLsCtfBpxhjxrrSWFuPujr6PNdW9Ro1TE5v8YMUH", - "hash": "zkjMS4CCfs4w0XFmim7lNZmVESCjUsbkWB2ExzicLZ0", - "height": 950804, - "lat": 35.86088843248591, - "lng": 14.485309777200525, - "location": "8c3f304ee6cb9ff", - "nonce": 3, - "owner": "13xXTxcpkFmH2tcjZy22441tMEy5AmfNokGP4ndbFVJdeoZbdoe", - "payer": "13xXTxcpkFmH2tcjZy22441tMEy5AmfNokGP4ndbFVJdeoZbdoe", - "staking_fee": 1000000, - "time": 1628021279, - "type": "assert_location_v2" - }, - { - "elevation": 4, - "fee": 55000, - "gain": 30, - "gateway": "112EywgXfCWKfygcK1zGiYbWxXKHza4DuGf8kRAdtXkXWekMN5p3", - "hash": "ZuhUWAgMaTuLrgI3wtKyl7pbZLDX6w9dFxI3bp0QqQI", - "height": 950804, - "lat": 51.20481267630534, - "lng": 3.262542526481705, - "location": "8c194d104cf67ff", - "nonce": 1, - "owner": "14UrMw4DcEy7TJQy53SJmjMkDLAGjTk4L5FXv7NMmfeN7vCJyME", - "payer": "13Zni1he7KY9pUmkXMhEhTwfUpL9AcEV1m2UbbvFsrU9QPTMgE3", - "staking_fee": 1000000, - "time": 1628021279, - "type": "assert_location_v2" - } - ], - "cursor": "eyJ0eXBlcyI6InN0YXRlX2NoYW5uZWxfY2xvc2VfdjEiLCJtaW5fYmxvY2siOjEsImJsb2NrIjo5NDM0MDAsImFuY2hvcl9ibG9jayI6OTQzNDAwfQ" -} -``` - - - - ---- diff --git a/docs/api/blockchain/blocks.mdx b/docs/api/blockchain/blocks.mdx deleted file mode 100644 index 264f6563f..000000000 --- a/docs/api/blockchain/blocks.mdx +++ /dev/null @@ -1,893 +0,0 @@ ---- -id: blocks -sidebar_label: Blocks -slug: /api/blockchain/blocks ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Blocks - ---- - -## Height - -Gets the current height of the blockchainn. - -If `max_time` is speified this returns highest block height that was valid (but -not equal to) the given time.`max_time` can be given as an ISO8601 timestamp or -relative time can be used. - -``` -GET https://api.helium.io/v1/blocks/height -``` - - - - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | ------------------------------------- | -| max_time (optional) | _string_ | Last time to include in height search | - - - - -200: OK - -```json -{ - "data": { - "height": 644081 - } -} -``` - - - - ---- - -## Block Stats - -Get statistics on block production times. - -``` - -GET https://api.helium.io/v1/blocks/stats - -``` - - - - -No Parameters - - - - -200: OK - -```json -{ - "data": { - "last_day": { - "avg": 62.31024531024531, - "stddev": 27.476995228717882 - }, - "last_hour": { - "avg": 57.04838709677419, - "stddev": 14.35889787468274 - }, - "last_month": { - "avg": 60.905921680993316, - "stddev": 45.412766632370634 - }, - "last_week": { - "avg": 61.16405380803075, - "stddev": 28.40161296349413 - } - } -} -``` - - - - --- - -## Block Descriptions - -``` - -GET https://api.helium.io/v1/blocks - -``` - -Retrieves block descriptions. Blocks descriptions are paged. A `cursor` field -will be in the response when more results are available. - - - - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ------------------------ | -| cursor (optional) | _string_ | Cursor for page to fetch | - - - - -200: OK - -```json -{ - "data": [ - { - "transaction_count": 25, - "time": 1595978521, - "snapshot_hash": "", - "prev_hash": "BLlAdSn-TV2SLQzj-52UYRckLCE-D5BrZir09eVEEcQ", - "height": 435215, - "hash": "qqLVA7QELYoVFE0hoTUFy-5ZR6pPueORPYU3N8rLoQs" - }, - { - "transaction_count": 118, - "time": 1595978467, - "snapshot_hash": "", - "prev_hash": "NiK7bLdPOopqKQ8m0HF-Da6gK_UvRlypPgnjOFEooBg", - "height": 435214, - "hash": "BLlAdSn-TV2SLQzj-52UYRckLCE-D5BrZir09eVEEcQ" - }, - { - "transaction_count": 83, - "time": 1595978414, - "snapshot_hash": "", - "prev_hash": "xEsMbaiIjK_LLChHdEG78X7vsrl1CZOStEB3GHGe7g8", - "height": 435213, - "hash": "NiK7bLdPOopqKQ8m0HF-Da6gK_UvRlypPgnjOFEooBg" - }, - { - "transaction_count": 39, - "time": 1595978361, - "snapshot_hash": "", - "prev_hash": "m34Ky28U-Eqy7FjSYJ5hCXs9dRCfyPKuJoQT2F52bBA", - "height": 435212, - "hash": "xEsMbaiIjK_LLChHdEG78X7vsrl1CZOStEB3GHGe7g8" - }, - { - "transaction_count": 111, - "time": 1595978305, - "snapshot_hash": "", - "prev_hash": "C61I8DM_sq6nXNxVo7oNkV67GMzRpU21eOTrb3cRPz8", - "height": 435211, - "hash": "m34Ky28U-Eqy7FjSYJ5hCXs9dRCfyPKuJoQT2F52bBA" - }, - { - "transaction_count": 80, - "time": 1595978251, - "snapshot_hash": "", - "prev_hash": "DFy2DrhBjXg_9me2tj5lYso1WSD1In-5TBEsxMdKCTc", - "height": 435210, - "hash": "C61I8DM_sq6nXNxVo7oNkV67GMzRpU21eOTrb3cRPz8" - }, - { - "transaction_count": 60, - "time": 1595978198, - "snapshot_hash": "", - "prev_hash": "MyTG04W_ShUktv34KIeQVeomGBIET_SHU2IAM7KQCtg", - "height": 435209, - "hash": "DFy2DrhBjXg_9me2tj5lYso1WSD1In-5TBEsxMdKCTc" - }, - { - "transaction_count": 101, - "time": 1595978145, - "snapshot_hash": "", - "prev_hash": "5LHAyQ5GhydrQhNT1D1E8q6OnyjfiFTMEEwMx8G77lM", - "height": 435208, - "hash": "MyTG04W_ShUktv34KIeQVeomGBIET_SHU2IAM7KQCtg" - }, - { - "transaction_count": 78, - "time": 1595978091, - "snapshot_hash": "", - "prev_hash": "KMLLGN0v590zMEoAgW6yXWuYtdePDRza74_TF5cZNDY", - "height": 435207, - "hash": "5LHAyQ5GhydrQhNT1D1E8q6OnyjfiFTMEEwMx8G77lM" - }, - { - "transaction_count": 108, - "time": 1595978035, - "snapshot_hash": "", - "prev_hash": "i6NtsS96nGoj3H1QAU4bYjPsRTotAfG1m6CYU0gt_R0", - "height": 435206, - "hash": "KMLLGN0v590zMEoAgW6yXWuYtdePDRza74_TF5cZNDY" - }, - { - "transaction_count": 96, - "time": 1595977982, - "snapshot_hash": "", - "prev_hash": "L-kane8sS3lN5VqGXjl-VwgMvQ9gdw2Nh8rXgCgSZ4c", - "height": 435205, - "hash": "i6NtsS96nGoj3H1QAU4bYjPsRTotAfG1m6CYU0gt_R0" - }, - { - "transaction_count": 106, - "time": 1595977929, - "snapshot_hash": "", - "prev_hash": "il2OTxAn9kb-AkSBendovVQdISb2ooRrn4yE73qv6jI", - "height": 435204, - "hash": "L-kane8sS3lN5VqGXjl-VwgMvQ9gdw2Nh8rXgCgSZ4c" - }, - { - "transaction_count": 107, - "time": 1595977869, - "snapshot_hash": "", - "prev_hash": "ASznLcdOo4xX7Vl-zy17l-XuJ-oO5NvShR9QrLM8Etg", - "height": 435203, - "hash": "il2OTxAn9kb-AkSBendovVQdISb2ooRrn4yE73qv6jI" - }, - { - "transaction_count": 55, - "time": 1595977816, - "snapshot_hash": "", - "prev_hash": "IFf8Mv0rihCic2wGLA-d2ticcmDp5baPXjqSEzt_Q-w", - "height": 435202, - "hash": "ASznLcdOo4xX7Vl-zy17l-XuJ-oO5NvShR9QrLM8Etg" - }, - { - "transaction_count": 104, - "time": 1595977735, - "snapshot_hash": "", - "prev_hash": "4Bbk2hlXB9Ophgn4jk-2QH_6HeAzn12yom04WtkoPbM", - "height": 435201, - "hash": "IFf8Mv0rihCic2wGLA-d2ticcmDp5baPXjqSEzt_Q-w" - } - ], - "cursor": "eyJiZWZvcmUiOjQzNTIwMX0" -} -``` - - - - ---- - -## Block at Height - -``` -GET https://api.helium.io/v1/blocks/:height -``` - -Get block descriptor for block at height - - - - -_Path Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ----------------- | -| height (required) | _number_ | Blockchain Height | - - - - -200: OK - -```json -{ - "data": { - "transaction_count": 37, - "time": 1582192928, - "snapshot_hash": "", - "prev_hash": "Xj6vrBi_IcP0vqHHawf0FFWkG1qn18I9thQKOEhblXg", - "height": 213787, - "hash": "o5o8cBL1Zvp1KmA1d8vYJ38wXXWVxf1HW2e1uZxVJYg" - } -} -``` - - - - ---- - -## Block at Height Transactions - -``` -GET https://api.helium.io/v1/blocks/:height/transactions -``` - -Get transactions for a block at a given height. The list of returned -transactions is paged. A cursor field is present if more results are available. - - - - -_Path Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ------------------------------------- | -| height (required) | _number_ | Block height to fetch transaction for | - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ---------------------------- | -| cursor (optional) | _string_ | Cursor for the page to fetch | - - - - -200: OK - -```json -{ - "data": [ - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEUCIEtI0JUGWFDZxdZ-MqaamBibe9XA7Hu7KtppFxER2_VlAiEAjmdtV8WcdyTVOMF1wLSiRXtsim2cEndKnnhavPAj7ms", - "secret_hash": "PDp3wlQDWQHOv3_cYO3iXSGO5lQPY-nk0nGZ-aCWj6U", - "owner": "13RU6fRkU1uGviyWJzgSVJAiVDhyf97dqBDMTmVjHEAuBy5LN1F", - "onion_key_hash": "T9wxjep44KOQrgw7L7nTBUlTp87BL1lvyCievMmxSHo", - "location": "8c2a30650aad7ff", - "lng": -71.1952338305713, - "lat": 42.34690845297784, - "height": 213787, - "hash": "0XQR1wmeqRYF8BeIPLtqr7ZZQHLWAg7CavmKPrSxF8w", - "fee": 0, - "challenger": "11mxTwhQVMS9o5GqaQ3MW9NbJeQM8x89e52YG3Em4turgAHPSgs", - "block_hash": "XcQXEO8eeJeCQ1V6hcCBMH06a1pOZXxrUBp-2NhM8Yg" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEUCIQCUJskKawMwc9G3Uv_ZRYrhSrHo4QoNuZT4amHVS3rkmQIgJ_RZ-9z3v9T5JNwnAtDTynwJpqO1cQ3KHPBeFGxRBQY", - "secret_hash": "B7scyTy8h6nsXymcrXPaCt0MShUGki2fvPx7lsmRkXc", - "owner": "13Wjb3U16ct477Qixg45nWEtRh4Jg2qTp2iuqgD2Adk8gQmF8Bo", - "onion_key_hash": "1xip4moxB5lx8UO5Dwo35ppMfJi_ASSgxsYaLPaHLRU", - "location": "8c44c13164947ff", - "lng": -84.23063101246672, - "lat": 33.85883850690923, - "height": 213787, - "hash": "6J8ZsZjDF2tiStMOVjtEG9jaKnpLZfAwY4jXx9bX1y4", - "fee": 0, - "challenger": "1181v5Saf87iUexQ8WtqA6xLrzbuF2UaS6dGY8R8p4yqoK1ZjMA", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEQCIEEk2H6NFe9CY7ZtoPPr-9cyBDuDCTvrOOzKpPW7ldIAAiAfGXSl2cgqtVzN8um0PyCTr_dD8_Gmp2CwL8SEkuv1Ew", - "secret_hash": "zCA4W7sUqVu6Gzpz-5TUbzxTTv8SbY0B74VCIp46Hys", - "owner": "14MRMNbNQidNFTszjoYugvMPxQLqLoZyPADSwJKvvnzgd8UX2UZ", - "onion_key_hash": "PyGkman-6k81fdcQn9_DS9dJLRo9r4P9ijpRxPnM4-E", - "location": "8c2663d04684bff", - "lng": -88.31876752603684, - "lat": 40.10013118277986, - "height": 213787, - "hash": "_aOH3TaNbUXB-aETIk7bsUyH6p9HOWDfx3P5wXBxnQQ", - "fee": 0, - "challenger": "11K6YeKEqfwMJu2wy64YHdQhXT8Hy5aMA4SxFdvCR4zwQyF17Xo", - "block_hash": "znLXFN1OaN6aosWTZRmpZ2SIu0wiT4LKG3VkDpf8oqA" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEUCIGCf9Mxj5P9aeuIwbhMrGkhVORX9ymsditZ8jwgrRGoTAiEAmv6oeps953HnAGjtW6b7yu6gKiGYDXneMJxOPPX5cN4", - "secret_hash": "otNY8AVs8_JsIay-CA5XXAiKInVEx00lwXnLBIAfWKo", - "owner": "135qJwSQD2eFBsDjcDWKRgJucKRocVLvxrunc1W9KhcJe9CAp4G", - "onion_key_hash": "lEEBV1DODq5iFKYq4h6mmb-Oba-6dcYfQ3cMUjFhxHc", - "location": "8c2a107a90b09ff", - "lng": -74.21400962950572, - "lat": 40.68133174681411, - "height": 213787, - "hash": "AqLEUGRylc9kfW_tyLMwTJPunVXmlqh5ZrzYVUWxBIE", - "fee": 0, - "challenger": "11cpn65Uuugxs9YAAvYc1i7J9xgWY2pjSj4Y2FFvaFypa8bccLq", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEUCIGPQZRXlxMMJXAiOyYAja70dC6HihyvXNoDRTno3Rw7gAiEAsKS_4qaQ0zLf42sW1SaLnqfb1mUquwFpHbU0-lo21yo", - "secret_hash": "CZjCoW6RU6TejMQjhgePVXPc759u5yp04Y9z5ye5C28", - "owner": "14gaNAfNSL8pPAVjTyy8LhRjVgw9t8JunooEmCSyXLAX9A3pfMF", - "onion_key_hash": "mWsd00ByHhfa_2J-CpphhbhSIiqg58_tMiYkoOBEU6Y", - "location": "8c2a340910313ff", - "lng": -70.2707016518933, - "lat": 43.655908895594315, - "height": 213787, - "hash": "bdkRW7Dxx-ESPSz7i_vxk-jXIqUfmFL9pZUWYmJOwYU", - "fee": 0, - "challenger": "112u5QmxT5LVrD9vdtT1hJ7bBEdqthhbbefTaNK1JCS5n4xbKRoo", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEQCIDDdF3MhXzgLzVRHi6-x55ASjv9BtbIneBMyGekAThY0AiApKRRfmZRVYt-7Bx_le9uaUmmWYkWPv1IXDXRgCGR1Ww", - "secret_hash": "Upa8MV8OvHZBddL-GLAyeNTJ7P80vTAxYFsTI25AnOk", - "owner": "139fiM2t9SGU8yB1QG5GxRy9qztpcnjr1F5u7Paop9Lsh7G31sn", - "onion_key_hash": "F2lzKJQyFet4zkgVaqR9FeO1i6SqICpaN5P1RfbM07E", - "location": "8c44d9975282bff", - "lng": -82.72848196624813, - "lat": 35.533213738889785, - "height": 213787, - "hash": "c-6u-jO4YX0dgxXSUMK7HKxdPUmxbxwXCbHblKDbHjQ", - "fee": 0, - "challenger": "112oBX3SKsRdxXD97dNVL8k5ejnS6bYiKxjWeRS2yuj8gCkgLUb1", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEQCIEQkbbVN05yp4ynRKCdnXbPBOADm645fVXXg3wQ5EGgJAiAqO__gcfiLdmPqtofKvf1XAnXL6oyTe2f6YSIkatGfMg", - "secret_hash": "0RusqDuS5D1l6VxHHqOfYKN3_dRzS9glMuv9XhlHJOc", - "owner": "14FrS6JfobouRDVf7FbYuvvR5uNzB688qESpQNXLoaCqd1zDN7P", - "onion_key_hash": "VQuQlV7KfjAK2xT0CqP6a-qt_sZHBD5AQKeHOiSRMeE", - "location": "8c2a122dbb893ff", - "lng": -75.27858120362838, - "lat": 40.236503579574276, - "height": 213787, - "hash": "CGjUzaSOqukYqnJK2zYd0YuvGea0MrNdlRCubhEPbag", - "fee": 0, - "challenger": "112a5Mzuhw4h9Er29yGhsYLi9FePQmzmgyKXZW53to8uXHzZYSS3", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEYCIQC0VJsxXtXeYR_NAOtoFz3C-tbOam3sQFKMAyufH0RdGgIhAKK0BBiCJYOOpDVikt1jbxMUscVz9q3gRTrw9ga1NNJ0", - "secret_hash": "30jwhK8zdNvluN4ikCymnWo3GBwYfyWk1fALTBFYcHU", - "owner": "13T8w9Y88SEqbuzRkDq49xHKfX57cJbbv5y1fTqMU79Wu1q1o5j", - "onion_key_hash": "1oYPe7schX1Ph2ZpP4zGGOviXfBLoZlF_WK3usuelac", - "location": "8c2a10564c437ff", - "lng": -74.03002342945634, - "lat": 41.04224197668894, - "height": 213787, - "hash": "E80uoOjygu6SbUqsnEu-lCXKjbzZW9WiHSrKx033-MI", - "fee": 0, - "challenger": "114PsNUa1rMT9Q2PpeAqs9RpJXjMgb5BNT5Azi9CaVQ6daijLRo", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEQCIBYBRSno33FSUpXXZnMy51MK9ciU_MO__wWl9nk7UlLqAiA1OU26vJxQp8irF6NpdqPLynpTMBdTxSgEiAYTcr-0UA", - "secret_hash": "G7PfwPRmL5NFwtVNhAA3y9F0-6_tfKLeV7Vq6fLUOEY", - "owner": "14RhEs3bVE9WYryYjdBG3LksJVhd9Wp5fxPLRQeHebTrPKReeyE", - "onion_key_hash": "miByk1ioQpmSoSlLmk5pSlhnoQHdK-GXZGsiNJQSvxc", - "location": "8c2836156622bff", - "lng": -121.02718668572189, - "lat": 37.65368378785006, - "height": 213787, - "hash": "eLaP-eUAJbJJIQSIkb3u5wD-eQMjJ_qeI-zF8YWa-7o", - "fee": 0, - "challenger": "11F2cGbEYfB6qvmNLE7tXWnkgqLfWPvHpxsgyghNRidusGDKD41", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEQCIBDls8CH7DspVWl0IC77XLzzt7wHygTukGlibTygCP3QAiAl9fR9dNgLgaSIkl4cqBrSqjtbtu_Eg1UeMjRqmi9mog", - "secret_hash": "SR-livfqQa58lN3WX5a9jIBUW63DFOUUAgCC27WRu6I", - "owner": "13BPvTrw32jdsBPJYnL7whYghwLboCqipTaJbhSEaaZVzgmEemm", - "onion_key_hash": "R9GPq3ssxi6LW_iuj-7KqSwKSmZ_in7EdJEGWcVrWbs", - "location": "8c489e3534f45ff", - "lng": -97.68010436306147, - "lat": 30.30448054652587, - "height": 213787, - "hash": "eMNvkAotMP4e3xAfN1gh5oc5CTXnIhf2sIxijE3oZXA", - "fee": 0, - "challenger": "117r6sxGnFD3n5GnMTqSfhLxYqoXcDvFpzjNkweD8ZhPr9YQLRU", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "type": "poc_receipts_v1", - "time": 1582192928, - "signature": "MEQCIGVhWn3s3_2HYQzGNFi2GmV3xsr8Nm2EemoHNyqPNb33AiAPOfTXQKEo6Ol1H6JnlNTihUDpK5qtVRM6JSEDaVNvYA", - "secret": "AJswL6q6bm7bGIwk3jzzyH0kDGSJHb14ZnI2GgVApo8uBC3mU933j0w0_5rF3ejIZdLSusOmCZdzhoag7RtADi6OGXHHEdRNfTIDYR_41sddC0mqPE8A3NXXo2mzpqqkgo4", - "path": [ - { - "witnesses": [], - "receipt": { - "timestamp": 1582192367974227200, - "signature": "MEUCIDD9BLjC_ghbIe7zhKQtDrhrlLD1BJgI_95ryQ6CFyyOAiEA1BZj_-faF_d7PFela0-EC6meWh3Wbe749I73Ta5gnyM", - "signal": 0, - "origin": "p2p", - "gateway": "112oQLEtxFFw4NrPZ7d1DFM1iScCunu5xvea99kVVTorNo16cBKg", - "data": "NJA" - }, - "challengee": "112oQLEtxFFw4NrPZ7d1DFM1iScCunu5xvea99kVVTorNo16cBKg" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "112SVQqroQvvq2rQHKWYfxP2eRb91NLXU8qduBCLt1B1DmLK6Xj" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "112CGr8XwCuHtD4CmewgCWfz6ttQaRLK5Up8cjoUng37zpLN5kbi" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "11DpearQqzUSCy4Mdho5CN4LSqZffhHkAwkeRieeAvELnpQzfUP" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "11DRokFJ3U9UkDU4BFN2djb6fH7wAwLr2ysXPJsbhDoUoyGFvuV" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "112DWqhAqCd5ie5sbSxXBG7o3mrGZgPSdhEYumbvxSNA4G5ZSxNe" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "1125H31qsBackYPLiYQQYHvxi6bRxzcfjRK5aJv1gA2ZwKb7WYL7" - } - ], - "onion_key_hash": "qDnv0zJGjHUvgZTmGyJspRiPZvktTqQ-enBE43xrceg", - "height": 213787, - "hash": "GJMR4wfeHPC2xBhGM4vQqu344dyQdn7TZUpzNFu3baA", - "fee": 0, - "challenger_owner": "13uJVUm1U2iFZHhmFNp4E6L6v9rkjoABicw1SFC424rqadj7Qg5", - "challenger_loc": "8c48eba0b2d11ff", - "challenger": "112fpjqDuU3MequG617EuQ3xhtdecz6ah2WxJK87XqfHL5jnSdvc" - } - ] -} -``` - - - - ---- - -## Block at Hash - -``` -GET https://api.helium.io/v1/blocks/hash/:hash -``` - -Get block descriptor for the given block hash. - - - - -_Path Parameters_ - -| param | Type | Note | -| --------------- | -------- | --------------------------------- | -| hash (required) | _string_ | Block hash for the block to fetch | - - - - -200: OK - -```json -{ - "data": { - "transaction_count": 37, - "time": 1582192928, - "snapshot_hash": "", - "prev_hash": "Xj6vrBi_IcP0vqHHawf0FFWkG1qn18I9thQKOEhblXg", - "height": 213787, - "hash": "o5o8cBL1Zvp1KmA1d8vYJ38wXXWVxf1HW2e1uZxVJYg" - } -} -``` - - - - ---- - -## Block at Hash Transactions - -``` -GET https://api.helium.io/v1/blocks/hash/:hash/transactions -``` - -Get transactions for a block at a given block hash. The list of returned -transactions is paged. A `cursor` field is present if more results are -available. - - - - -_Path Parameters_ - -| param | Type | Note | -| --------------- | -------- | --------------------------------- | -| hash (required) | _string_ | Block hash for the block to fetch | - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ---------------------------- | -| cursor (optional) | _string_ | Cursor for the page to fetch | - - - - -200: OK - -```json -{ - "data": [ - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEUCIEtI0JUGWFDZxdZ-MqaamBibe9XA7Hu7KtppFxER2_VlAiEAjmdtV8WcdyTVOMF1wLSiRXtsim2cEndKnnhavPAj7ms", - "secret_hash": "PDp3wlQDWQHOv3_cYO3iXSGO5lQPY-nk0nGZ-aCWj6U", - "owner": "13RU6fRkU1uGviyWJzgSVJAiVDhyf97dqBDMTmVjHEAuBy5LN1F", - "onion_key_hash": "T9wxjep44KOQrgw7L7nTBUlTp87BL1lvyCievMmxSHo", - "location": "8c2a30650aad7ff", - "lng": -71.1952338305713, - "lat": 42.34690845297784, - "height": 213787, - "hash": "0XQR1wmeqRYF8BeIPLtqr7ZZQHLWAg7CavmKPrSxF8w", - "fee": 0, - "challenger": "11mxTwhQVMS9o5GqaQ3MW9NbJeQM8x89e52YG3Em4turgAHPSgs", - "block_hash": "XcQXEO8eeJeCQ1V6hcCBMH06a1pOZXxrUBp-2NhM8Yg" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEUCIQCUJskKawMwc9G3Uv_ZRYrhSrHo4QoNuZT4amHVS3rkmQIgJ_RZ-9z3v9T5JNwnAtDTynwJpqO1cQ3KHPBeFGxRBQY", - "secret_hash": "B7scyTy8h6nsXymcrXPaCt0MShUGki2fvPx7lsmRkXc", - "owner": "13Wjb3U16ct477Qixg45nWEtRh4Jg2qTp2iuqgD2Adk8gQmF8Bo", - "onion_key_hash": "1xip4moxB5lx8UO5Dwo35ppMfJi_ASSgxsYaLPaHLRU", - "location": "8c44c13164947ff", - "lng": -84.23063101246672, - "lat": 33.85883850690923, - "height": 213787, - "hash": "6J8ZsZjDF2tiStMOVjtEG9jaKnpLZfAwY4jXx9bX1y4", - "fee": 0, - "challenger": "1181v5Saf87iUexQ8WtqA6xLrzbuF2UaS6dGY8R8p4yqoK1ZjMA", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEQCIEEk2H6NFe9CY7ZtoPPr-9cyBDuDCTvrOOzKpPW7ldIAAiAfGXSl2cgqtVzN8um0PyCTr_dD8_Gmp2CwL8SEkuv1Ew", - "secret_hash": "zCA4W7sUqVu6Gzpz-5TUbzxTTv8SbY0B74VCIp46Hys", - "owner": "14MRMNbNQidNFTszjoYugvMPxQLqLoZyPADSwJKvvnzgd8UX2UZ", - "onion_key_hash": "PyGkman-6k81fdcQn9_DS9dJLRo9r4P9ijpRxPnM4-E", - "location": "8c2663d04684bff", - "lng": -88.31876752603684, - "lat": 40.10013118277986, - "height": 213787, - "hash": "_aOH3TaNbUXB-aETIk7bsUyH6p9HOWDfx3P5wXBxnQQ", - "fee": 0, - "challenger": "11K6YeKEqfwMJu2wy64YHdQhXT8Hy5aMA4SxFdvCR4zwQyF17Xo", - "block_hash": "znLXFN1OaN6aosWTZRmpZ2SIu0wiT4LKG3VkDpf8oqA" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEUCIGCf9Mxj5P9aeuIwbhMrGkhVORX9ymsditZ8jwgrRGoTAiEAmv6oeps953HnAGjtW6b7yu6gKiGYDXneMJxOPPX5cN4", - "secret_hash": "otNY8AVs8_JsIay-CA5XXAiKInVEx00lwXnLBIAfWKo", - "owner": "135qJwSQD2eFBsDjcDWKRgJucKRocVLvxrunc1W9KhcJe9CAp4G", - "onion_key_hash": "lEEBV1DODq5iFKYq4h6mmb-Oba-6dcYfQ3cMUjFhxHc", - "location": "8c2a107a90b09ff", - "lng": -74.21400962950572, - "lat": 40.68133174681411, - "height": 213787, - "hash": "AqLEUGRylc9kfW_tyLMwTJPunVXmlqh5ZrzYVUWxBIE", - "fee": 0, - "challenger": "11cpn65Uuugxs9YAAvYc1i7J9xgWY2pjSj4Y2FFvaFypa8bccLq", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEUCIGPQZRXlxMMJXAiOyYAja70dC6HihyvXNoDRTno3Rw7gAiEAsKS_4qaQ0zLf42sW1SaLnqfb1mUquwFpHbU0-lo21yo", - "secret_hash": "CZjCoW6RU6TejMQjhgePVXPc759u5yp04Y9z5ye5C28", - "owner": "14gaNAfNSL8pPAVjTyy8LhRjVgw9t8JunooEmCSyXLAX9A3pfMF", - "onion_key_hash": "mWsd00ByHhfa_2J-CpphhbhSIiqg58_tMiYkoOBEU6Y", - "location": "8c2a340910313ff", - "lng": -70.2707016518933, - "lat": 43.655908895594315, - "height": 213787, - "hash": "bdkRW7Dxx-ESPSz7i_vxk-jXIqUfmFL9pZUWYmJOwYU", - "fee": 0, - "challenger": "112u5QmxT5LVrD9vdtT1hJ7bBEdqthhbbefTaNK1JCS5n4xbKRoo", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEQCIDDdF3MhXzgLzVRHi6-x55ASjv9BtbIneBMyGekAThY0AiApKRRfmZRVYt-7Bx_le9uaUmmWYkWPv1IXDXRgCGR1Ww", - "secret_hash": "Upa8MV8OvHZBddL-GLAyeNTJ7P80vTAxYFsTI25AnOk", - "owner": "139fiM2t9SGU8yB1QG5GxRy9qztpcnjr1F5u7Paop9Lsh7G31sn", - "onion_key_hash": "F2lzKJQyFet4zkgVaqR9FeO1i6SqICpaN5P1RfbM07E", - "location": "8c44d9975282bff", - "lng": -82.72848196624813, - "lat": 35.533213738889785, - "height": 213787, - "hash": "c-6u-jO4YX0dgxXSUMK7HKxdPUmxbxwXCbHblKDbHjQ", - "fee": 0, - "challenger": "112oBX3SKsRdxXD97dNVL8k5ejnS6bYiKxjWeRS2yuj8gCkgLUb1", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEQCIEQkbbVN05yp4ynRKCdnXbPBOADm645fVXXg3wQ5EGgJAiAqO__gcfiLdmPqtofKvf1XAnXL6oyTe2f6YSIkatGfMg", - "secret_hash": "0RusqDuS5D1l6VxHHqOfYKN3_dRzS9glMuv9XhlHJOc", - "owner": "14FrS6JfobouRDVf7FbYuvvR5uNzB688qESpQNXLoaCqd1zDN7P", - "onion_key_hash": "VQuQlV7KfjAK2xT0CqP6a-qt_sZHBD5AQKeHOiSRMeE", - "location": "8c2a122dbb893ff", - "lng": -75.27858120362838, - "lat": 40.236503579574276, - "height": 213787, - "hash": "CGjUzaSOqukYqnJK2zYd0YuvGea0MrNdlRCubhEPbag", - "fee": 0, - "challenger": "112a5Mzuhw4h9Er29yGhsYLi9FePQmzmgyKXZW53to8uXHzZYSS3", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEYCIQC0VJsxXtXeYR_NAOtoFz3C-tbOam3sQFKMAyufH0RdGgIhAKK0BBiCJYOOpDVikt1jbxMUscVz9q3gRTrw9ga1NNJ0", - "secret_hash": "30jwhK8zdNvluN4ikCymnWo3GBwYfyWk1fALTBFYcHU", - "owner": "13T8w9Y88SEqbuzRkDq49xHKfX57cJbbv5y1fTqMU79Wu1q1o5j", - "onion_key_hash": "1oYPe7schX1Ph2ZpP4zGGOviXfBLoZlF_WK3usuelac", - "location": "8c2a10564c437ff", - "lng": -74.03002342945634, - "lat": 41.04224197668894, - "height": 213787, - "hash": "E80uoOjygu6SbUqsnEu-lCXKjbzZW9WiHSrKx033-MI", - "fee": 0, - "challenger": "114PsNUa1rMT9Q2PpeAqs9RpJXjMgb5BNT5Azi9CaVQ6daijLRo", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEQCIBYBRSno33FSUpXXZnMy51MK9ciU_MO__wWl9nk7UlLqAiA1OU26vJxQp8irF6NpdqPLynpTMBdTxSgEiAYTcr-0UA", - "secret_hash": "G7PfwPRmL5NFwtVNhAA3y9F0-6_tfKLeV7Vq6fLUOEY", - "owner": "14RhEs3bVE9WYryYjdBG3LksJVhd9Wp5fxPLRQeHebTrPKReeyE", - "onion_key_hash": "miByk1ioQpmSoSlLmk5pSlhnoQHdK-GXZGsiNJQSvxc", - "location": "8c2836156622bff", - "lng": -121.02718668572189, - "lat": 37.65368378785006, - "height": 213787, - "hash": "eLaP-eUAJbJJIQSIkb3u5wD-eQMjJ_qeI-zF8YWa-7o", - "fee": 0, - "challenger": "11F2cGbEYfB6qvmNLE7tXWnkgqLfWPvHpxsgyghNRidusGDKD41", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "version": 2, - "type": "poc_request_v1", - "time": 1582192928, - "signature": "MEQCIBDls8CH7DspVWl0IC77XLzzt7wHygTukGlibTygCP3QAiAl9fR9dNgLgaSIkl4cqBrSqjtbtu_Eg1UeMjRqmi9mog", - "secret_hash": "SR-livfqQa58lN3WX5a9jIBUW63DFOUUAgCC27WRu6I", - "owner": "13BPvTrw32jdsBPJYnL7whYghwLboCqipTaJbhSEaaZVzgmEemm", - "onion_key_hash": "R9GPq3ssxi6LW_iuj-7KqSwKSmZ_in7EdJEGWcVrWbs", - "location": "8c489e3534f45ff", - "lng": -97.68010436306147, - "lat": 30.30448054652587, - "height": 213787, - "hash": "eMNvkAotMP4e3xAfN1gh5oc5CTXnIhf2sIxijE3oZXA", - "fee": 0, - "challenger": "117r6sxGnFD3n5GnMTqSfhLxYqoXcDvFpzjNkweD8ZhPr9YQLRU", - "block_hash": "aCrKSvuKX1dAkUURkvaCRT1C0Z-WD5m6q4TgWr7gx5Y" - }, - { - "type": "poc_receipts_v1", - "time": 1582192928, - "signature": "MEQCIGVhWn3s3_2HYQzGNFi2GmV3xsr8Nm2EemoHNyqPNb33AiAPOfTXQKEo6Ol1H6JnlNTihUDpK5qtVRM6JSEDaVNvYA", - "secret": "AJswL6q6bm7bGIwk3jzzyH0kDGSJHb14ZnI2GgVApo8uBC3mU933j0w0_5rF3ejIZdLSusOmCZdzhoag7RtADi6OGXHHEdRNfTIDYR_41sddC0mqPE8A3NXXo2mzpqqkgo4", - "path": [ - { - "witnesses": [], - "receipt": { - "timestamp": 1582192367974227200, - "signature": "MEUCIDD9BLjC_ghbIe7zhKQtDrhrlLD1BJgI_95ryQ6CFyyOAiEA1BZj_-faF_d7PFela0-EC6meWh3Wbe749I73Ta5gnyM", - "signal": 0, - "origin": "p2p", - "gateway": "112oQLEtxFFw4NrPZ7d1DFM1iScCunu5xvea99kVVTorNo16cBKg", - "data": "NJA" - }, - "challengee": "112oQLEtxFFw4NrPZ7d1DFM1iScCunu5xvea99kVVTorNo16cBKg" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "112SVQqroQvvq2rQHKWYfxP2eRb91NLXU8qduBCLt1B1DmLK6Xj" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "112CGr8XwCuHtD4CmewgCWfz6ttQaRLK5Up8cjoUng37zpLN5kbi" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "11DpearQqzUSCy4Mdho5CN4LSqZffhHkAwkeRieeAvELnpQzfUP" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "11DRokFJ3U9UkDU4BFN2djb6fH7wAwLr2ysXPJsbhDoUoyGFvuV" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "112DWqhAqCd5ie5sbSxXBG7o3mrGZgPSdhEYumbvxSNA4G5ZSxNe" - }, - { - "witnesses": [], - "receipt": null, - "challengee": "1125H31qsBackYPLiYQQYHvxi6bRxzcfjRK5aJv1gA2ZwKb7WYL7" - } - ], - "onion_key_hash": "qDnv0zJGjHUvgZTmGyJspRiPZvktTqQ-enBE43xrceg", - "height": 213787, - "hash": "GJMR4wfeHPC2xBhGM4vQqu344dyQdn7TZUpzNFu3baA", - "fee": 0, - "challenger_owner": "13uJVUm1U2iFZHhmFNp4E6L6v9rkjoABicw1SFC424rqadj7Qg5", - "challenger_loc": "8c48eba0b2d11ff", - "challenger": "112fpjqDuU3MequG617EuQ3xhtdecz6ah2WxJK87XqfHL5jnSdvc" - } - ] -} -``` - - - diff --git a/docs/api/blockchain/chain-variables.mdx b/docs/api/blockchain/chain-variables.mdx deleted file mode 100644 index 341e44afa..000000000 --- a/docs/api/blockchain/chain-variables.mdx +++ /dev/null @@ -1,269 +0,0 @@ ---- -id: chain-variables -sidebar_label: Chain Variables -slug: /api/blockchain/chain-variables ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Chain Variables - ---- - -## Get Chain Variables - -``` -GET https://api.helium.io/v1/vars -``` - -Gets the current set of chain variables - - - - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -```json -{ - "data": { - "allow_zero_amount": false, - "alpha_decay": 0.0035, - "batch_size": 400, - "beta_decay": 0.002, - "block_time": 60000, - "block_version": "v1", - "chain_vars_version": 2, - "consensus_percent": 0.1, - "dc_payload_size": 24, - "dc_percent": 0, - "dkg_curve": "SS512", - "election_bba_penalty": 0.001, - "election_cluster_res": 4, - "election_interval": 30, - "election_removal_pct": 40, - "election_replacement_factor": 4, - "election_replacement_slope": 20, - "election_restart_interval": 5, - "election_seen_penalty": 0.0033333, - "election_selection_pct": 1, - "election_version": 3, - "h3_exclusion_ring_dist": 6, - "h3_max_grid_distance": 120, - "h3_neighbor_res": 12, - "max_open_sc": 2, - "max_payments": 50, - "max_staleness": 100000, - "max_subnet_num": 5, - "max_subnet_size": 65536, - "max_xor_filter_num": 5, - "max_xor_filter_size": 102400, - "min_assert_h3_res": 12, - "min_expire_within": 15, - "min_score": 0.15, - "min_subnet_size": 8, - "monthly_reward": 500000000000000, - "num_consensus_members": 16, - "poc_centrality_wt": 0.5, - "poc_challenge_interval": 60, - "poc_challenge_sync_interval": 90, - "poc_challengees_percent": 0.35, - "poc_challengers_percent": 0.15, - "poc_good_bucket_high": -70, - "poc_good_bucket_low": -130, - "poc_max_hop_cells": 2000, - "poc_path_limit": 7, - "poc_target_hex_parent_res": 5, - "poc_typo_fixes": true, - "poc_v4_exclusion_cells": 8, - "poc_v4_parent_res": 11, - "poc_v4_prob_bad_rssi": 0.01, - "poc_v4_prob_count_wt": 0.0, - "poc_v4_prob_good_rssi": 1.0, - "poc_v4_prob_no_rssi": 0.5, - "poc_v4_prob_rssi_wt": 0.0, - "poc_v4_prob_time_wt": 0.0, - "poc_v4_randomness_wt": 0.5, - "poc_v4_target_challenge_age": 300, - "poc_v4_target_exclusion_cells": 6000, - "poc_v4_target_prob_edge_wt": 0.0, - "poc_v4_target_prob_score_wt": 0.0, - "poc_v4_target_score_curve": 5, - "poc_v5_target_prob_randomness_wt": 1.0, - "poc_version": 8, - "poc_witnesses_percent": 0.05, - "predicate_callback_fun": "version", - "predicate_callback_mod": "miner", - "predicate_threshold": 0.95, - "price_oracle_height_delta": 10, - "price_oracle_price_scan_delay": 3600, - "price_oracle_price_scan_max": 90000, - "price_oracle_public_keys": [ - "13Btezbvbwr9LhKmDQLgBnJUgjhZighEjNPLeu79dqBbmXRwoWm", - "13CFFcmPtMvNQCpWQRXCTqXPnXtcsibDWVwiQRKpUCt4nqtF7RE", - "1431WVQvoV7RAJpoLCaBrTKner1Soed4bk69DddcrHUTCWHV6pj", - "136n9BEbreGUNgXJWtyzkBQcXiNzdMQ5GBoP8L2J6ZReFUAwUjy", - "14sqAYg1qxzjKTtyHLYZdH6yDtA3KgyoARhWN1cvLZ94dZw5vEc", - "145J6Aye86pKTJrUHREiXu7qqppZBcWY1bvWo8id7ZjxyuainYj", - "13dUGHis1PdrSwxdseoyZKzQhc8WuWcueAWdT95sDVGDNhGRWV9", - "14EzXp4i1xYA7SNyim6R4J5aXN1yHYKNiPrrJ2WEvoDnxmLgaCg", - "147yRbowD1krUCC1DhhSMhpFEqnkwb26mHBow5nk9q43AakSHNA" - ], - "price_oracle_refresh_interval": 10, - "reward_version": 2, - "sc_grace_blocks": 100, - "securities_percent": 0.35, - "snapshot_interval": 720, - "snapshot_version": 1, - "var_gw_inactivity_threshold": 600, - "vars_commit_delay": 1, - "witness_refresh_interval": 10080, - "witness_refresh_rand_n": 1000 - } -} -``` - - - - ---- - -## Get the value of a chain variable - -``` -GET https://api.helium.io/v1/vars/:name -``` - -Gets the value of the chain variable with the given name - - - - -_Path Parameters_ - -| param | Type | Note | -| --------------- | -------- | ---------------------------- | -| name (optional) | _string_ | The name of a chain variable | - - - - -200: OK - -This fetched the `block_time` chain variable - -```json -{ - "data": 60000 -} -``` - - - - ---- - -## List chain variable activity - -``` -GET https://api.helium.io/v1/vars/activity -``` - -Lists all chain variable transaction activity. This route is paged using a -cursor. - - - - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | --------------------------------- | -| cursor (optional) | _string_ | Cursor for the next page to fetch | - - - - -200: OK - -```json -{ - "data": [ - { - "cancels": [], - "hash": "FXLaw6csD1q_sRU9oyk6Vz6p47vBIhVPhSDcIEGXPiQ", - "height": 365778, - "key_proof": "", - "master_key": null, - "nonce": 28, - "proof": "MEUCIF255lwe5je1GMM5OdWAbc86sZ5xaU3-75VSjILrVZ0GAiEAjpFTh7bSvrZV4fC2vnFN7KKG3bsBUhdBDe6JRUJ-AyM", - "time": 1591646992, - "type": "vars_v1", - "unsets": [], - "vars": { - "price_oracle_height_delta": 10, - "price_oracle_price_scan_delay": 3600, - "price_oracle_price_scan_max": 90000, - "price_oracle_public_keys": "IQEgHuJGDwcAoZZsw1rNcZIpbsIrVqihXfFEKX2g5YLNjCEBIO1OyYQtE8A+UdHQnGfgiTPBoA9g7qAq665jgMcUmt4hAY+mQWlLOM6dVi7hrugbt5H4Mo3SkJv+UOHwpKTVDJJkIQEUgzPrDa98YpqHWsRTDnbfvd2atT5pt4d5aWUzo3fOhCEB/oFGezNl0OBjrD5+/DuCVF3n1vjPi1SeeOgGCHnzGc0hAZTW/LUBIchFlJIiHRZbbBASIS0A0mT907FOUnF6lS/wIQFaM7GI+z26SkZoPG510rm0As7zf9ZlGLS+o50txhXIwiEBqtvQSZyN25QHlP3RQjDaW0fo9Mb97CjJWnA97JxF620hAZrrw1ilYRXLAaFgR+zBvDK51g8OVj31g24WlggwrmhC", - "price_oracle_refresh_interval": 10 - }, - "version_predicate": 0 - }, - { - "cancels": [], - "hash": "J-c9UpTKIXtnDtLOJihaI7F99nrXa1IDbymVVgsugvM", - "height": 352052, - "key_proof": "", - "master_key": "1Wh4bh", - "nonce": 27, - "proof": "MEQCIEkPl2ekYjQRvNwp3CQ9wnu3nHvuiDHCs4bNkK7kntyUAiB_0fspgA60E6TNViasYBuTcla06__jpxFGMpsWPnJ3xA", - "time": 1590705257, - "type": "vars_v1", - "unsets": [], - "vars": { - "snapshot_interval": 720, - "snapshot_version": 1 - }, - "version_predicate": 0 - }, - { - "cancels": [], - "hash": "UI2IoTs4eXA68wKyL8059alByHjszUU3GMgj7Ef9Uc4", - "height": 339406, - "key_proof": "", - "master_key": "1Wh4bh", - "nonce": 26, - "proof": "MEUCIHhP-ADAk1dpz4NB1_RaHapWCBTMxRR8m0Fg4_Pq9ea-AiEAqgnPEc09kclYyv7LO3NT93fb-KbjgK4YOIQYiUm_ero", - "time": 1589921323, - "type": "vars_v1", - "unsets": [], - "vars": { - "witness_refresh_interval": 10080, - "witness_refresh_rand_n": 1000 - }, - "version_predicate": 0 - } - ] -} -``` - - - diff --git a/docs/api/blockchain/challenges.mdx b/docs/api/blockchain/challenges.mdx deleted file mode 100644 index 4d44b7850..000000000 --- a/docs/api/blockchain/challenges.mdx +++ /dev/null @@ -1,799 +0,0 @@ ---- -id: challenges -sidebar_label: Challenges -slug: /api/blockchain/challenges ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Challenges - ---- - -## List Challenge receipts - -Lists the completed challenges by listing challenge receipts. - -``` -GET https://api.helium.io/v1/challenges -``` - -Use this API to list `challenge_receipts` transactions. - -This route is `cursor` paginated. - - - - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| cursor (optional) | _string_ | Cursor for page to fetch | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -Return a page of `challenge_receipts` transactions. - -```json -{ - "data": [ - { - "type": "poc_receipts_v1", - "time": 1628766652, - "secret": "AApadxK7urPuQkpYdQJpZXdiLsjlCgabJadeKGdw5EuABLb3rMNPi91rObf6J98uhcuB0-nkw8Blhaet8AYXJCnOJsv__Ao0ZjrS7yZo8oMtDCUSmAK1Il4VLxZbt0c0Y7Q", - "request_block_hash": "jZRwpQwVG304mI1NVadWM-anjWAYIZObuKm5ohjQbFc", - "path": [ - { - "witnesses": [ - { - "timestamp": 1628765223607395784, - "snr": 0.800000011920929, - "signal": -100, - "packet_hash": "N3OeevT-F5AMO5zr_vP136WHLu8YtHdrPUEbJCebKH0", - "owner": "131nTdBwd37hakns58Rz8gLaJcENZK6eBhazDRBt2i2RPfcni8Y", - "location_hex": "88268c62b7fffff", - "location": "8c268c62b75d5ff", - "is_valid": true, - "gateway": "114qCeyTcnArowArUuLfYZszKrV37f4WNd1gFNCQciajPJgTcQW", - "frequency": 904.7000122070312, - "datarate": "SF9BW125", - "channel": 4 - } - ], - "receipt": { - "timestamp": 1628765222187225510, - "snr": 0.0, - "signal": 0, - "origin": "p2p", - "gateway": "11BCGPgrFa2SxFMWfnv7S644uXX7jZTGmWVp3c2yhMh46G6pEbW", - "frequency": 0.0, - "datarate": null, - "data": "REc", - "channel": 0 - }, - "geocode": { - "short_street": "Longleaf Ln", - "short_state": "CO", - "short_country": "US", - "short_city": "Colorado Springs", - "long_street": "Longleaf Lane", - "long_state": "Colorado", - "long_country": "United States", - "long_city": "Colorado Springs", - "city_id": "Y29sb3JhZG8gc3ByaW5nc2NvbG9yYWRvdW5pdGVkIHN0YXRlcw" - }, - "challengee_owner": "12xw96UQoj64Y9JfsAy4A7BRY7fENSqoCH3a1ZVsMu8aWRN8PMs", - "challengee_lon": -104.66983411327342, - "challengee_location_hex": "88268c75a5fffff", - "challengee_location": "8c268c75a50bdff", - "challengee_lat": 38.92707131307015, - "challengee": "11BCGPgrFa2SxFMWfnv7S644uXX7jZTGmWVp3c2yhMh46G6pEbW" - } - ], - "onion_key_hash": "Sku6Zj2HUzYxqqI3tMDQdzY2as8UTWctrxknoeg0Bvw", - "height": 961893, - "hash": "0nodpQ_evdXuQAsL-Eif4X4KxDTGCa76IbwhRb0Z_zQ", - "fee": 0, - "challenger_owner": "13bCghX9hckaPobC1w2oAZpA9BWyzGh9t9rVjhMuQoyGLqUjhSf", - "challenger_lon": -117.24707207796978, - "challenger_location": "8c29a4024c93dff", - "challenger_lat": 32.73954536951243, - "challenger": "11e3ZHFacF2TPi99GNwoeYMfQGBiTTm8NwQrF5En9JKTCQUsSQf" - }, - { - "type": "poc_receipts_v1", - "time": 1628766652, - "secret": "APujuImlTzLP3srv7XhVYfarHKUcnH1L7Zj0cvrmud4IBJPYUACx4c78NS6peagnyJqKWPvofp1boQ1ESEL_kO1kAkBdL3_nn5dDj57fTgNDNzq_BRDz3GRA6pAyyZ99uPs", - "request_block_hash": "obWCHMdiQ5mCScRUgFsaVd2Kp_RDFhythHnrCoDj2DI", - "path": [ - { - "witnesses": [ - { - "timestamp": 1628765187186362850, - "snr": -9.800000190734863, - "signal": -109, - "packet_hash": "ZtfDcbFjuzTPB7UmE6a8ayZ5YU5tbKty2kNKGy_GB2I", - "owner": "148sAphN7RmmiGEYXz1dghgZTLz8kUphBrToPUgWQqNZXWuHbJE", - "location_hex": "882664c105fffff", - "location": "8c2664c10574bff", - "is_valid": true, - "gateway": "112UHF9Z6qJWsEt7L36KfXNhvTgBphVSg8V2pNqm2cFyzVtSPpHU", - "frequency": 905.0999755859375, - "datarate": "SF9BW125", - "channel": 6 - }, - { - "timestamp": 1628765187112725519, - "snr": 11.800000190734863, - "signal": -80, - "packet_hash": "ZtfDcbFjuzTPB7UmE6a8ayZ5YU5tbKty2kNKGy_GB2I", - "owner": "14pKXXAwovWrRMDjA2AdFShuvsuynWD1JCbDmghatgDBNkubjVE", - "location_hex": "882664c10dfffff", - "location": "8c2664c10d407ff", - "is_valid": false, - "invalid_reason": "witness_rssi_too_high", - "gateway": "11CNgnba2o9sX4YS5amixVWZFeh5hFXCky7RdCNrMQq6aqTvmdy", - "frequency": 905.0999755859375, - "datarate": "SF9BW125", - "channel": 6 - }, - { - "timestamp": 1628765187209047724, - "snr": -10.199999809265137, - "signal": -109, - "packet_hash": "ZtfDcbFjuzTPB7UmE6a8ayZ5YU5tbKty2kNKGy_GB2I", - "owner": "135g73WigjfXyBMC6pLjot7k5m9Yb5YaGgnDkEj5XwmKmFr3HUQ", - "location_hex": "882664c105fffff", - "location": "8c2664c104803ff", - "is_valid": true, - "gateway": "11Dz8tiM5oXQn1j8qCCK5AaMv9sZnpSmFE2EiCXpkCKzfXGHKvN", - "frequency": 905.0999755859375, - "datarate": "SF9BW125", - "channel": 6 - }, - { - "timestamp": 1628765187099934674, - "snr": 1.0, - "signal": -98, - "packet_hash": "ZtfDcbFjuzTPB7UmE6a8ayZ5YU5tbKty2kNKGy_GB2I", - "owner": "13n3RYHSxNumACZYmw8XhYD5LJogfiFy9mRRKZUw8AQQTZYvdst", - "location_hex": "882664c10dfffff", - "location": "8c2664c10c5cbff", - "is_valid": true, - "gateway": "11295CxJw7JUBy8q92k2F82aD6XxL17218NyFTxNDm7R3wi3cEyd", - "frequency": 905.0999755859375, - "datarate": "SF9BW125", - "channel": 6 - }, - { - "timestamp": 1628765187117020109, - "snr": 7.5, - "signal": -81, - "packet_hash": "ZtfDcbFjuzTPB7UmE6a8ayZ5YU5tbKty2kNKGy_GB2I", - "owner": "13JYSCay4pT2DkmsGt4oWVwQfTNjtPJajs91v7hkHDG45oMMKRM", - "location_hex": "882664c109fffff", - "location": "8c2664c108a85ff", - "is_valid": false, - "invalid_reason": "witness_rssi_too_high", - "gateway": "1121mC1u6mn33czyd4A27mMdcqqvJQhhx1vDoCnKaJqs5Q9Eupsg", - "frequency": 905.0999755859375, - "datarate": "SF9BW125", - "channel": 6 - }, - { - "timestamp": 1628765207102167357, - "snr": 8.199999809265137, - "signal": -108, - "packet_hash": "ZtfDcbFjuzTPB7UmE6a8ayZ5YU5tbKty2kNKGy_GB2I", - "owner": "14kLYw9fQXSp6J8et8aw7dsjmu2brdrjQ5TEwu89HwzNegGmkbj", - "location_hex": "882664c101fffff", - "location": "8c2664c1010b3ff", - "is_valid": false, - "invalid_reason": "witness_rssi_below_lower_bound", - "gateway": "112MfA2QcNo1tHaFsxhc1bbxPmffc36JLKVJka68rzguNu2jfAmh", - "frequency": 905.0999755859375, - "datarate": "SF9BW125", - "channel": 6 - } - ], - "receipt": { - "timestamp": 1628765185766594926, - "snr": 0.0, - "signal": 0, - "origin": "p2p", - "gateway": "112gNnGnMZYovn9R6EKbZgaEHqwdKrwm6CoFqJgDLY5FG4sZ38fp", - "frequency": 0.0, - "datarate": null, - "data": "5rA", - "channel": 0 - }, - "geocode": { - "short_street": "S Winchester Ave", - "short_state": "IL", - "short_country": "US", - "short_city": "Chicago", - "long_street": "South Winchester Avenue", - "long_state": "Illinois", - "long_country": "United States", - "long_city": "Chicago", - "city_id": "Y2hpY2Fnb2lsbGlub2lzdW5pdGVkIHN0YXRlcw" - }, - "challengee_owner": "14n3ByVSSrc8igKxpSJdu8LVjUSxvWUF6X9yrc6ZCQjAipBRa4U", - "challengee_lon": -87.67331063723876, - "challengee_location_hex": "882664cd57fffff", - "challengee_location": "8c2664cd56407ff", - "challengee_lat": 41.784514472384224, - "challengee": "112gNnGnMZYovn9R6EKbZgaEHqwdKrwm6CoFqJgDLY5FG4sZ38fp" - } - ], - "onion_key_hash": "qoZ-y7gAoRwKwo0lW_10HSIo9hotZNf3CZOPdLyoIcE", - "height": 961893, - "hash": "0Q9A9Q0vpobgwy5zdq5EEgyrtQiiLSnZ9_ZxqdqWksQ", - "fee": 0, - "challenger_owner": "13YzYnkGxcznStxSNKG2Pe5MZkLeXP8mopPy9MN1oUd2XbaSTUa", - "challenger_lon": -111.9847594152965, - "challenger_location": "8c28949906183ff", - "challenger_lat": 43.492543017975855, - "challenger": "11278Kh8WzAscpaQsBmF51pTzAT7RNeN4wDk7a8BRyZrF9THqX7F" - }, - { - "type": "poc_receipts_v1", - "time": 1628766652, - "secret": "AAmwte2lkWiov_TrMA7PLKQ9LuNh3Yw478fKqChF8r7uBMHWENO0fhfar33R1YiRfI7JebazKjvrGMfDVzETfTelaBRGKbmqAd7tVZkrAJoNwJPcaXiplcU_R4MByfHU0GE", - "request_block_hash": "FQxvgsvlhiRjgPtaJJ60AD_jpG7DgpJ3VeB31f_LTdw", - "path": [ - { - "witnesses": [ - { - "timestamp": 1628765424434700163, - "snr": -3.799999952316284, - "signal": -116, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "13bJN6gEQnVbNXDgUg3LLK5xPMnZK5kG45e7rBzn5WzDNrE9pZM", - "location_hex": "881909ad1bfffff", - "location": "8c1909ad1a61dff", - "is_valid": true, - "gateway": "112AF5d88x362M5fHEuCHFBqLjTAjNWN4ZY3hPFvH4ixdruzyPWv", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424456363563, - "snr": -20.0, - "signal": -115, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "13GwYiac5cNKkaNWUYNL5dG4b1cZ57SDqzPEyGEFQFBGYYgNCTY", - "location_hex": "881909aea5fffff", - "location": "8c1909aea4acdff", - "is_valid": true, - "gateway": "112WZVsJefKDrxkyZZdEb7nHqxgmZ3JdcHc51AnDCCb6Bcopd8vW", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424417539370, - "snr": -7.0, - "signal": -105, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "13hNAZxPodK8JWoYH9b7YKYgZoYYtp9hhcMuL5FyjngL1cZUUmt", - "location_hex": "881909ad5dfffff", - "location": "8c1909ad5c081ff", - "is_valid": true, - "gateway": "11GgeeHUpTeFoBrrrWNgotfRubrhWJuEc3rXcHeA2ULB71co2dt", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424470630068, - "snr": -13.0, - "signal": -117, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "13si5DzphSC6RsJuPDUi1AY9NLU6s5dRwX1pGFeVLdoQdKQPHaU", - "location_hex": "881909ac45fffff", - "location": "8c1909ac44501ff", - "is_valid": true, - "gateway": "11cdE5h5EJgXZpMT8HgEtPEX2PoTiBwWFopxTs6MXA7fCEyW8HM", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424425927288, - "snr": -17.0, - "signal": -114, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "13JEP2fzypyNMW2kgVtWkkZQsTDbnHiDoCy8ACAAnwo1vDueiPn", - "location_hex": "881909aea9fffff", - "location": "8c1909aea98c5ff", - "is_valid": true, - "gateway": "112vz6xRKSmfGqZt49SKSigAj64ZtYrm4zMUyyPBPanF75Z96rQ8", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765423422215002, - "snr": -7.5, - "signal": -117, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14N7G2W1w7pgrkxzQSsWBMZTCdqNdXgBT22BZjHEdM6S2ww6S6i", - "location_hex": "881909ad13fffff", - "location": "8c1909ade9349ff", - "is_valid": true, - "gateway": "117xqdDJKLLpPAsCfKiULx37ggyTz9qhXWhjn9j8BpgvMrgAdDz", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424427535122, - "snr": -2.799999952316284, - "signal": -113, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "13JEP2fzypyNMW2kgVtWkkZQsTDbnHiDoCy8ACAAnwo1vDueiPn", - "location_hex": "881909aea5fffff", - "location": "8c1909aea566dff", - "is_valid": true, - "gateway": "118aUZDdvpvvoim121C6qNHdr7t2gFzsnz9CZZUzBAadgK5aRSN", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424421008850, - "snr": -16.0, - "signal": -97, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "12yC6CV8cSRo7FX8McmPhYkGqKKkTdDixqSvqK7vnEnZukG4cUy", - "location_hex": "881909ac59fffff", - "location": "8c1909ac586d7ff", - "is_valid": true, - "gateway": "112RSzqabSL2BhFmd1FCphtfuwha2773wqaEDziRxxXbHCENpJkk", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765423265495335, - "snr": -9.5, - "signal": -120, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14KPWXbMm7sB18R3M88uVehqjDyDKVLEwBP9aqiJG5YtX1KMRUv", - "location_hex": "881909ac05fffff", - "location": "8c1909ac05845ff", - "is_valid": true, - "gateway": "11g6ffv4356XMovkVKzmtdaBHVhf3XFN6jdQa6DAve1Dgtncv2A", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765423265381877, - "snr": -19.0, - "signal": -120, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14tL7QvkLn58FGdkR6wUqYMPwGGEdDgSPFfRaQYwEwP8aQDLqEt", - "location_hex": "881909ac47fffff", - "location": "8c1909ac47741ff", - "is_valid": true, - "gateway": "112eo5VuyZX8bYVwVUmHLZmi2ZCXgM7nQ1RsJjra6FGXKZr8QEn", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424440965605, - "snr": 3.0, - "signal": -109, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "13DeeXRMk4v31QhsWDwQcnvJxMBCCEV9PD7sorgakW6mZrruEJW", - "location_hex": "881909af3bfffff", - "location": "8c1909af3a75bff", - "is_valid": true, - "gateway": "112zqWUECYhTiHiutmG2gd3jtPmRPCBLZzjjWsNsJbXBovhKaVR", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424466688229, - "snr": -2.5, - "signal": -115, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14m5kNkmerjBgwzLWEydAnxbp3rEWwUmMCzD5oDMbqDJnTpWgBS", - "location_hex": "881909a887fffff", - "location": "8c1909a886d45ff", - "is_valid": true, - "gateway": "1126JtCB57yF2RWhkJuGP3AoVdk9xW8C2RmNWKjbhbrWK5VfZDYi", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424472367114, - "snr": 6.800000190734863, - "signal": -101, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14GCtE2PYGfsVCTpE2fjVBhYRg79M32NCMerzVrqhNq92gfv1ji", - "location_hex": "881909ac29fffff", - "location": "8c1909ac28a17ff", - "is_valid": true, - "gateway": "1121kTyLMmpvoCZ9UyHbDV58k7rGKk3BGnTDgfdba8WJKuvN6g23", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424430869339, - "snr": -14.0, - "signal": -117, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "13rrHzhFTjshUXpSbgEjv36VbfCheQxLHbEoWP8rvYfruPjzGxB", - "location_hex": "881909ae35fffff", - "location": "8c1909ae34353ff", - "is_valid": true, - "gateway": "11PUAZFdYcfg9Ppibdvrr6nSC3SVzvFmpZEVgpRoo9LyT2wpr3M", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765423436009880, - "snr": -4.199999809265137, - "signal": -117, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "13T3kStiuTYri949cqV2xqpwLnTRvZqrAVXhdymWDQgsHuzdHUV", - "location_hex": "881909ad41fffff", - "location": "8c1909ad43b61ff", - "is_valid": true, - "gateway": "11ngeyAQtbJ8cH5hQzBn3TFLppAVd7PmBzu5XWEKn74PA9YBVPr", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424423702518, - "snr": -3.799999952316284, - "signal": -115, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "13si5DzphSC6RsJuPDUi1AY9NLU6s5dRwX1pGFeVLdoQdKQPHaU", - "location_hex": "881909ac51fffff", - "location": "8c1909ac51159ff", - "is_valid": true, - "gateway": "112nwpawRaXKKKZdccBuMvJkosaC9rjpSJBpQyeUZAXmtzLWLFqL", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424432014748, - "snr": -5.0, - "signal": -115, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14Kw64DJbgw2hNaVy4Yv6jmRgXxEG25zkSncfoFR59WaPMU7Gjn", - "location_hex": "881909af13fffff", - "location": "8c1909af121c3ff", - "is_valid": true, - "gateway": "112GMnq7voQSrWV9D2RAm7f5sDDrzdYgxCUvZEbjKhSExbXjtWyZ", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765423459374418, - "snr": 2.200000047683716, - "signal": -112, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14c58TiKhzq4DHRZkjDCDnWvj2ajG75pJJiKW3rPYs5ddRRrkqD", - "location_hex": "88190932dbfffff", - "location": "8c190932db913ff", - "is_valid": true, - "gateway": "11PmhASYzRTNDMjDm5AYQ2psvbfZZgvb8GBR56emyhR5BmxY4iT", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765423360136460, - "snr": -16.799999237060547, - "signal": -121, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14KPWXbMm7sB18R3M88uVehqjDyDKVLEwBP9aqiJG5YtX1KMRUv", - "location_hex": "881909ac15fffff", - "location": "8c1909ac1403bff", - "is_valid": true, - "gateway": "11FukpK8QpNY2RyMAaiYrESQAZeG5SKhK7ibBoksQQFrj669mrJ", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765423497045419, - "snr": -11.5, - "signal": -119, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14KPWXbMm7sB18R3M88uVehqjDyDKVLEwBP9aqiJG5YtX1KMRUv", - "location_hex": "881909aeabfffff", - "location": "8c1909ae84d85ff", - "is_valid": true, - "gateway": "112mggxyZAGdRgq3MjFt66U7eWBX31nZfd9sz1st1bXPVU6Z1C86", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424457842467, - "snr": -10.199999809265137, - "signal": -113, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "13si5DzphSC6RsJuPDUi1AY9NLU6s5dRwX1pGFeVLdoQdKQPHaU", - "location_hex": "881909ac41fffff", - "location": "8c1909ac41489ff", - "is_valid": true, - "gateway": "112CGLKP5KszpsZ9qwKKNcHdLpxLSDvUL8dbydoPyFTRxiJuKZH8", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424464395913, - "snr": -8.199999809265137, - "signal": -117, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14KPWXbMm7sB18R3M88uVehqjDyDKVLEwBP9aqiJG5YtX1KMRUv", - "location_hex": "881909ae2dfffff", - "location": "8c1909af536d3ff", - "is_valid": true, - "gateway": "112o1NixfLhdpydyDCXz719HS9eCXe34mwvMRGwLqxwNvLVd1CP8", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424412629521, - "snr": -22.799999237060547, - "signal": -115, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14FKrrsac9djE9x4VtLSnHAK8jjtHf24EU5pr4SFhesnxSqYzur", - "location_hex": "881909ac0dfffff", - "location": "8c1909ac0c1d1ff", - "is_valid": true, - "gateway": "11PtrTACfTTeQbprvztGew9CxAtLrUejBXYkf7n6hT86W3BSzmQ", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424423269561, - "snr": -14.5, - "signal": -113, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "134YnuYPdQsDZHmZNoub8o4idFwo2JN5gnQEjyVKmwhBsHYwHGx", - "location_hex": "881909ac55fffff", - "location": "8c1909ac5528bff", - "is_valid": true, - "gateway": "11om3qnHExXjSoEcRnYXHBn3aJgZuet1TZpocy1JszPpjch7oee", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - }, - { - "timestamp": 1628765424449583552, - "snr": -9.800000190734863, - "signal": -117, - "packet_hash": "jt0cfl_M5YlKGqjg4g9OIyXqnhKFAlOcvAD5iT4dkmE", - "owner": "14GCtE2PYGfsVCTpE2fjVBhYRg79M32NCMerzVrqhNq92gfv1ji", - "location_hex": "88190932d9fffff", - "location": "8c190932d9b53ff", - "is_valid": true, - "gateway": "1177nPg3TdTYe792RsjLiSSgcYRE5L8Cau65iSb74gUsx4ZPxAo", - "frequency": 867.9000244140625, - "datarate": "SF12BW125", - "channel": 4 - } - ], - "receipt": { - "timestamp": 1628765420868323704, - "snr": 0.0, - "signal": 0, - "origin": "p2p", - "gateway": "112Xa9YnzeaHTDgvWu4jT7a8X1dbrCA6Z7NdqVgcWWmJZHG347Jz", - "frequency": 0.0, - "datarate": null, - "data": "PDg", - "channel": 0 - }, - "geocode": { - "short_street": "Northinch St", - "short_state": "Scotland", - "short_country": "GB", - "short_city": "Glasgow", - "long_street": "Northinch Street", - "long_state": "Scotland", - "long_country": "United Kingdom", - "long_city": "Glasgow", - "city_id": "Z2xhc2dvd3Njb3RsYW5kdW5pdGVkIGtpbmdkb20" - }, - "challengee_owner": "13bJN6gEQnVbNXDgUg3LLK5xPMnZK5kG45e7rBzn5WzDNrE9pZM", - "challengee_lon": -4.3333950631107445, - "challengee_location_hex": "881909ac67fffff", - "challengee_location": "8c1909ac66a23ff", - "challengee_lat": 55.872184630180406, - "challengee": "112Xa9YnzeaHTDgvWu4jT7a8X1dbrCA6Z7NdqVgcWWmJZHG347Jz" - } - ], - "onion_key_hash": "ERB1iWfyG5vAHu0vtAqz2vQiwNb7G6JJSaKq9yQcsN0", - "height": 961893, - "hash": "1-rYXddPomReuV0G7yECpqk_v_aunoOD2KAQi5Ixq5E", - "fee": 0, - "challenger_owner": "13pn9WuY9QhhwhCFjmFFCtVoLr5r8kN6sAy6wVdn8wU5QhiPnty", - "challenger_lon": -122.28523730760215, - "challenger_location": "8c28342952027ff", - "challenger_lat": 37.48742558269628, - "challenger": "11291vAUs5Q9f5dnbanfchzApMfdip2kWVUTzvp2kFupxoqAYcuw" - }, - { - "type": "poc_receipts_v1", - "time": 1628766652, - "secret": "AKizy8P9tWeBDfpeACwzYFdMUlVOV70cxvX-gdBLGvjDBADcU2TvtOwy-f8ZX7CVSyXdVS0O7EKKRbx4TcGQLdfkAbDHN_W8JKX1U3s3oxtmrRCvWp3VEQpo72R0wpaO4CA", - "request_block_hash": "zGXC4FsK4P8Muwv1m9fIQcdc0Xph2s3sBK387Myhtd4", - "path": [ - { - "witnesses": [ - { - "timestamp": 1628765499799000786, - "snr": -8.800000190734863, - "signal": -107, - "packet_hash": "dnHdNKyGyAgPf_bzWIgXOskvO0KNDRwZdqKuTH2vxJU", - "owner": "14jF6o775mdvRTiqeCfF8pgQ9imgEGiJYfb2wYCDUA3DD9a471f", - "location_hex": "882baa44a1fffff", - "location": "8c2baa44a0143ff", - "is_valid": true, - "gateway": "112Af45B8bCcaQzfTwPvwsEwfKjgd6fpZndC8EwWiGQ8SkpBvqAN", - "frequency": 904.0999755859375, - "datarate": "SF9BW125", - "channel": 1 - }, - { - "timestamp": 1628765498937953663, - "snr": -4.800000190734863, - "signal": -94, - "packet_hash": "dnHdNKyGyAgPf_bzWIgXOskvO0KNDRwZdqKuTH2vxJU", - "owner": "14qHxW3wwEonzJJrVPZ78BXZujPeHvdn2fo4iZ4YQ2kLUwkZXtm", - "location_hex": "882baa44a1fffff", - "location": "8c2baa44a0a0bff", - "is_valid": true, - "gateway": "11rb9hpfByyD5LhW9KA4jwxyZf63FN19jyfCWK1XBVoArdPd9su", - "frequency": 904.0999755859375, - "datarate": "SF9BW125", - "channel": 1 - }, - { - "timestamp": 1628765499870141984, - "snr": -12.0, - "signal": -95, - "packet_hash": "dnHdNKyGyAgPf_bzWIgXOskvO0KNDRwZdqKuTH2vxJU", - "owner": "14jF6o775mdvRTiqeCfF8pgQ9imgEGiJYfb2wYCDUA3DD9a471f", - "location_hex": "882baa44e7fffff", - "location": "8c2baa44e75ddff", - "is_valid": true, - "gateway": "114FmXhJcRPhCTZpm4xy4pKBXsKpvTMZNV7S8JCZvfgp3rPMHVh", - "frequency": 904.0999755859375, - "datarate": "SF9BW125", - "channel": 1 - }, - { - "timestamp": 1628765498807608576, - "snr": 7.0, - "signal": -90, - "packet_hash": "dnHdNKyGyAgPf_bzWIgXOskvO0KNDRwZdqKuTH2vxJU", - "owner": "12zJi5Eofftpcb3gEvGsXyfm68mwoQor94dPgEmBerzz9gfrNyN", - "location_hex": "882baa44a1fffff", - "location": "8c2baa44a0aedff", - "is_valid": true, - "gateway": "11WAHV6HyRUzw8HY1Xh9zhEsRnKRBGKm8H2Zz4JQ4mmhBEyr8Ea", - "frequency": 904.0999755859375, - "datarate": "SF9BW125", - "channel": 1 - } - ], - "receipt": null, - "geocode": { - "short_street": "Côte-Des-Neiges—Notre-Dame-De-Grâce", - "short_state": "QC", - "short_country": "CA", - "short_city": "Montréal", - "long_street": "Côte-Des-Neiges—Notre-Dame-De-Grâce", - "long_state": "Québec", - "long_country": "Canada", - "long_city": "Montréal", - "city_id": "bW9udHLDqWFscXXDqWJlY2NhbmFkYQ" - }, - "challengee_owner": "14jF6o775mdvRTiqeCfF8pgQ9imgEGiJYfb2wYCDUA3DD9a471f", - "challengee_lon": -73.63483027462887, - "challengee_location_hex": "882baa44a5fffff", - "challengee_location": "8c2baa44a4015ff", - "challengee_lat": 45.46662067582368, - "challengee": "11VhN1wRVc4VkyN7d6mA9TDTV6xRy1sEHYZe79dabg4tHcG8Uxs" - } - ], - "onion_key_hash": "e_GRB3_UvVZa45FUvXntapFYlaWqI3szOfg0Fa4jd3c", - "height": 961893, - "hash": "1Y4ZsEqLdIOrlMWkha3TxQvebvNokFP9rUNIHanj-KM", - "fee": 0, - "challenger_owner": "13hmaYVZNTtPZzs62uunGMVFtYzaDRj2Lo212R46HegiPL9tBp4", - "challenger_lon": 9.159697809385476, - "challenger_location": "8c1f99508a6dbff", - "challenger_lat": 45.36202604804098, - "challenger": "11f6YvG8QZtBWZpTssHeQQE1ZT9hShPeZQagBPQWyzRaXdJtMfM" - }, - { - "type": "poc_receipts_v1", - "time": 1628766652, - "secret": "APnamrTomAaCnggW0-xKqGHB7finwcTE-wRxH8ew85FOBBwwUTNLX3SPw1z0gPZ3Ixr6dyUb02bZLdf6S5DRKKpOF6tTsy4et574-HgzRNCy0qP8pDT0-2WTbygtR1EyNd0", - "request_block_hash": "jZRwpQwVG304mI1NVadWM-anjWAYIZObuKm5ohjQbFc", - "path": [ - { - "witnesses": [], - "receipt": { - "timestamp": 1628765144196635236, - "snr": 0.0, - "signal": 0, - "origin": "p2p", - "gateway": "11g4WN6faxkoAAbnoLtWqGwX3dMBJwMGBDF5Zi9h8ZDXRADRcw9", - "frequency": 0.0, - "datarate": null, - "data": "RSY", - "channel": 0 - }, - "geocode": { - "short_street": "4th St", - "short_state": "IA", - "short_country": "US", - "short_city": "Odebolt", - "long_street": "4th Street", - "long_state": "Iowa", - "long_country": "United States", - "long_city": "Odebolt", - "city_id": "b2RlYm9sdGlvd2F1bml0ZWQgc3RhdGVz" - }, - "challengee_owner": "14F6kntXrbYNiijKSPoYa7s9fkNoyv8vifAHBa133aKQobEhL7E", - "challengee_lon": -95.26063762838024, - "challengee_location_hex": "88260cc71dfffff", - "challengee_location": "8c260cc71c289ff", - "challengee_lat": 42.310328735983994, - "challengee": "11g4WN6faxkoAAbnoLtWqGwX3dMBJwMGBDF5Zi9h8ZDXRADRcw9" - } - ], - "onion_key_hash": "4Bh0b5pO2cdW00u2Jvi5ouNuN791kZ0RgFcPkRloYGk", - "height": 961893, - "hash": "1Yx8GTt15gi3unU2RyAPAhjExFRF2J-gLU9v0e83nBU", - "fee": 0, - "challenger_owner": "14maPdZ1bLHK2fJoEHLaKWfBKBhyYnAEoqkNtuunPSCzD9QFMz3", - "challenger_lon": -3.7750320650586113, - "challenger_location": "8c195ab94a537ff", - "challenger_lat": 51.656877310336775, - "challenger": "112n4p5XRYuJLpHxWZ3p7Zj3dyGrqikGag5cLSdtn1BEfhAMCjoG" - } - ] -} -``` - - - - ---- diff --git a/docs/api/blockchain/cities.mdx b/docs/api/blockchain/cities.mdx deleted file mode 100644 index efa454a4e..000000000 --- a/docs/api/blockchain/cities.mdx +++ /dev/null @@ -1,255 +0,0 @@ ---- -id: cities -sidebar_label: Cities -slug: /api/blockchain/cities ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Cities - -Hotspots are usually clustered in and around cities. The routes in this section -help list all cities with their hotspot counts, or list all hotspots for a -specific city - ---- - -## List Hotspot Cities - -``` -GET https://api.helium.io/v1/cities -``` - -List all known hotspot cities with the total hotspot count for each city. Use a -search parameter to filter the list of cities with the given search termThis -route is paged with a `cursor`. - - - - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ------------------------------------- | -| search (optional) | _string_ | term to limit the list of cities with | -| cursor (optional) | _string_ | Cursor for page to fetch | - - - - -200: OK - -Lists cities including the word houston in their city, state or country. - -```json -{ - "data": [ - { - "city_id": "aG91c3RvbnRleGFzdW5pdGVkIHN0YXRlcw", - "hotspot_count": 52, - "long_city": "Houston", - "long_country": "United States", - "long_state": "Texas", - "short_city": "Houston", - "short_country": "US", - "short_state": "TX" - } - ] -} -``` - - - - ---- - -## City for City ID - -``` -GET https://api.helium.io/v1/cities/:city_id -``` - -Fetch a city for a given city id. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ----------------------- | -| city_id (requires) | _string_ | ID of the city to fetch | - - - - -200: OK - -City for id `dG9yb250b29udGFyaW9jYW5hZGE` - -```json -{ - "data": { - "short_state": "ON", - "short_country": "CA", - "short_city": "Toronto", - "online_count": 1077, - "offline_count": 172, - "long_state": "Ontario", - "long_country": "Canada", - "long_city": "Toronto", - "hotspot_count": 1249, - "city_id": "dG9yb250b29udGFyaW9jYW5hZGE" - } -} -``` - - - - ---- - -## List Hotspots for a City - -``` -GET https://api.helium.io/v1/cities/:city_id/hotspots -``` - -Lists all known hotspots for a given `city_id`. The `city_id` captures the city, -state and country and is included in the city list result.This route is paged -with a cursor. - -The `filter_modes` parameter can be used to filter hotspot by how they were -added to the blockchain. Supported values are `full`, `dataonly`, or `light`. A -comma separated list (no whitespace) can be used to filter for multiple modes. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | --------------------------------------------------- | -| city_id (required) | _string_ | The id for the city are returned by the cities list | - -_Query Parameters_ - -| param | Type | Note | -| ----------------------- | -------- | --------------------------------------- | -| cursor (optional) | _string_ | Cursor for the page of results to fetch | -| filter_modes (optional) | _string_ | Filter hotspot types | - - - - -200: OK - -The list of hotspots for Montrose, New York, which is city_id -`bW9udHJvc2VuZXcgeW9ya3VuaXRlZCBzdGF0ZXM`. - -```json -{ - "data": [ - { - "address": "11C5PW3fe5RmBV7jvdmBJmjH7FjiZ3URAZ5oUj2V9dVsW83a5wU", - "block": 403147, - "block_added": 356922, - "geocode": { - "long_city": "Montrose", - "long_country": "United States", - "long_state": "New York", - "long_street": "Dutch Street", - "short_city": "Montrose", - "short_country": "US", - "short_state": "NY", - "short_street": "Dutch St", - "city_id": "bW9udHJvc2VuZXcgeW9ya3VuaXRlZCBzdGF0ZXM" - }, - "lat": 41.24450048207128, - "lng": -73.93189556758152, - "location": "8c2a10c020007ff", - "name": "delightful-onyx-swan", - "nonce": 1, - "owner": "142dmsAe4qVmNxdZJuQiFmpSnB9p6wBkAX78MVza1yNrF4t5R6e", - "score": 0.25, - "score_update_height": 403138, - "status": { - "gps": "no_fix", - "height": 403025, - "online": "online" - } - }, - { - "address": "112PSCgC7kXWFnKWrczNL6srYKQpg3VdA9iou6FrQW4C1aot5HPc", - "block": 403147, - "block_added": 355849, - "geocode": { - "long_city": "Montrose", - "long_country": "United States", - "long_state": "New York", - "long_street": "Sunset Road", - "short_city": "Montrose", - "short_country": "US", - "short_state": "NY", - "short_street": "Sunset Rd", - "city_id": "bW9udHJvc2VuZXcgeW9ya3VuaXRlZCBzdGF0ZXM" - }, - "lat": 41.24464436633493, - "lng": -73.94293581685558, - "location": "8c2a10c024e1bff", - "name": "wobbly-lipstick-manatee", - "nonce": 1, - "owner": "142dmsAe4qVmNxdZJuQiFmpSnB9p6wBkAX78MVza1yNrF4t5R6e", - "score": 0.25, - "score_update_height": 403097, - "status": { - "gps": "good_fix", - "height": 402961, - "online": "online" - } - }, - { - "address": "112Byc2EoL1yB7zyfC9ve2HayLoFf9WLvJdTDtevMsmkfxu9GAA1", - "block": 403147, - "block_added": 94932, - "geocode": { - "long_city": "Montrose", - "long_country": "United States", - "long_state": "New York", - "long_street": "Sycamore Court", - "short_city": "Montrose", - "short_country": "US", - "short_state": "NY", - "short_street": "Sycamore Ct", - "city_id": "bW9udHJvc2VuZXcgeW9ya3VuaXRlZCBzdGF0ZXM" - }, - "lat": 41.24524348318981, - "lng": -73.93254191072695, - "location": "8c2a10c020337ff", - "name": "smooth-cobalt-cougar", - "nonce": 1, - "owner": "142dmsAe4qVmNxdZJuQiFmpSnB9p6wBkAX78MVza1yNrF4t5R6e", - "score": 0.25, - "score_update_height": 403117, - "status": { - "gps": "good_fix", - "height": 403026, - "online": "online" - } - } - ] -} -``` - - - diff --git a/docs/api/blockchain/dc-burns.mdx b/docs/api/blockchain/dc-burns.mdx deleted file mode 100644 index 4d16b88c2..000000000 --- a/docs/api/blockchain/dc-burns.mdx +++ /dev/null @@ -1,238 +0,0 @@ ---- -id: dc-burns -sidebar_label: DC Burns -slug: /api/blockchain/dc-burns ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# DC Burns - ---- - -## DC Burn Totals - -``` -GET https://api.helium.io/v1/dc_burns/sum -``` - -Returns the total Data Credits (DC) burned for the whole network in a given -timeframe. Timestamps can be given in ISO 8601 format (e.g. -`2020-08-27T00:00:00Z`) or in relative time (e.g. `-1 week`, which, when url- -escaped becomes `-1%20week`). When omitted the current time (UTC) is assumed. - -The results can also be bucketed in time by specifying a `bucket` query -parameter which buckets information per bucket in the given timeframe. Data is -bucketed by time. Valid bucket values include `hour`, `day` and `week`). - -For example to get the last 7 days of DC burns bucketed by day use the following -path/parameters: - -`?min_time=-7%20day&bucket=day` - -The block that contains the `max_time` timestamp is -**excluded** from the result. - - - - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | ------------------------------- | -| min_time (required) | _string_ | First time to include burns for | -| max_time (required) | _string_ | Last time to include burns for | -| bucket (optional) | _string_ | Bucket specifier | - - - - -200: OK - -Return the last 3 hours of burns bucketed by hour - -```json -{ - "data": [ - { - "add_gateway": 240000000, - "assert_location": 71000000, - "fee": 12250000, - "state_channel": 98216, - "total": 323348216 - }, - { - "add_gateway": 276000000, - "assert_location": 107000000, - "fee": 14330000, - "state_channel": 61638, - "total": 397391638 - }, - { - "add_gateway": 364000000, - "assert_location": 118000000, - "fee": 16265000, - "state_channel": 90848, - "total": 498355848 - } - ], - "meta": { - "bucket": "hour", - "max_time": "2021-06-25T21:09:43Z", - "min_time": "2021-06-25T18:09:43Z" - } -} -``` - - - - ---- - -## DC Burn Stats - -``` -GET https://api.helium.io/v1/dc_burns/stats -``` - -Returns current statics for for Data Credits (DC) burntfor the whole network. - - - - -_No Parameters_ - - - - -200: OK - -Return the current DC burn stats - -```json -{ - "data": { - "last_day": { - "add_gateway": 4660000000, - "assert_location": 1486000000, - "fee": 245860000, - "state_channel": 1150548, - "total": 6393010548 - }, - "last_month": { - "add_gateway": 100348000000, - "assert_location": 35019000000, - "fee": 5784740000, - "oui": 90000000, - "state_channel": 31932182, - "total": 141273672182 - }, - "last_week": { - "add_gateway": 25060000000, - "assert_location": 8483000000, - "fee": 1425110000, - "state_channel": 9392114, - "total": 34977502114 - } - }, - "meta": { - "timestamp": "2021-06-25T21:10:14Z" - } -} -``` - - - - ---- - -## DC Burn Events - -``` -GET https://api.helium.io/v1/dc_burns -``` - -Use this API to list DC burn events. Events include a block, amount, type of burn, and the -address of the account the DC were burned out of. The oracle price that was -active at the point the DC burn happened is also listed to enable calculating -how much HNT the burned DC represents. - -Note that this route does _not_ return the implicit HNT to DC conversion that -happens when an account does not have enough DC available for a given -transaction. - -This route is `cursor` paginated. - - - - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ------------------------ | -| cursor (optional) | _string_ | Cursor for page to fetch | - - - - -200: OK - -Return a page of DC burns. Only a segment of the returned list is shown here. - -```json -{ - "cursor": "eyJmaWx0ZXJfdHlwZXMiOiJ1bmRlZmluZWQiLCJiZWZvcmVfYmxvY2siOjg5NjU5OCwiYmVmb3JlX2FkZHJlc3MiOiIxMTJhaFRTWTRIcWh4cDdhMjFhN3dKeEdUWVR0SlpvUzdpR2twakhvOG9TZHl1TlpHbnhNIn0", - "data": [ - { - "address": "13RkeC4sk3sxun6DEyDpv2CxPigupdDtbheQAHcczNdpsnp4KZL", - "amount": 35000, - "block": 896602, - "oracle_price": 1132580000, - "type": "fee" - }, - { - "address": "11w77YQLhgUt8HUJrMtntGGr97RyXmot1ofs5Ct2ELTmbFoYsQa", - "amount": 35000, - "block": 896601, - "oracle_price": 1132580000, - "type": "fee" - }, - { - "address": "1121FXJk5ppcMHyXUtuZEXA9CuF5D8GSmh3h9zyqpzajmuQgLLZT", - "amount": 1, - "block": 896599, - "oracle_price": 1117000000, - "type": "state_channel" - }, - { - "address": "1129LAbCTPjppeErYY1AbbzeAjWsjkbrk1kVtvrNztVjyW2A3CXr", - "amount": 9, - "block": 896599, - "oracle_price": 1117000000, - "type": "state_channel" - }, - { - "address": "112i8wtfaesP1EQNYz44BbBCzTvkooC9ydVEcMKjhSPykfabYXUb", - "amount": 9, - "block": 896599, - "oracle_price": 1117000000, - "type": "state_channel" - } - ] -} -``` - - - - ---- diff --git a/docs/api/blockchain/elections.mdx b/docs/api/blockchain/elections.mdx deleted file mode 100644 index 2d44408a2..000000000 --- a/docs/api/blockchain/elections.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -id: elections -sidebar_label: Elections -slug: /api/blockchain/elections ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Elections - ---- - -## List Elections - -Lists elections by listing `consensus group` transactions. - -``` -GET https://api.helium.io/v1/elections -``` - -Use this API to list `consensus_group` transactions. - -This route is `cursor` paginated. - - - - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| cursor (optional) | _string_ | Cursor for page to fetch | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -Return a page of `consensus_group` transactions. - -```json -{ - "data": [ - { - "type": "consensus_group_v1", - "time": 1628764411, - "proof": "g1AAABMIeJxN13c41f_7B3COjiMSGR3bMXJkZEVG2TMhe2aPzrGJQmRvH-OIHLKOLSMr2VtG9t4jex5RThlfuX6H31_nn_u6Htfz9brv1_s-djg4OJwvAfYXP0w47KQaDEKfYcBzgEwZCDSBqZnixhQDJT3Qq6HPC29Lbv-rkueVBUAoFT_ho6dPn8oC3IlYFw4p8vy2E6P1oUf0Hu8bLBk7eQAQLnSct20F8JVeN5ldzYtlzU0J6IcD81b_ct7j_Gwdv34sGUO8o_v5rkjE7q6kHfU3Vpk_5mjvtjMIy7EcebxtW4TnFWl-8vNJ1pxiTqMThf-irpUVsL1JnqPV1GRhufYnIdkLGQBErW4y51bmBtCLVOKX0pMNnVwSkW498qDC7OUxKY4OZzCWZJuS01NWDQJZzz6FIaLmRCT1Mff0GLNkjLWZDjjnOiivyXxO_SpoT1_KyC_rpT0DOn3fqTrO5rdRNkLSTqcopWAAhDlrwQYmctBZchL7d9Hsj8fhQvoYCy0v4QvrBAqrL3sEWNJG8qlQndgBenIMyXIWNhT2afU4eWmEJ3u8e4pmgZ9o4F-VAq8cgAmnDMLj6SidHIEr9_4euUhO5NQ-m6LW_I99vARW83sVseMAiAUb-YGwKRE1XODFQC03kUq6cnzRt30c1qrYMHGH5fnJ_zNxc9JtLFcJHiaQyN1rjdvT2Gu8GwsRjS5KxPM8NUljN3r0r0rSsMkTV673wcrUiuDB13AJTUAb5JllcjdU-OEWzV6ZrO7civLtxe8dTQ-q_oKrKMori36sRdl-bs4D048ptHPD8LDY3INwxRqllyFhmtxSKv-N-JiRNqevJt98_O1z_VqTCrzrElNDckQz-Wcd1DurmiNznsUJbpGdW5JHyqyoq4ipHuHW5opyTfFwjVSH6EQhHCT5oTi5aaM28dkAnegtL-bkECD2NDXsFQUjEkHPB-0kJJccBmG4klxdvraZXqNCJ7QHUiPR_6oUeeUvTrOPfy8omZHU52zFeZTFHRRPxdRuRCD6-MhHBT1ZOJqgclESMjQ3AtHr-YBxbFfolU6Z3j5f6DHTqQdXIU5u99HoB2IT_iKY3Ul01BhVcttv-uLqZ9UXyaDoQiYRLSDnOcq87Y-6TFhm7bzARk7ooeAlkSsOQ6WkSvaC7W6u4L4RdMlld0TRMBMkfsxDyD0eBwqebTXfAX4pR_XfrAc77HUW-3BvCuJgE4IfwrpSgm8xT5fwsjDmB7vkiEWE_97w7a38ihgLc00Zv-6X8QMX4xCqWYuetvJW-hdEqQhe-ONtzPpbbl3HaY1UlBMAYtOr8UWoRHl-zxAIBa8mv86PaSKMlSNsb2SdYFNyhnVjzddI9-I7s_YqS1AEXjlELXfVoihtEjT8rSmhYjPUWZ7--lSHBvqoe1MGyAanDNtEgwszp8DQDsm9D-hwNmhSXzmOxb82Tn-7rZqciu52f1JWGF-UFdNu8OecYgU-ZHD-bOzJ3WEsKrBuqOfdVz2P96RrDXPS3H1S6sRe7Xir8kf3yVClixMMGxTCecjx7vxmHeczYfDcw9z2baJpMu8qzFjcQPgTjlDJc9wLM3Jmf2cqkQ7OaEUrrdU2qm0N-KqAy9dRT9OR1nJDjFUVa5q2NOgKmFkgeB18d3pUCX3HeB786LIm88ekT7wnG9REXh_uocSO6GcUk5_qoukaqcUBldFB4CGO8uPEHbieeK_IxDAAwmiy3JoBireBnXMn-GBa1Fin8HBPJNjG1Drvo8QnUd-vTGGQbtAXU3g7nXzMayocXVn3nRt_glDfHR3d2FjeTPVdm5WaHbiQWF54ZHbbMJ5ujpwHZZ3ILrusFc8cp7ijwt4QAGKUvgYVDg5hAsNcy-mjXR1wc3TyNZbW7vrpJpaNzLjWYzu2O_hJ627yfH9Qh-df1a0tZItUBfBbn4jOK39IU4Ofccxlx6q_ItoIjImZR0VRxorPnY6z_eJDb2zmwIMfVcD6JmZz-QQaKfA1nb0saT_vDv7dTkfWvGXMF3cSpKU7Vk4lmMHHBtQT6PJC_24IlPZY2v60GWG7h-wiKN2zSfkajXhZ_z6D77p7kvbDFd90z95zUJAw6OD_L-JJ9bS-Cp5WSFizm8ECkqPiomQANh9XFhhmIUUz7e_JqU8yldjK9b0QeVaQSThIC_rwDpvwjEedu-ugljawyjezCJhOV0f8ioXA-Gd2KyJIH0_fquwy4buuiPUUn-7fLIo4x2Z1IZD42FucA_cf2DX8-haM-tjHyFfIyyldeN4zMSwTyWSD2MfIpIY3zwy5rTHLqaWzu2FnEtfMXgWX-0yH1XjFuX4llun-CX8csfla2TcLUipZahzXy4SSo6H2ao7U-0-5MtNWWDpyZQ6JFbo5ZfvtcfUTHG1fPWf99m3IMtB3s0amZAn3GPwsEmEn0zhSplXYU4dqz9tSuHoAZM9jGGDCIynEMt8NiHxa0L5dpk7bvxseOWjdNX5DpGR09Y165fS3bBrUuwjrgJ_Of_ySoTasfqhJ9_QO7bTzRoRCVgAAIuRKT6osx5ca9KDzbHNkmh2xafFWcWzkHlXXlLkwSfUMNp-X5391jaxiI7SLonuU2jQz_OT9b6zEw81uCjFtJLNoDF3mE-3vqmBv19t166ViLPaeG9YErwOCTqQYyGCAgckjmbqV3028Y34_T6AtmCbLNlpoxfzp63syax72_emrpSrLN7D5VJEgFc2Ou1DzJDqI8d5ckYYXR71g4I39APhUM8hPL_V6HtpOe96sRyLYMYr9JvQ_XLhK4iqTAkYfn5WK13pYhCRSACDu0VzxDV8M_YGKv0PwUrLdxZMs-yuKSUYxgRk-JKH67tiAoos6nQc7LnW_1L-qhIZKEk0PPXfsAgUgLD1mn24eG0xfBnzM1MZgeGyAeK9dIDopozxh3qrz31ggSeIiNepUSfR99y4Dx7OsZ0275QQxCP7KUrQ3aH17Ln48-nOY_x1j_HeE2IDm9niqc9y2ejW9X0Mln34OQVHyGd1uCCcJ7nW_K7qkknQd8K86O5IjyuS74TtTIUf574QnDX1NEhbIG0L-DQ6zUYaLAIiW27tQsdVhJlu7_oOX08JaUoc2p3_CaTissun0jlczS7EBBXernJNm1gmK2Or6KIM-ATS2TGULEZNJspW2SGNwc9hlwAMSjXK_NPeCgJy0vSkNm1Dw0TbmDo_WymLxoDYo46kvCzwuQGSs1QRi_zReL-Sm83Pp6HBR7tXckwypybdVDcRYbDPihCS0AB7e3jYe1IMJT_ego8-eVDtIQeYYxqXVvua-xMiTB93AjptAEHIglsmnkBNxekNbiaead7JmdAr0teQYZ_tdUd3dMhIyRtxpETSviUAeoUYBNfnDGagc7P6E820sJvGQwqd-ny5vslDVOyvAYM_q78cnrrCM403TsdBbsoSPL7HsR6wawKpHzDVbYyyB52IIf0PivDF8BA-P6cv75t7yeWyw8PkfYSJlSurMIR060agq5rQQQI9k52b46onnhs9Vb1LlF7Xq4XixupHN81HwvhXYb0DRojdJnJSEThs7S0oQV7P31kG1OIPX5ZGO9ewLOMXZ-n2TAqvnIBmGr5WdqK8ltrUACM4Z4JGD8VmN39oJKT-3L-37Tcl7QLQJH8ddYZpdDWLs64l7awPv5RvqGwFoVKaGt4WY6IxY8ef-1sAG85KK8hHq0weX-YLjD6XLpeVSZ0uE5hIsFbJ09HGK2Yx51czdeca1NlibBN_JF_b8bBjQFnuWujVQrFoPIrEz3HcDHoUmn7v7vbxqzVmoMxx-nBsQh1_G0RYI330GS_n8wdoSki7mxDBoNFj7r0qOVwbAqMSIn0VOtn8OQD2C3jsZ0Arr_4E3BSaS4VNNrqT-Enix_or5EeqL691VlbAUkau3VA04ztf5ZaXF4xD96kVYy4Q4ViwQ_lpcEbOKOhKSMX6ZVKjqUmEx1XDnwY5_qzX8J77ZrauvvPadYPx4NqMyrnxu4VkaoXmBXX158_oxGU_vtt4v7TbRF-OCgq0DDUUWw-kemw-jTdFS7mqUCqdaZy1dHfjfDB2se7EmJvGNU2R5Nb5NAUDBm6hevnAuWbE42reZVfJQg2K__fuViWt_S7Ehc3LeHpnm62Pu6rJDgaYkqOqfwJ1ZNhCgKL59YU6VBLX7_Dd-2-VE5dUURCHKvUaYuK7Q3OBllemrNJgtdrPAffkn9kPSYplwBJXRWZbN-S4G94XsiEcEbIpZssU1zvfN5TWONw8VCPxi6eFeTpMtm9QfoonJ0VyYXx5I7bz_MUoXWPZTm7pZ1qbELbVD3Kh5rSFpQDv-E3WxxlGisb-dLcnR1QDygns6NhRFKFaoLUDQAGekfVlPbYBlBv2Dwa-dGI_So0vM2MWHxR8HaqxL-KaQjwj5XRFdAxqUHrI8C_sLtSaJVcgfEYuRnHu-HdE-qldar8NtaJZfzrDh4CHmMoFn-PA9CIv9zAPwxMf30XtyETj4MuHAmiDeVr9G4jPbdG2HM6cb4i4xKX5ykghgb2OEnzYkFqW9gnynnk6KeKVP1EkkppZG7UZTWR5XuhqChrcSa_VPXyyjNQbZoal5HGdkbtZ3TRVJsNionoJ-Z3LX7WHd51TrFT2JKm1OonU83_qD7JCliHhSxUsMXStVAdGuFhMHBz8L-Os5nnGrcTmn2Ibdc3Cxd8GUtKj00f74acwC5RKLBrPA5siHi41bRTNX7HTgNDjqUMHkahoEJc3Y7Bdu0LKf_Xwp3f0C45DwS6Y-yrGGiI457v1s_cn1Qz24SSxRYXSXXjg_91iJnOrbnco8RzoFAbmjG869-sjVfgBEXjCCXcEfXW1qO0s8H887H7Q7kS9LStGkbC2vU_votwLWTIYNf9fbtJvUAYV0Lgg8SiHXdsavaJe1YzpXFjt8jmd_bU6k4ELfse9lYIbJ-9Try0nq61ylyS0LTWWORFEYjkVvAMRxg2HYmXGz-SE4uNywVFi77MQI1ODVMO8qwtqYw_-kAGsSiCju5VGh-0hnsxUSbntwlo_uZPMlawdR9Aqe18cUz1yb9YcqbSykOHTjq3IW40_f6Ggn2kus4ggPMuxlelfizLwAQPC2VmwT5m2AXllrxdKxFlQWPOss_X_nKhO4ohtL8xyfYy_ScBkXD-JVdW-o5pCvB7gcOS4FTeOsTt1wArc-kjPj1rq8SMGjg9yBMVZT9WYuTRb6N6hEjCPHH2GPL7njupPoybJ-DFveh3d-xR5yW7UZzeF9FEKYm0uprmbSX1zM3z4wKrhamaK9Hnsh17Z4PuYqO7PyVesaU36KtDj6Zbe0ZCDTNR8KvN5AkZ9WzT8JeKVObR5mPkAm_1yCwqWZPfhxe9N45Wu0DwUvSope8CYdEtbNz_l0cKuDojDrYMz2E1n9usNqqFfHmusHLDrqa1_f4Eq2Y4FTSPD0qe2JVLqAvcCz1PuMudyEFb0ih1evDI1z76qqTxwQ4jRwb7aGd3JabeBhZVyK6FFLeh1XOMrkwpwPpfPM3t26tdSvnQN7r7rURIBK0OfirDHJDY-Jeit_9feXUpULb-1-3ebcLnw7h86f4XYLY9Z-gPcXtR-v80_kJGyuTIjHrL6gI2O7uf3pPAtdTW8WHxz8F1iz_ek4dCW3VWjywqxOtqfsKeBL5jNpbOHMrqntEDGcN9FH-Rk1bwqw_knPwJqafpbFBrlqdsOe03bcE3DwGP-ngYr6ciIOPGMpp7Jov-vuyWX4yU4_aOz_Sa_puF66OhJNodxlgR_df3uO0JYldKcMACFN0tQ-Ra7_6aIr3qJ5_9jg2UGfTPbwdnopmh3x6gd_ENbkfn5Qcz-OPO6UynNHmpaYnpu-o6fvu5pkEeqm9vxg7__r2N95UDDZhNCC_L5JoWtLzb3K59EpDFs3XAqZ5KRTFIZnABA5J2X_nlR_9eNlo-AJIhPppR6IV-cwMdgWA-816D4Yhv8PM6R2ig", - "members": [ - "13gepQDvqfnrBiBvqfkvAaVX9ysmQQCgmGwRuiQkgQwU4GQTrGU", - "14p6oTWaGutK1ZiGuBveQEP8rAyWmj9hQxP3hL57YKoKbZgbXAg", - "11fr1XwmFTHNaaDjsnyqfBsAQriJcFosATrFbC3orzgokUSA5bS", - "14ZhnUJV6k4LiAFCySvgG5mcB5G76xNo88sBgRot6ZwXHxPiJui", - "112tvV6v3HkFZWk7KfBTWUofMkZxzEeyAPMsofKJrr7JDU3vx7Zm", - "1126SgELXZEjYdU6Qsq8wBmVXNezgDjADGHngvgAvrDPvHQEdFjk", - "11jNnLcKfitmSDFzG6CAqFy6acsShhkxHgvWSNUdQDsfcTDQfam", - "14D8Rs9r78RHFZ23UDFiEUbY5XtPXr4Fx5btoNSELog4x63E2MQ", - "11kMA31bym77vjMjDQ2VPP9gFUmfqrwA1hXLpRpbW8Xd6kWNRLS", - "14dbWi9KViapfv1vuZuqNZuFf5CBkuyfZyutrUbpxAV5XY7NDtK", - "11PruqvPMCxWqb5Z242AQQRR8Wvq5RP3w8x4ezF7Hrugrm8JvnG", - "11Bryk58FvAMcox7Suia6d1ocNU9odg5QmNHwMxHRRnCLpybjrx", - "133Rx7zW1sR7vdMRu8HcsFNi9oqx5YsQfM8dMpH1CY3MqJ1hR5L", - "11BDjZuKLcygBmUcgZ16xnUo2TFQXcZqTXVRyUMwTBXn6LtPJeG", - "11dJV5WdhYjpLu2Gp4TAiKt8TjUDyDQVs5qJ5SMcF6rQVYi8HCq", - "13jyigDpLxg267iYJD2tUX3bKbTHwiULYtycUAo63GTUfCy4Y5t", - "11dn2zuCmdwMMQL8GsontTKAsKQDRALDFpngA7A9ete7FXcLW1U", - "11J7SQbRGkQ4rpm79D6EL9QcZUiPqk7ttLDx2xCyNULRvLQ5Xwx", - "112BSpw3uWjQMtx7ESX6DnbFgWDNDfPKXYpYSi1kZmB41M6rJtc6", - "11QTEnSijwB4u6a6mqUX54vzQVkTUJdbmipTowwTjPB7SHtcJDS", - "13t8GxUbLnkrGhVhzdFfCZazNJ6VZuNGzoJkLSqm9tJnFonQRaM", - "11bcmudXfjUif7MXm4KJ6zfhQmdCckqr6gXaDAQKVfmJvY2CD1M", - "13RadA7vBrpNgi3Zdt1GPZbYi1HoCqA66UPerQ3i7FfbuMPejay", - "112d2cbaJp6Ma71ujhFsfC9bxffLZT7mNJUJfcZiyjeWoGsLEXMj", - "14j3Mt3tfCJQcre9s9bWqNm8pogWfjoZg8qMfffQMRqGSZkGs9P", - "13JveVL3UTC5QbfMGzVwhVx5Tf39NaN51TLx4drxKcbzrDxKchi", - "11XPUBzYFiK4NAUNV29JQbUJxhuQ8DazM3EgZkkhnNHnhHWhQ7W", - "112gQ5sc7kwqJzuc1obump4QHr9W1xJhXb76VyL37NhT3LQ2J3Ei", - "14sgzEcMGUVX7C31w3ufxWDmtCfoZy6aLyc9iuz3ud6MygcxUE6", - "11APDaL3Kzsu5noNLWDrrWBHQvJn6X878oz5SppLaB5Xd6UZ4NG", - "114d4n9kWfDgF9Hr31KXCGb2aCnWs6xUGjjAHAHvbk4rMrFWCQR", - "11LxYQxJuBnWppfNKZe8JdkdBeAynYghhqZJg9y8hR8ndH5xoXx", - "13PgCBpga1vGMWFB4J81EMLkg9xYjmJpjDeXLaCjpCgEuNLhpXK", - "11jcd7afHSBSX5jg4Z9fSkm1UqzgSHWT3pRa1TH8j7kHY3x7cgb", - "14o43rLV2ySA4cqr1AMbZBm5RkuTcomHC1m9uH2RA8E5G3oZqPL", - "13MVovW8UBq6jYv7TdxLzUQZAFCEpYJmLMewxrJayTLxopxw3Lb", - "11ug7F8doQetQzN86J5ZvwCvSE2uF2qin7oNeEQ88bDTLZZoix4", - "11nUQsd4cJdzvcvRjoSQy5VjbE4Q1Gc5n5JpobkwKTg6BHTqykY", - "14UwPcZYBwiTmftjGjviPeHuC8UCGQqsVKujENR5ghwhqjLC4Q5", - "13eDJPELXR5q1gysewvFD5G5nEyRpcryrTVRDdiXc9zLhw2bTHQ", - "1126C3J8yu7SmTZ2R7bA8xRRZbpruDo2L5B7htVLXE6xJdSn9NcM", - "11JeNjpvDrENMkncmQAqEugjNKN4DyJUDdCmzVotLCuvWYhZwDF", - "112Hy5kTUP4oUVvXqYUQJHUMaWCqXPtpdgL7U9uH6ohpgzYASLpp" - ], - "height": 961862, - "hash": "4KAZu3TeLbJlq4PKgcgOc6944tywkP4w_xX1gq26jaA", - "delay": 0 - }, - { - "type": "consensus_group_v1", - "time": 1628762061, - "proof": "g1AAABMYeJxF12VUVGsUBuAJkZQSEAVhgKEbpLsZOiQUJaUZUlqUlFZSupWURjpGGmlpEEaR7qGby2WtwV_zZ695zvvtffa3jh0AAGC1AsGvf2iAcxxhivUwq-BQbXYp1Q-jb00Iv2cupWCLdpc3LSNUbXr-r5Ks1ns2U4-YPNcsbrdwUd8OboWnd4UdrAjgeA8cvLkzoTQllbpMk7oR5dIU9oeacwfm5TQp-4TEXxh0QCmsGMVAgMZyMy1fLWE9-UQgR98Ws6213UIWDRH-WJwA9rowymB6IXCDXZHA2Hks9ud3vbQ1jn50LxNP0EmK7rc7Yug77IoxrFE3sCnwbhpqJykJ0phqsLYMqA6pHpvZJQAw-e6qAZBxd9DYIdbsZoKD1hjMdQdR4-JnPhBBpehMLPGRV85rjHbDP-cGK8JKAiMSYIiftcoNCn0YkSmYOYH7v-fCeP9cRrYggKrD1EEFX96XyGqsQMS5JHRC86QTJfA0duHbDO99ojkU0RiAYVpOX1ktCNNiVsk6NnJOSPLZCb0-9WcZQx2aXda5TtL_qxS45ECQh4yZSyrUOOetmjnzBVHxgzHYxu9fOnNpseSjtgU0zEVANIBF1treBrKs-2NRL00ySyOtGsky-1o9TapOVkNdVj3pydAmE6EWFX-5NcYVSKYCE3PypH6a_aQEQ9ITtRSiUYQvufF_lTyXLAjiQsxQHhwhqNA_Pi5rz-qvaaaNW8x-GuY0ECncXAooGQFBHiFHpJZYXPx-mbLXa6jtIjRoE8Oey9soXB3avzNPcxtGk1H3NvXKyYTCt7Yk7R52Q2VOTVE-7ZcQumO5-3G27eFe6Jg0gE3qV8lunAVOLpGLuh9mnth5g8RBJKIrzzz9DF27YUpwEIRNpa46LBlj8sUzwXCgm4eZjPOBMKmPgRc3eeNnzBGiQ7RpWzwFT07V5_NiiYeHvON7HDuoz_z0xC2YZ4_---abGujt0WIKImp314UEY5GK6cZO9bq4WwOipJOgwzw7sxCCFIqN66fyj-KJjPALQ1pH8e9_Ceo-btuEHqRb4UW564Se5PVOYaBNY0FMvaAaY5sOSvkod3KAnqzb5p3ToJx-BwdXBjqP6YH_qxS55K__8XjM_ffrJouzCbnkyqbvpu3YTf2qSdPyE8fdLyWAe9kV1yWd543RD0XiVu0LJ9ZiGFfC5Y3HOR2wuYjqnfwRat3xz9DogyfWPanv8WhnSrnoqAveO-eKhIcdrfr2fauLHQ91SZ247afozunHkvh5lR5OHgGZyxEiu5VXrJTKHlBX15wdviHCZRDEuJhS-_kZ7Os6vpdywQM15yli6JNZia-vkzg7N5NIacBoUssNEjdm-spuent76FAqFtIBuZKyT4IuA6d9rmikHtb9G9sZmk6x6BWjFTxwklvuo3XEvHNDAVtJqWUQH3PlbmT1dcwiw3BiVXWWTE_LjYB5I2qmC4nxjHgD1Broau4J5yzsI9pUS8ZU1e4kYzRNooQYbs8Va3mzNPEF3tkJsJn-jumnn35r2rnmSCEvH7J6psnFp8eVj9Lfc7-3Y0_KAA4VD74oiNu6Ns-FGbNDvbFlmyatrSsSKiX6NAOBT9PCNcSeOPSwNdsWok33ZLcSolm46jxjLLgSop63ZFacMYU50o34VLUW4iT_-F8_50-tdu3dc75ge0sn4LeFacY9pgnZGKsxi2Az9Vj425F9XTJV6dD94ETM54Mrq31LLBtc5bEa6pPpGdJVfxUqHWEnhkZPEjwcIypr71oWghR8cJvki-ZSFEs--n6HSu5rkex09N_20yb92djDIsZLVPbKwOYH-oBW-XjVjjEhffjijgabTyArCELJRqhtSESY6zjOojGYB0ZA3CZd4pxS_sbom74OnG9vQpM78M9KLatf_1ITvc4ZTUU6rG3bsOYvf6DrrGMwYqNOS_z3fk5KWf2MLAYja_KP7Di2LdiZ5fTgsyue3mEsDSvZHwp5QRDZC1oqtcxJXmxr3LQ1nQwqCnEsx6isHH9xVw9ewWOyEPSe9fb60NgCFRml-CO8Tarz6BfP_UEPc_EwE2x-mtUUOq2fN3tWeMkjMN778uVus84FR4qWNGZcu7N3J9Ygfik5K12-v0KiOeaPQKbPoOMxawb5jSabkTiExAQ3ucEgdkxuIK8K-gYBBHuvqnQPGVZb7okfndBQ9U17kKvVQ7pMwuatFH4Ks5bcDg_-IhOnQET7qgbGqrx2PqxIlN9e2hh51j0w6B2NT5QgfH0EV27DG6qexgsXflHOcwsIKAR2ZdxdxuXX_NNjRFGpHYY2P3qLeicvr3Om5Sk7Qblr9QxJv0aYHRzazc8_l-lBhmDc9lG1taLr8Mdwt9PaEJG9VtS8RNCQ1xSUeFsJlniq0qrkCoJQCfqIhKqS7qxFhW5x9GlNFY9GTvCWD-x0092XnOVnh6JJ2asoKmvB0dR7Mv3Pcd-2onx7jB03jpoF7J-SGXrgwl7cks4uRxufqWIC_m5GVVg64HnJLlmHblOOZsWT9rekC20hQRCBqrIzytc9B6jZ5Dk4j7jiaPp4JEeUc0eRrvXYEXv8JrqNP96LtW2lIAeDOr3O1NbXk1ulqjC6B4R0X_tDEM1-hlE3bVycT-ZnabSHXSiL65p391u8SQCRrmY6UgWCDyfgRksWI809tKdJHSIqwZdAir2LpxHpSdAXjrK6wJaENZt7VLd7h13l60yI7GrGflW4wejjFhv8yXqt7_vqFMdiFzpKx609_-a0KwuYC_bmCWV-Aaz4cFyPypQNtG5Qt07HaYzuKv39MQEEYV6u0bqr0Mi1KHhcTT7HTc48ENk9nAj8rTpH3yah0OSONv_UKa60sFa8fU1Zq5JxloFwB55l8Q59ui88lHJQbe6m_G8HLDhfwZLHF-pRSP-XYsuOWB7ckio1GL5Mc-tNrUuqtE3XJadeQQUctslrg18XaUiXwgSl7i0SredXTh4R9OLi4UQWo1En9fs-aZZiRk7vfNWdYJ5aWpGptflf1wXeVwtlsq2v6t020vz0kXmQtfvhTApSsme6D_Qpmv0gfm99iQAMHWB2pigCQcAvQW8vsOA_Kv4UgX2D0tixxpc7leTOWzExw2vHZ_T80eSYL7yp2YV40wxQhKWkZHsulckL51VJZ6bOY8ep6hPav31FbMeqySQX6lgJYAS2-RRgXJJD-wUVCG1BU9S8P5_qo_7rmCf48HvvVtdXpVGn8Tw-HtFyJwNimMGoucGlI9dpLKJMtHlE6CriuZA4m9QQSSHuoHRK3iIANcVrXws1xHE1sNN2vI2JK6Lj0Q9USi5O7puxI2zG3qWX_GM2EpsikwqSISiXSgRBCCr-IB2OCr7YlqVI_cZpgOC0KBOQSiYyW61oUkmDN03QJHlBcZs-wBvqSozkJuF6w7vTnEOBWiNwhPFftHSVlsbekqSYpiVxZvQtZMfPvyBBE5cBq1pn5c5Qrv3MB-WzHLBKEATION7I6u4oLlz4EyCekNs2MTvqcU8Ze9LE-yTg9FVQNpokVWMDLzM3rs1t2WzkUvpT4bdSf94J8KlRX3AvOJeTsPw3tbm-gG8rgWysPuwJMoUO4xfaJ5GMLT7mp7ytnuzj1Tn7IIjjjBJFWkLzSyNvPlrHcyi_p-p3oQinvPBk-HZGuBHpbcxCwbqSqqilnAN-GUOrpCI15yqz6WYijk3_NgubvbsmeLfd1C1XkNbVLXwL8hiGs28HlKrhmuCpA_RTP1RqymeW8QGun6oF4UvV1WeF8K5xdLTi3epgrClksHFbuWDDS3ozRx53jjZnGZ1sbI7zAmLuVrC0B9psqVinlidavIJkijhSDb8Ybrg9WlqSHGDtgmuY33ePjawneXFpOB_uN_Ri0f3kBNrT3rnDfX1x-ehiNX9d1eIScjDzZnqucKQCMIxr6suCKrcuG-UBO9CkKRysNsduq1_fVxciqVQenEPK_QK_OYzgfZ8bmfC8atItacBSFv72m1BEx7uBRunyozN7N64t4_a8H2atMTR3G-WegSA-i4QqBcf2hFyXRNZKXFRvTH_nRvBwokxtH-Vdfn2AeoteeHv5IM64uIHHXmxY9r40AGsExMf8cDQuu13PdiR7pjnmZuH1NFk1XI1KHLSK_yJeIHfqeqHM9WOxbO9jyrCo8MESlTLG02R3Wk7X5XMI38ceYoH61lbLBazJrIW3zcJhUOJKPDS2Fn5OEFJoE9bRPhHUexKW6Un5-MuU-m5qcq5BTEaDO_sN1kYYEqeRKRkYjDBUtumpWpAQ8ziZEZ77YZDxiVEbhtONhGQO-tDZBCVXm-5FppLlv8zys9DRv3f8LbGGsDMfFxONCf_R7drddG481KxTDQmRxJ35qeHQgxkQ-8pzVmnt-PnMDVbjxbveUzpkoC_HYjbTkRoUFLZX2FpM8mgb8GO4RuMBDV2vRblpvsxsRF2FqAZFcYQkmYgJH0Eqe5_6fMxqlwIOGhNfTqkxcoKu21ph_7HOD7OrGnbaQ7AKui93NVs1TeeE3GCe7tDqdoeky9fU3KoagKisp25MWXGNoeZg9s6mQwchWKd8WgwxGKPp47tsjP1f0mppbTwE5JXjSmqtL2X0aqyx0GNymvXKLF6UD3sE_-AzsByIsmLyGJOQlm8oEPNrkRDFEv_3BhZv6072f-ek6bZ8hKAAug2uG_195Y6Vz867atUo3i78BgShSXpTBIjGXzr9LozqPblroMWn840PtTm9xlOlKPkQawYdcExf4VlXSg_-iJ4G-UpVb4Jqu6NwI2f3YJBdcllsHKHiTcCNpXIrmiO-exORi9JM2kMbcAuYGZu7pWbffEgWQuDYpLvM0bD81B5ZRv5sWuOwo6JivNlLiqEMmZvF5WIfunf7hWzwFwiGeFfT_6zf5-7F-BsxIcWYwVqbvur4oE1AzoT96Q3m6JNmdiBCbqTyCKf6oKMSUvi5hGqkWMZTELBdzZxCWsOByMN6YRnOiE_rrUiZeR_rLIU7mKBBR5mlLnHmLC0FfQsDuR70dq4qCpEsPjTDZAxwSoZX9DYEvMp6zDFc13XiWXZwg9Hu8n4Tx1flX1v2PxTIkFZJ9MXt0KZznnTCGxfO5F7kN8wKkIznl2AoRH2La-ZvfyNlXmmYKqgMI2nAGzgOFbgdSrxVsJXHwzsBqJxsLR8zEeFfIiXlg22BzaalVZWjDy84brDmllVKo4a7DESrbLXBY7VzXJWtjpg_7JFUOYt0dA76Y7WnqTOxU4E8L989PS1jYqTb0Aw9N8n8u_cpvfds2pIdiJ4TjiA9fAEBteNPRPlsos0PqKK1hzeF6HvW-u8slbpMI9v-zUmQuschCU3etH1URprT8dLYOOgtdb6T2Kz_OSmG6MDxOAjiSjuKxzUJl0C5qpkuvkDhMuhYRpo9eMibdQ8YFG9p_god0Oo0OjHpT4VgOPmLy8-WV1snwJeyo57h1tO0kq0uMb4eNwGX8fm91ixsTxF-fhEYNCQRcE0Fg9NZ9RIJvfsZv6TmnUcA2SescvLGXe-U7IkRCg3BzljfH5RZhWhhPkoaUMYAoANaSirxN4rsoqbGk-kuQ3-Gfl06Tpkf5fwy8WP60W8e3KF_AQNkpWCeh72HFMY6PPsDpbG5CqeiPHuOlpR4NgOKM0WK1x__5AtlcVDMhC-QGtEuqMXG8YbHnYGO9yTGCmGxcMW3UmgTS0hxO58cNUA4-0XhE74na-XY5hfuFJ0gkj6-q6aokl-3O5q14NlV3WH5vPv9jDbwQfFjT_Kwrtp0LVxBfI8QF5dhJRDEfgsJGwM_npnunVZ_9xQlB35noRTya0WQAMd3Z5N2yhhNpliP9Ouv2U3pYgZ3_eYVSL2v43S3qkPWjuZKWWRfAwy_vf3op1glqMhpGHXyucWHyrCcSpmHzlJU48RgLJRyWGPOxNcHkZbiyrQBzOjINtL8coxMdYnm_B1a6bcy6l5oEzutQJxu8x9-WmhK", - "members": [ - "1122fkwoys8ZsyuR9Wd1FRiJ9pzCWeGJdtaEzRp2i6swFjqMLHhU", - "11Bryk58FvAMcox7Suia6d1ocNU9odg5QmNHwMxHRRnCLpybjrx", - "11Lx7ghqUFFrqp1okFnfWPGv1buifwbRry319WUFHutZ8kc2ehB", - "112iQp2G7EZYJb3g5n8zVun5fgjRncFmNtECEUBdhHwJJAiodpae", - "13eDJPELXR5q1gysewvFD5G5nEyRpcryrTVRDdiXc9zLhw2bTHQ", - "112d2cbaJp6Ma71ujhFsfC9bxffLZT7mNJUJfcZiyjeWoGsLEXMj", - "11dKNGVMKCyYjwfCWqFSHooijZ5mbfSFUdrEcw17edAXYCUs1sp", - "114d4n9kWfDgF9Hr31KXCGb2aCnWs6xUGjjAHAHvbk4rMrFWCQR", - "11APDaL3Kzsu5noNLWDrrWBHQvJn6X878oz5SppLaB5Xd6UZ4NG", - "11jNnLcKfitmSDFzG6CAqFy6acsShhkxHgvWSNUdQDsfcTDQfam", - "14j3Mt3tfCJQcre9s9bWqNm8pogWfjoZg8qMfffQMRqGSZkGs9P", - "13t8GxUbLnkrGhVhzdFfCZazNJ6VZuNGzoJkLSqm9tJnFonQRaM", - "13JveVL3UTC5QbfMGzVwhVx5Tf39NaN51TLx4drxKcbzrDxKchi", - "112BSpw3uWjQMtx7ESX6DnbFgWDNDfPKXYpYSi1kZmB41M6rJtc6", - "133Rx7zW1sR7vdMRu8HcsFNi9oqx5YsQfM8dMpH1CY3MqJ1hR5L", - "112uP245zEH3PZAE36hd9te3zfcMNe3owvfgQbYZvXEn5n4mb9m5", - "11MVK9fgQEaSAXWVC6VG51MgvH9He1BKoDhLJN5GrdvQBVZkzzG", - "11JeNjpvDrENMkncmQAqEugjNKN4DyJUDdCmzVotLCuvWYhZwDF", - "13jyigDpLxg267iYJD2tUX3bKbTHwiULYtycUAo63GTUfCy4Y5t", - "14o43rLV2ySA4cqr1AMbZBm5RkuTcomHC1m9uH2RA8E5G3oZqPL", - "11BDjZuKLcygBmUcgZ16xnUo2TFQXcZqTXVRyUMwTBXn6LtPJeG", - "14D8Rs9r78RHFZ23UDFiEUbY5XtPXr4Fx5btoNSELog4x63E2MQ", - "11XPUBzYFiK4NAUNV29JQbUJxhuQ8DazM3EgZkkhnNHnhHWhQ7W", - "14UwPcZYBwiTmftjGjviPeHuC8UCGQqsVKujENR5ghwhqjLC4Q5", - "112tvV6v3HkFZWk7KfBTWUofMkZxzEeyAPMsofKJrr7JDU3vx7Zm", - "112ptREvWm7ZkbXZkJqEmn6pcmkidXKbTJFT2zzcMfV58JXevhb7", - "13PgCBpga1vGMWFB4J81EMLkg9xYjmJpjDeXLaCjpCgEuNLhpXK", - "11ug7F8doQetQzN86J5ZvwCvSE2uF2qin7oNeEQ88bDTLZZoix4", - "14p6oTWaGutK1ZiGuBveQEP8rAyWmj9hQxP3hL57YKoKbZgbXAg", - "11nUQsd4cJdzvcvRjoSQy5VjbE4Q1Gc5n5JpobkwKTg6BHTqykY", - "1126C3J8yu7SmTZ2R7bA8xRRZbpruDo2L5B7htVLXE6xJdSn9NcM", - "112Hy5kTUP4oUVvXqYUQJHUMaWCqXPtpdgL7U9uH6ohpgzYASLpp", - "11ruKmR5j1Mj4mLtjb3o9xMLEPXetGhELAYbvs9XAZLfQyxWYq6", - "11J7SQbRGkQ4rpm79D6EL9QcZUiPqk7ttLDx2xCyNULRvLQ5Xwx", - "14dbWi9KViapfv1vuZuqNZuFf5CBkuyfZyutrUbpxAV5XY7NDtK", - "112gQ5sc7kwqJzuc1obump4QHr9W1xJhXb76VyL37NhT3LQ2J3Ei", - "11pRX3m5Ax88Vth6Ld5DefZi4PL3t1CLegzF9bTAyBuKK9AEuyK", - "11bcmudXfjUif7MXm4KJ6zfhQmdCckqr6gXaDAQKVfmJvY2CD1M", - "14ZhnUJV6k4LiAFCySvgG5mcB5G76xNo88sBgRot6ZwXHxPiJui", - "13RSzbdJTi9bnvinwhTQpzFNLqoa97D1fh7mQyug15XnvMZcqCY", - "11kMA31bym77vjMjDQ2VPP9gFUmfqrwA1hXLpRpbW8Xd6kWNRLS", - "1126SgELXZEjYdU6Qsq8wBmVXNezgDjADGHngvgAvrDPvHQEdFjk", - "112sovgvtdybLuqiGDj86A2S9oGtBN6GEU78fEvkoUjQriYDiVSh" - ], - "height": 961829, - "hash": "iSIYPxHu8B7xVYfDepDVuP3rWiHvr5Fxm6GztIL3w9k", - "delay": 0 - } - ], - "cursor": "eyJ0eXBlcyI6ImNvbnNlbnN1c19ncm91cF92MSIsInJlbWFpbmluZyI6MywibWluX2Jsb2NrIjoxLCJtYXhfYmxvY2siOjk2MTg5MywiYmxvY2siOjk2MTgwMCwiYW5jaG9yX2Jsb2NrIjo5NjE4MDB9" -} -``` - - - - ---- diff --git a/docs/api/blockchain/hotspots.mdx b/docs/api/blockchain/hotspots.mdx deleted file mode 100644 index fcf079ff4..000000000 --- a/docs/api/blockchain/hotspots.mdx +++ /dev/null @@ -1,2335 +0,0 @@ ---- -id: hotspots -sidebar_label: Hotspots -slug: /api/blockchain/hotspots ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hotspots - ---- - -## List Hotspots - -``` -GET https://api.helium.io/v1/hotspots -``` - -List known hotspots as registered on the blockchain.The results are paged. If a -`cursor` field is present in the response, more results are available. - -The `filter_modes` parameter can be used to filter hotspot by how they were -added to the blockchain. Supported values are `full`, `dataonly`, or `light`. A -comma separated list (no whitespace) can be used to filter for multiple modes. - - - - -_Query Parameters_ - -| param | Type | Note | -| ----------------------- | -------- | ---------------------------- | -| cursor (optional) | _string_ | Cursor for the page to fetch | -| filter_modes (optional) | _string_ | Filter hotspot types | - - - - -200: OK - -Hotspots successfully retrieved. - -```json -{ - "data": [ - { - "lng": -122.39186733984285, - "lat": 37.784056617819544, - "status": { - "online": "offline", - "height": 394065 - }, - "score_update_height": 395577, - "score": 0.25, - "owner": "14e35CChhsnuHJxjjzYAxsHKBKDgjUop4GuD8esB7gE2VDoyPXT", - "nonce": 1, - "name": "tall-plum-griffin", - "location": "8c283082a1a19ff", - "geocode": { - "short_street": "Bryant St", - "short_state": "CA", - "short_country": "US", - "short_city": "SF", - "long_street": "Bryant Street", - "long_state": "California", - "long_country": "United States", - "long_city": "San Francisco", - "city_id": "c2FuIGZyYW5jaXNjb2NhbGlmb3JuaWF1bml0ZWQgc3RhdGVz" - }, - "block_added": 395575, - "block": 397023, - "address": "11cxkqa2PjpJ9YgY9qK3Njn4uSFu6dyK9xV8XE4ahFSqN1YN2db" - }, - { - "lng": 5.5794356104890825, - "lat": 45.13127467725158, - "status": { - "online": "online", - "height": 391690 - }, - "reward_scale": 0.25, - "owner": "13wv9QctMFJqQpvbZq8GuwaKc7YxUuvMw6WQD5JouvB3L2kuGwT", - "nonce": 1, - "name": "keen-metal-halibut", - "location": "8c1f933292185ff", - "geocode": { - "short_street": "Chemin de la Colline", - "short_state": "Auvergne-Rhône-Alpes", - "short_country": "FR", - "short_city": "Lans-en-Vercors", - "long_street": "Chemin de la Colline", - "long_state": "Auvergne-Rhône-Alpes", - "long_country": "France", - "long_city": "Lans-en-Vercors", - "city_id": "bGFucy1lbi12ZXJjb3JzYXV2ZXJnbmUtcmjDtG5lLWFscGVzZnJhbmNl" - }, - "block_added": 395500, - "block": 397023, - "address": "1122FqmqcH5uk8J1BSAStYK436GAR9CuwDVuBT2gRduofm9Vh7Lq" - }, - - { - "lng": -81.77662146961255, - "lat": 24.55934059588725, - "status": { - "online": "online", - "height": 396910 - }, - "reward_scale": 0.2593841552734375, - "owner": "131uuuyiYrPczy1aCKDBhvxYTG7ZMNfnZnKgemesd3CZEe3y6EU", - "nonce": 2, - "name": "nutty-daffodil-ferret", - "location": "8c4416a324933ff", - "geocode": { - "short_street": "Seidenberg Ave", - "short_state": "FL", - "short_country": "US", - "short_city": "Key West", - "long_street": "Seidenberg Avenue", - "long_state": "Florida", - "long_country": "United States", - "long_city": "Key West", - "city_id": "a2V5IHdlc3RmbG9yaWRhdW5pdGVkIHN0YXRlcw" - }, - "block_added": 377240, - "block": 397023, - "address": "117ucorijFWJ662HH1q6aYz78Y5q2FfF9DMyx4Ka73vBqsEuuMG" - } - ], - "cursor": "eyJoZWlnaHQiOjM5NzAyMywiYmVmb3JlX2Jsb2NrIjozNzcyNDAsImJlZm9yZV9hZGRyZXNzIjoiMTE3dWNvcmlqRldKNjYySEgxcTZhWXo3OFk1cTJGZkY5RE15eDRLYTczdkJxc0V1dU1HIn0" -} -``` - - - - ---- - -## Hotspot for Address - -``` -GET https://api.helium.io/v1/hotspots/:address -``` - -Fetch a hotspot with a given address. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | --------------------------- | -| address (optional) | _string_ | Address of hotspot to fetch | - - - - -200: OK - -```json -{ - "data": { - "address": "11cxkqa2PjpJ9YgY9qK3Njn4uSFu6dyK9xV8XE4ahFSqN1YN2db", - "block": 397024, - "block_added": 395575, - "geocode": { - "long_city": "San Francisco", - "long_country": "United States", - "long_state": "California", - "long_street": "Bryant Street", - "short_city": "SF", - "short_country": "US", - "short_state": "CA", - "short_street": "Bryant St", - "city_id": "c2FuIGZyYW5jaXNjb2NhbGlmb3JuaWF1bml0ZWQgc3RhdGVz" - }, - "lat": 37.784056617819544, - "lng": -122.39186733984285, - "location": "8c283082a1a19ff", - "name": "tall-plum-griffin", - "nonce": 1, - "owner": "14e35CChhsnuHJxjjzYAxsHKBKDgjUop4GuD8esB7gE2VDoyPXT", - "reward_scale": 0.25, - "status": { - "height": 394065, - "online": "offline" - } - } -} -``` - - - - ---- - -## Hotspots for Name - -``` -GET https://api.helium.io/v1/hotspots/name/:name -``` - -Fetch the hotspots which map to the given 3-word animal name. The name must be -all lower-case with dashes between the words, e.g. tall-plum-griffin. Because -of collisions in the Angry Purple Tiger algorithm, the given name might map to -**more than one hotspot**. - - - - -_Path Parameters_ - -| param | Type | Note | -| ----- | -------- | --------------------------- | -| name | _string_ | Name of hotspot(s) to fetch | - - - - -200: OK - -```json -{ - "data": [ - { - "address": "11cxkqa2PjpJ9YgY9qK3Njn4uSFu6dyK9xV8XE4ahFSqN1YN2db", - "block": 397024, - "block_added": 395575, - "geocode": { - "long_city": "San Francisco", - "long_country": "United States", - "long_state": "California", - "long_street": "Bryant Street", - "short_city": "SF", - "short_country": "US", - "short_state": "CA", - "short_street": "Bryant St", - "city_id": "c2FuIGZyYW5jaXNjb2NhbGlmb3JuaWF1bml0ZWQgc3RhdGVz" - }, - "lat": 37.784056617819544, - "lng": -122.39186733984285, - "location": "8c283082a1a19ff", - "name": "tall-plum-griffin", - "nonce": 1, - "owner": "14e35CChhsnuHJxjjzYAxsHKBKDgjUop4GuD8esB7gE2VDoyPXT", - "reward_scale": 0.25, - "status": { - "height": 394065, - "online": "offline" - } - } - ] -} -``` - - - - ---- - -## Hotspot Name Search - -``` -GET https://api.helium.io/v1/hotspots/name?search= -``` - -Fetch the hotspots which match a search term in the given `search` term query -parameter. The search parameter needs to be at least one character, with 3 or -more recommended. - - - - -_Query Parameters_ - -| param | Type | Note | -| ------ | -------- | ------------------------------- | -| search | _string_ | The name fragment to search for | - - - - -200: OK - -Search results for `search=clever-gray` - -```json -{ [74/4462] - "data": [ - { - "address": "112sBjb6sHaEf9MbCaDEH3k4yFM4e2rHZxGTzpV9RTtfDqxX9CCC", - "block": 768022, - "block_added": 750477, - "geocode": { - "city_id": "c2FuIGZyYW5jaXNjb2NhbGlmb3JuaWF1bml0ZWQgc3RhdGVz", - "long_city": "San Francisco", - "long_country": "United States", - "long_state": "California", - "long_street": "Cerritos Avenue", - "short_city": "SF", - "short_country": "US", - "short_state": "CA", - "short_street": "Cerritos Ave" - }, - "last_change_block": 750502, - "last_poc_challenge": null, - "lat": 37.72614653945264, - "lng": -122.47020118178871, - "location": "8c28309510699ff", - "name": "clever-grape-boa", - "nonce": 1, - "owner": "13NrTQR32bCjPejvzLwKmBjeieZykBVbmoR7FKqKHFjVJocecak", - "reward_scale": 1.0, - "status": { - "height": 745390, - "listen_addrs": null, - "online": "offline" - }, - "timestamp_added": "2021-03-08T16:24:54.000000Z" - }, - { - "address": "11ZbFBWirta2WCW14SDoTbFpXa8C6ZYoN4QuWL6dQDLiHajmHce", - "block": 768022, - "block_added": 742230, - "geocode": { - "city_id": "cGhpbGFkZWxwaGlhcGVubnN5bHZhbmlhdW5pdGVkIHN0YXRlcw", - "long_city": "Philadelphia", - "long_country": "United States", - "long_state": "Pennsylvania", - "long_street": "City Avenue", - "short_city": "Philadelphia", - "short_country": "US", - "short_state": "PA", - "short_street": "City Ave" - }, - "last_change_block": 742262, - "last_poc_challenge": null, - "lat": 40.00814845396687, - "lng": -75.20963332539121, - "location": "8c2a1348e5a4bff", - "name": "clever-graphite-hyena", - "nonce": 1, - "owner": "148f6FrFVro4Yoc9FBoWRPVrEMusDGWZew2zgeSWBybK2CHmNKW", - "reward_scale": 1.0, [18/4462] - "status": { - "height": 738310, - "listen_addrs": null, - "online": "offline" - }, - "timestamp_added": "2021-03-01T19:58:41.000000Z" - }, - { - "address": "11QpxYxhrhG3E2FbuJSV5mgQW6cyp2rXMrjYoBN9y29e2XegDWY", - "block": 768022, - "block_added": 143709, - "geocode": { - "city_id": "bGl2ZXJtb3JlY2FsaWZvcm5pYXVuaXRlZCBzdGF0ZXM", - "long_city": "Livermore", - "long_country": "United States", - "long_state": "California", - "long_street": "Glasgow Circle", - "short_city": "Livermore", - "short_country": "US", - "short_state": "CA", - "short_street": "Glasgow Cir" - }, - "last_change_block": 767734, - "last_poc_challenge": 767734, - "lat": 37.69373462966, - "lng": -121.75659980161144, - "location": "8c2830d36ba49ff", - "name": "clever-green-beetle", - "nonce": 4, - "owner": "13auTVmhWAhV6MV6hQ9huecHhLZTXH1MbUnMTKEBtTFJVaC5bic", - "reward_scale": 0.5555572509765625, - "status": { - "height": 767999, - "listen_addrs": [ - "/p2p/112qupChNrC4UVv5dHztTrtp6UWH6ooa9WQCbmXFuLxDHow82CY3/p2p-circuit/p2p/11QpxYxhrhG3E2FbuJSV5mgQW6cyp2rXMrjYoBN9y29e2XegDWY" - ], - "online": "online" - }, - "timestamp_added": "2019-12-21T08:26:08.000000Z" - }, - { - "address": "112pCaom9T5B7bmK8p6CRhBtWrxM1DEM2p4gjh44azuwjCzex2oE", - "block": 768022, - "block_added": 553919, - "geocode": { - "city_id": "ZGVhcmJvcm4gaGVpZ2h0c21pY2hpZ2FudW5pdGVkIHN0YXRlcw", - "long_city": "Dearborn Heights", - "long_country": "United States", - "long_state": "Michigan", - "long_street": "Nightingale Street", - "short_city": "Dearborn Heights", - "short_country": "US", - "short_state": "MI", - "short_street": "Nightingale St" - }, - "last_change_block": 767950, - "last_poc_challenge": 767950, - "lat": 42.33796350854145, - "lng": -83.28504344820625, - "location": "8c2ab2cd14833ff", - "name": "clever-ginger-meerkat", - "nonce": 3, - "owner": "13NQcBoZyngE8FbjxJZ1bHE2m7SLQyMPSMDAL3MRAquzgGttZN1", - "reward_scale": 1.0, - "status": { - "height": 767963, - "listen_addrs": [ - "/p2p/11254xZhWECFDcvZLPJEj6YmaWvTeUL1yrWdbTEVcV34C83am7w9/p2p-circuit/p2p/112pCaom9T5B7bmK8p6CRhBtWrxM1DEM2p4gjh44azuwjCzex2oE" - ], - "online": "online" - }, - "timestamp_added": "2020-10-22T16:49:16.000000Z" - } - ] -} -``` - - - - ---- - -## Hotspot Location Distance Search - -``` -GET https://api.helium.io/v1/hotspots/location/distance -``` - -Fetch the hotspots which are within a given number of meters from the given `lat` and `lon` coordinates. This -route is paged using a `cursor`. - - - - -_Query Parameters_ - -| param | Type | Note | -| -------- | --------- | --------------------------------------------------- | -| lat | _float_ | Latitude of the location to search around | -| lon | _float_ | Longitude of the location to search around | -| distance | _integer_ | Distance (in meters) from location to search within | - - - - -200: OK - -Search results for `?lat=38.12129445739087&lon=-122.52885074963571&distance=1000` - -```json -{ - "data": [ - { - "lng": -122.52885074963571, - "lat": 38.12129445739087, - "timestamp_added": "1970-01-01T00:00:00.000000Z", - "status": { - "online": "online", - "listen_addrs": ["/ip4/76.102.181.228/tcp/44158"], - "height": 771115 - }, - "reward_scale": 0.5, - "owner": "13buBykFQf5VaQtv7mWj2PBY9Lq4i1DeXhg7C4Vbu3ppzqqNkTH", - "nonce": 0, - "name": "curly-berry-coyote", - "location": "8c2830aa2529dff", - "last_poc_challenge": 771113, - "last_change_block": 771113, - "geocode": { - "short_street": "Andale Ave", - "short_state": "CA", - "short_country": "US", - "short_city": "Novato", - "long_street": "Andale Avenue", - "long_state": "California", - "long_country": "United States", - "long_city": "Novato", - "city_id": "bm92YXRvY2FsaWZvcm5pYXVuaXRlZCBzdGF0ZXM" - }, - "block_added": 1, - "block": 771120, - "address": "112Z6fYnkQa8VAyMWHoaZJVzrxbWPoJV2NCfdZmaNoG1pYxWdGwD" - }, - { - "lng": -122.52885074963571, - "lat": 38.12129445739087, - "timestamp_added": "1970-01-01T00:00:00.000000Z", - "status": { - "online": "online", - "listen_addrs": ["/ip4/76.102.181.228/tcp/44160"], - "height": 768806 - }, - "reward_scale": 0.5, - "owner": "13buBykFQf5VaQtv7mWj2PBY9Lq4i1DeXhg7C4Vbu3ppzqqNkTH", - "nonce": 0, - "name": "immense-eggplant-stallion", - "location": "8c2830aa2529dff", - "last_poc_challenge": 768733, - "last_change_block": 771071, - "geocode": { - "short_street": "Andale Ave", - "short_state": "CA", - "short_country": "US", - "short_city": "Novato", - "long_street": "Andale Avenue", - "long_state": "California", - "long_country": "United States", - "long_city": "Novato", - "city_id": "bm92YXRvY2FsaWZvcm5pYXVuaXRlZCBzdGF0ZXM" - }, - "block_added": 1, - "block": 771120, - "address": "11VKaN7fEvDm6NaGhcZtNSU1KAQQmTSwuuJsYYEqzh8mSWkoEUd" - } - ] -} -``` - - - - -## Hotspot Location Box Search - -``` -GET https://api.helium.io/v1/hotspots/location/box -``` - -Fetch the hotspots which are within a given geographic boundary indicated by -it's south-wesetern and north-eastern co-ordinates. This route is paged using a -`cursor`. - - - - -_Query Parameters_ - -| param | Type | Note | -| ----- | ------- | ---------------------------------- | -| swlat | _float_ | Latitude of the south-west corner | -| swlon | _float_ | Longitude of the south-west corner | -| nelat | _float_ | Latitude of the north-east corner | -| nelon | _float_ | Longitude of the north-east corner | - - - - -200: OK - -Search results for `?swlat=38.0795392&swlon=-122.5671627&nelat=38.1588012&nelon=-122.5046937` - -```json -{ - "data": [ - { - "lng": -122.51688114452725, - "lat": 38.109947587584905, - "timestamp_added": "2019-08-02T00:13:25.000000Z", - "status": { - "online": "online", - "listen_addrs": ["/ip4/64.7.85.50/tcp/28762"], - "height": 769399 - }, - "reward_scale": 1, - "owner": "13fTdByCpUDRKuVh4VZcUWh7rdehrh4UfjMdFt17ew4h93nD86s", - "nonce": 9, - "name": "agreeable-walnut-weasel", - "location": "8c2830ab51653ff", - "last_poc_challenge": 750521, - "last_change_block": 750521, - "geocode": { - "short_street": "Lockton Ln", - "short_state": "CA", - "short_country": "US", - "short_city": "Novato", - "long_street": "Lockton Lane", - "long_state": "California", - "long_country": "United States", - "long_city": "Novato", - "city_id": "bm92YXRvY2FsaWZvcm5pYXVuaXRlZCBzdGF0ZXM" - }, - "block_added": 3805, - "block": 771120, - "address": "11tWRj2Qhnn177iVYm3KUmbPdMyhRfeqHqk9kCyiR7y57hdG9JA" - }, - { - "lng": -122.55193831997157, - "lat": 38.1204024903364, - "timestamp_added": "2019-08-01T15:44:31.000000Z", - "status": { - "online": "online", - "listen_addrs": ["/ip4/76.102.181.228/tcp/44159"], - "height": 771118 - }, - "reward_scale": 1, - "owner": "13buBykFQf5VaQtv7mWj2PBY9Lq4i1DeXhg7C4Vbu3ppzqqNkTH", - "nonce": 7, - "name": "magic-rainbow-wasp", - "location": "8c2830aa2a63dff", - "last_poc_challenge": 771079, - "last_change_block": 771079, - "geocode": { - "short_street": "Morning Star Ct", - "short_state": "CA", - "short_country": "US", - "short_city": "Novato", - "long_street": "Morning Star Court", - "long_state": "California", - "long_country": "United States", - "long_city": "Novato", - "city_id": "bm92YXRvY2FsaWZvcm5pYXVuaXRlZCBzdGF0ZXM" - }, - "block_added": 3301, - "block": 771120, - "address": "112aeWRZdyz61Y7EQeMbXwqERNMPnciDvsxyFmhz1UfA9hte4R4W" - }, - { - "lng": -122.52885074963571, - "lat": 38.12129445739087, - "timestamp_added": "1970-01-01T00:00:00.000000Z", - "status": { - "online": "online", - "listen_addrs": ["/ip4/76.102.181.228/tcp/44158"], - "height": 771115 - }, - "reward_scale": 0.5, - "owner": "13buBykFQf5VaQtv7mWj2PBY9Lq4i1DeXhg7C4Vbu3ppzqqNkTH", - "nonce": 0, - "name": "curly-berry-coyote", - "location": "8c2830aa2529dff", - "last_poc_challenge": 771113, - "last_change_block": 771113, - "geocode": { - "short_street": "Andale Ave", - "short_state": "CA", - "short_country": "US", - "short_city": "Novato", - "long_street": "Andale Avenue", - "long_state": "California", - "long_country": "United States", - "long_city": "Novato", - "city_id": "bm92YXRvY2FsaWZvcm5pYXVuaXRlZCBzdGF0ZXM" - }, - "block_added": 1, - "block": 771120, - "address": "112Z6fYnkQa8VAyMWHoaZJVzrxbWPoJV2NCfdZmaNoG1pYxWdGwD" - }, - { - "lng": -122.52885074963571, - "lat": 38.12129445739087, - "timestamp_added": "1970-01-01T00:00:00.000000Z", - "status": { - "online": "online", - "listen_addrs": ["/ip4/76.102.181.228/tcp/44160"], - "height": 768806 - }, - "reward_scale": 0.5, - "owner": "13buBykFQf5VaQtv7mWj2PBY9Lq4i1DeXhg7C4Vbu3ppzqqNkTH", - "nonce": 0, - "name": "immense-eggplant-stallion", - "location": "8c2830aa2529dff", - "last_poc_challenge": 768733, - "last_change_block": 771071, - "geocode": { - "short_street": "Andale Ave", - "short_state": "CA", - "short_country": "US", - "short_city": "Novato", - "long_street": "Andale Avenue", - "long_state": "California", - "long_country": "United States", - "long_city": "Novato", - "city_id": "bm92YXRvY2FsaWZvcm5pYXVuaXRlZCBzdGF0ZXM" - }, - "block_added": 1, - "block": 771120, - "address": "11VKaN7fEvDm6NaGhcZtNSU1KAQQmTSwuuJsYYEqzh8mSWkoEUd" - } - ] -} -``` - - - - ---- - -## Hotspots for H3 Index - -``` -GET https://api.helium.io/v1/hotspots/hex/:h3_index -``` - -Fetch the hotspots which are in the given h3 index. The supported h3 indices are -currently limited to resolution 8. - - - - -_Path Parameters_ - -| param | Type | Note | -| -------- | -------- | ---------------------------------- | -| h3_index | _string_ | The h3 index to fetch hotspots for | - - - - -Fetch all hotspots in h3 index: `882aa38c2bfffff` - -```json -{ - "data": [ - { - "lng": -77.90290276709354, - "lat": 40.80885497979477, - "timestamp_added": "2020-10-30T00:03:08.000000Z", - "status": { - "online": "offline", - "listen_addrs": null, - "height": 829767 - }, - "reward_scale": 1, - "owner": "14Cx6WkXKpaD3GFf9VkG8kLsYjQ325y4egFZKs2vJ2hB5Ftrg66", - "nonce": 3, - "name": "zesty-cinnamon-lobster", - "location": "8c2aa38c2a06dff", - "last_poc_challenge": 829703, - "last_change_block": 829807, - "geocode": { - "short_street": "N Atherton St", - "short_state": "PA", - "short_country": "US", - "short_city": "State College", - "long_street": "North Atherton Street", - "long_state": "Pennsylvania", - "long_country": "United States", - "long_city": "State College", - "city_id": "c3RhdGUgY29sbGVnZXBlbm5zeWx2YW5pYXVuaXRlZCBzdGF0ZXM" - }, - "gain": 12, - "elevation": 0, - "block_added": 565473, - "block": 842630, - "address": "1114BGcrdwhio7beaKEP49vp8sjrYAzsubonZV7nPrwoZxr4Ns4" - } - ] -} -``` - - - - ---- - -## Hotspot Activity - -``` -GET https://api.helium.io/v1/hotspots/:address/activity -``` - -:::caution -The `/activity` route will be deprecated on May 1, 2022 and will be replaced by [`/roles`, described below](#hotspot-roles) -::: - -Lists all blockchain transactions that the given Hotspot was involved in. This -route is paged using a `cursor`. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | -------------------------- | -| address (optional) | _string_ | B58 address of the hotspot | - -_Query Parameters_ - -| param | Type | Note | -| ----------------------- | -------- | ----------------------------------------- | -| cursor (optional) | _string_ | Cursor for page of results to fetch | -| filter_types (optional) | _string_ | Comma separated list of transaction types | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -This lists the activity for a Hotspot which only had two -transactions at the time of the request. - -```json -{ - "data": [ - { - "fee": 70000, - "gateway": "11cxkqa2PjpJ9YgY9qK3Njn4uSFu6dyK9xV8XE4ahFSqN1YN2db", - "hash": "DXciS1wFRf4CAfK_FPl-nE3l_YhisFibOmY2vXE0e3s", - "height": 395577, - "lat": 37.784056617819544, - "lng": -122.39186733984285, - "location": "8c283082a1a19ff", - "nonce": 1, - "owner": "14e35CChhsnuHJxjjzYAxsHKBKDgjUop4GuD8esB7gE2VDoyPXT", - "payer": "14fzfjFcHpDR1rTH8BNPvSi5dKBbgxaDnmsVPbCjuq9ENjpZbxh", - "staking_fee": 1000000, - "time": 1593622131, - "type": "assert_location_v1" - }, - { - "fee": 65000, - "gateway": "11cxkqa2PjpJ9YgY9qK3Njn4uSFu6dyK9xV8XE4ahFSqN1YN2db", - "hash": "VSO7aKH9uiCuWUNzb5rPddlq-m-kvaMeVeufUQisjbo", - "height": 395575, - "owner": "14e35CChhsnuHJxjjzYAxsHKBKDgjUop4GuD8esB7gE2VDoyPXT", - "payer": "14fzfjFcHpDR1rTH8BNPvSi5dKBbgxaDnmsVPbCjuq9ENjpZbxh", - "staking_fee": 4000000, - "time": 1593622029, - "type": "add_gateway_v1" - } - ] -} -``` - - - - ---- - -## Hotspot Roles - -``` -GET https://api.helium.io/v1/hotspots/:address/roles -``` - -Lists all blockchain transactions that the given Hotspot was involved in. This -route is paged using a `cursor`. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | -------------------------- | -| address (optional) | _string_ | B58 address of the hotspot | - -_Query Parameters_ - -| param | Type | Note | -| ----------------------- | -------- | ----------------------------------------- | -| cursor (optional) | _string_ | Cursor for page of results to fetch | -| filter_types (optional) | _string_ | Comma separated list of transaction types | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -This lists the activity for a Hotspot which only had two -transactions at the time of the request. - -```json -{ - "data": [ - { - "type": "assert_location_v2", - "time": 1644023217, - "role": "gateway", - "height": 1212339, - "hash": "DXciS1wFRf4CAfK_FPl-nE3l_YhisFibOmY2vXE0e3s" - }, - { - "type": "add_gateway_v1", - "time": 1644023156, - "role": "gateway", - "height": 1212338, - "hash": "VSO7aKH9uiCuWUNzb5rPddlq-m-kvaMeVeufUQisjbo" - } - ] -} -``` - - - - ---- - -## Hotspots Roles Counts - -``` -GET https://api.helium.io/v1/hotspots/:address/roles/count -``` - -Count transactions that indicate a Hotspot as a participant. - -The results are a map keyed by the given `filter_types` and the count of -transaction of that type. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | --------------------------------------- | -| address (required) | _string_ | Hotspot B58 address to fetch counts for | - -_Query Parameters_ - -| param | Type | Note | -| ------------ | -------- | ----------------------------------------- | -| filter_types | _string_ | Comma separated list of transaction types | - - - - -200: OK - -Fetch counts with `filter_types=assert_location_v1` for hotspot -`/11yTLDH2QbVLyRnBykzdLLP2j2DoAzjSp3obNrnxhUXpVdaYCZF` - -```json -{ - "data": { - "assert_location_v1": 2 - } -} -``` - - - - ---- - -## Hotspot Elections - -``` -GET https://api.helium.io/v1/hotspots/:address/elections -``` - -Lists the consensus group transactions that the given hotspot was involved in. -This route is paged using a `cursor`. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ------------------------------------- | -| address (required) | _number_ | B58 address of the hotspot to look up | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| cursor (optional) | _string_ | Cursor for the page to fetch | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -Fetches consensus groups that the hotspot with address -`11ztQpmCJbfPxv3RjsnvFTozbikpZ72dgmHTYwBQ2n2rABytnLE` was a part of - -```json -{ - "data": [ - { - "delay": 0, - "hash": "bGZCTdsBxM5m0IuVLcy0RvJf_OOkZ3C9C-TsvmuoQ50", - "height": 372552, - "members": [ - "112mRr9U2QkP5svLtTZjnGZ9qMwExoY8zz3Y5KyNYh6eKsvhsaxT", - "11edHhAK28WHFMZ6D6HTKnzer9jXNRq57ghzxv1ij7ERPMXRKnH", - "119hQxQAhkGT7dWMPXoPH4E811PzJB9PsgVjsTcUCDLPaCT9aNP", - "11gQQknec6vuRm8exJU4UG9pyT1e1NXr6yZV7sjPdCwvXaYCJBN", - "112VVqgL1LRxy6jhAM4AtNVa4qDcw1KmfGf4HjkjQAszo23EqYYY", - "112L7A2Xpkh7fjKjuaTfq3WgEn9nnAXg2M7BTWsR9dYvn4eopguz", - "11Qg88VmPkmv2oZggft8THbNhMKtnhUjBVPFJdy33q64GFu5JPN", - "11tWRj2Qhnn177iVYm3KUmbPdMyhRfeqHqk9kCyiR7y57hdG9JA", - "11ztQpmCJbfPxv3RjsnvFTozbikpZ72dgmHTYwBQ2n2rABytnLE", - "112HwmAx3XVW2NUGWa9Gk1yB2zkxXE6Bv4FXgop5Was5Msa7SUcH", - "1129waT8yUcphrcgYecpoXQtSGh9HS7NZfc6EfBHhQgYKJGibBHH", - "11wevymXjkG1zPE717qjb8hJQpUaJZMMp4kr3AegmTQpu1jhZ7e", - "112uxvcQWcdBCgYkCPZGZaX3Fmpe4Xrx21qBNFyfA7YyEqEY6rbm", - "1144JMF9rZsvUfW7x6koYbKbYpp86gL1xUzWohejeSZti5aPXo4", - "112NpqyB7Jq3SrmG8tbMwW6rwic8ftpkDFPsechdRzuLE59QSNmY", - "11sVuJATssrZChv2uLe3pXbLfzBkfeeLSYhfZn8kgiwAq4oJJ7D" - ], - "proof": "g1AAAAdBeJxN1Hc422sbB_D4EZqaPVachCb2KPISLaexSuz3xGlfSq2gRtrUqFipWrFqROkxYnVQRUvNcy4cRZrkoLRV0qjWKClqtJza8-gf0fev55_7uj7393nu-yGCQCCJQODa4YEEMQJEOM-LWgy11VO2wWOG3h6XuP9s6LI83lXRLtnaLUZ8r7JGYQGEZ9xppKfYt0mNqfvtaqfsLKROmLSmzQq4PHSrUdR7cvwTgAS1VY8HZUqkYHGsZFP3B5XwoaXWQuIN--dDCbP-roluSJ5JWlU_c92rEPZ1YWQLvlDqtiS-QE2tQGCvmpr6l05w5ngmEpShHz1Ains1dSXBcFsqb94qLgn_7MXcItGxdE3cySs6FUBIYIL_JhGUGkIzVPK3-cj-JvbZw21TwST51LRk59BAC57pFMzvwVjcHGUKpR8Lh939dP7s1jtRk-ZUJfQgmRE4ufjDTMnYHKmOW_6JLv-5PLyJUzUUJhyBFqGDpyMDLt3rO-kMICJ0gnFS572P__Si1lSw-aXZ41UWSxp9Dc9OusCebN_t55mCyzOfVOrSg3QyDKl0556cK4IvWDOim9CW6mWHRWX2_-VMzWX9NQNB7qfNFC5y7flj875uK0ef5vt9PSIpHVCvqQcQQcutr9NY4oN7OHdJVk-ZW7-d-2gtLK_qWz2lQ7rRS4lnFhwErFusg53BbBUZ6emL_IaWJ90Ezul2nfogJ-Dopur3w2yCygcrfMas01kC97iMEOh4lOQuC2TLiv19UHGjVOo1gDDK-ScxUmbf7TJRR_bGz4m6fcEnA96C3p57XKoePuFEWOOZNVqxJv13NbbWtrDYoYE-pVqS_PCXjwoZmM27Doy3KPbRDMHem-CyXNL41WyekovwK5A-5RxBboZ7Xl2s6RghXK7psKvqhY9tqfw2Kd4ZRtsJ1045202_2s8ItJKObMZe1JZpTOaZLWa3Q2bIDXk7JGzbSGUXSSFPZlCWQGT88uJNOZzqa_29ygplCSCcn6uAByhBhAnjGMsHzE6JpHk-y5iPYWGrtx1BmXYmVADhnmjXGrIsFUv5gptbM5n8TewWVcRj51hwgaNvpXZF1jaPlOw0z1VdY73kgyMV9-2G5Qlwzd7Y7fuvllZ6E99E6escxYSgfFvS-7sV-D4n6IyQoflaulOQ6x82Oyq_eUXxj1u0HcYsLVaf0GTG4kgraC2BcxOcn5GMVntR-irQq3OPs5_J4ZkG3Un6253dK9PxzyFFxNYKzFInrVPIPoJ2ofbm-xqztaOY2j00abHZt3S5nCoruKvm17mQ_baZALojOArnzZJeNAEQwMv7w8y1HRG00A38uKlwch0kW7bgpECo_jwZLdweZcwjd9b0S-gLal-euD96uE3d7Aw_VXEuslRhkvkLak2Mq8A-IoX0Cn4VvZJXYZIzPnHfrfFWs-xlrkeB7tAfkQTqh8T8JgBhsCvfvdfxDO5S9hjeCUGKzTAfjkCdvSl8Orpaq7SteB4ZI2e0pYyCSUYbB3RMu4oP8T1yOas49ufZenH3Vd2_fNaPSKji7QP9TRC0B1yPVVGx2IWKQG8nvWFgQ7lPKFroLB8AQfw6gTb0naa4C16-LlsoyBa6yqpICKJSXT09utoKq0t45FMp_RMG_BifTUllSXGJvF6vnNQaTm6rverGaPFTvQjCEWk2LziAoe9lV-Hj5YWHnTTqnbv-964OXuk0Jdp6xnMVByDEFJyK8pPRmKxpavaG7XmPHdg1ncb-CkVffzkrmeL6ah7pGpXgA4-5Ryixb44TSOi_cBV1p4_c2kBUIvow7cRr__tjNQvxLkuBcTAQ92-yHO2hIh2nnWtYQhFIC8ZaZNQRb_UCCMUVCb_Rdu-D-phML0_zIZ9Q46TAD_w3-7sb6xDHu8-a88y5OxRIobWSYVs-17Ya8myn5UFBUPlGfNTBXkJmZgFM5WhmJURoRGlWgbCq7qU4s0ddlWo2s38aiAXfeCM6muL_GyH-sKsy293iskprGaMym7TojiwHkoPXzfcD5kFex8w6HP0sjl6TEqJR6uWugYn6o1YJQHkiGk4ozP_qQOfQVcGd_tPJuUdXC2u0OugSOwMtVo9n5sM0m9QGxozxz6xJp2NzZzW8e1MAxEWasGXJf2yiN0lG4hupTXGD5qGvmWF-eCe_CvwGQ43MI69XlzXIYJpO2L_qQR6UTkqHVUk2QhN9TZflAE3oxTqb71U2KKvDEPWcogNtGnwlWwas9bLftVyv_IwjZ6xC76orW9JgjzDz_QuiGBiYtb9nN_hb2RTnjWGEyHfqyHsxj0Gx6Y-UC2yWrvwLgaEVxg", - "time": 1592112154, - "type": "consensus_group_v1" - }, - { - "delay": 0, - "hash": "8_UTNYLnSwLmYKI4n5OzDdjOIkYYtBREvBGthDGFMZ0", - "height": 372519, - "members": [ - "112mRr9U2QkP5svLtTZjnGZ9qMwExoY8zz3Y5KyNYh6eKsvhsaxT", - "11edHhAK28WHFMZ6D6HTKnzer9jXNRq57ghzxv1ij7ERPMXRKnH", - "119hQxQAhkGT7dWMPXoPH4E811PzJB9PsgVjsTcUCDLPaCT9aNP", - "11gQQknec6vuRm8exJU4UG9pyT1e1NXr6yZV7sjPdCwvXaYCJBN", - "112VVqgL1LRxy6jhAM4AtNVa4qDcw1KmfGf4HjkjQAszo23EqYYY", - "112L7A2Xpkh7fjKjuaTfq3WgEn9nnAXg2M7BTWsR9dYvn4eopguz", - "11eMofv6oYA3Y7LE4EZxJzwxzyjNHdedKSMNDP5y8pCuvnaMRQ6", - "11Qg88VmPkmv2oZggft8THbNhMKtnhUjBVPFJdy33q64GFu5JPN", - "11tWRj2Qhnn177iVYm3KUmbPdMyhRfeqHqk9kCyiR7y57hdG9JA", - "11ztQpmCJbfPxv3RjsnvFTozbikpZ72dgmHTYwBQ2n2rABytnLE", - "112hMyXUsTjZV68R5GpP1CMPeyF546zQjnfi9mdUiwBxNqbi2Lw5", - "112HwmAx3XVW2NUGWa9Gk1yB2zkxXE6Bv4FXgop5Was5Msa7SUcH", - "1129waT8yUcphrcgYecpoXQtSGh9HS7NZfc6EfBHhQgYKJGibBHH", - "11wevymXjkG1zPE717qjb8hJQpUaJZMMp4kr3AegmTQpu1jhZ7e", - "112Hs1kfxaER29V3C4sebiiJJao3SYB91TJ8oRgmqnG1JSavHj6n", - "11263kd7cLpvrfBDv8GLEF5kq37kjxHFYE6t8KLEpe8fnwdLoUEx" - ], - "proof": "g1AAAAdHeJxN1Hk8FGgYB3AGg8i4rQxGo4l1jWbaZnJXJPcRhjFGrCss64qhXFvIyFUYDLJuRhErd8mRotWKYVCKkdw3ww7LH8P-9f7z-7zf93mf53192NjYBD0BvoeLHNvF138gdttfr05FveHN9mks0lxsJ7VzG4eQrCl3xyp0N49S1-H6ADm2UVAcNuF9ZM2aAXbdRDoq8VbCTTnj5K9a53-1WW95ROYEQEJxn5MMV3qK6gNfQJKdZ0bBVOIaf3XDd2Iugb-xFCrNMmP9Fcl4R0XN0L8oUADcCVIjJDNnZtJB7YBxtbtP3U9jmRCZUyubTc95JWbjw3vNhTcn1W46YGA-AKiDOFvH9C5f6eGpyDTp2GGL9jxzG8LZmoOfXR7-FjDDkXrjCb6hSDZzwNGPZQZtKFwKwGdJLc-PMMDzZOwiaP5RXBFE31tHx538hTp7lDKEGxzu-L15ySrH9ZRr18s4Pj1T_30YvDSjudhRIlwBjPgYHIc5jGxtL2MKVegQy5V4VIWcupuHJRFKF6haR7q7tcxV_57NQm38OHCdCzu0Lu6HPMFS-XQrDcboae26OCjyI6HTc3LhBG1LAPKXXx2xTd0fPl2u_LFAuB0mnG7ILryz0tMasNVUcxj5ELFwcC5plUbWLRzopszZckcnJPYIxf8d3zSjt8P57RYLLd_7DkweMNQerq7d5tlMp04DKDZmKgL6a4JpB1cGu21OOvqAi2l31WXY6vz1vC74N4HyOsE30WY-dQ5TyZQUDKCQBwDR9ae-hABEwd4_AXyT6RnMsVuLn6otvEqbLiFFaLnmFJbZ6cFPfZNdj1JReLDLNYG6hXOYXttW68aNlpEcbhgthJwUGiOJAF3OXhgqmPcIliEW_UD97s-7h5nHDbVa64Ubg18cRkZqCR_qRO_CHPnKwp2DltgmwftAo43xsyZ9G-PFLTwfWWiygspbR66yFHBjxzZophpzO1rHbesCIz1Uz_RCZp2l1VHKAH4NADkVUd8d6xkUMoAcaCOuNWL7mvSlraD5nzAWSvGKT6KzABAJjZTu1IE7akS9KHRurZnpngQCGfY-t3_gfUHBGWBYKouMkEQz5OFSImFaHq1T9qBB9lKMxtmJBo3nIMcNtRaXrWMSHa8r9vni-jUpdUmfFw8VSPNJb0gNBg90r4rXJ92QDh4HQHRUhGOQYaI42mQLORjHsPYN9MP5R0J6PKXcn9HGfDVY5DNRhNBFDk2XHRF5EZDgk158alwFNa3RGLZNy3l2IcTrpJ0VoUmOQys-_3BLj_XWfl6Se2WR64sWJ0z8YINAiI_HRgAQeSOP6ecxfa4LhXORS2IEQH8dPmXDNwM2I3TfVjPPtYFlZh54bF3d4rLlGjonLjZlx4G6JovlvKL2SnlcktMCC3M7MRdFcOopte_x9yoR0jFqbSnyId-wqspJYgolYCY6J4sAgHBadc2tpwSUvBYY2lC2G6O1ZBgtMytjLc4T-4tzdCEIllmhdE-7L1-RscnQ1x_sfwelBEl_Wvoqk6i5k2_SOQwfOhmhUdmLGOD3vKmGSK0SLeD-Hn-CkaXVZQulxitW3mqWCqKHkU5KuGEvO9W9Fl32UjHKcTDosXrhnXfMK8P7UQlAfC47C705SJXjexngN825HN-5y3BSxpLBmKq-O8zpyLdyVeO-xz-RLP26qxHvZfXyEFmeHmuxjWycbHGv8-24mrlt293Zko5Dk6QqnGkQsP3coQRW2e5JcaSD8n9SDkqMEBQV-DNLXkKJZYq066XBNrs_sIPlzu4bfZL2Av_ce2_36d-Lq70x_4QiVI9NaDPAf4aJd2KalnuN2XAkzRTYITe9nw50S-TEIbNFgEfXj3qQTKvUaFIiVXn2LwT_q-6soM046LVVyrd0QsJamlnmbHosb9Z1KKopY_pGOW_bXn1h5m9_bkeFHjCjicRMqXPHc-sj09xpTb7_ISRfqFY2HDg7vuVtZ29fy1gt-7zWp7-ffDjZSX3iCbvmncocha5C_eiRVeSzJ27LVZqqZp7-WGP5dhZpHxrtAo4o8Mo1rovkjO6z9oanvyM01vhAfVy6jEAU0-MyMW2TMl8rDZYvuWefVq62ec1FvIwuD_tWhHMoNkDQN46m7FHecuB6tbZhKIaZlRMgaULHvT13Rp_0KvLpmdE7b78Is8wvdo8ndvw8_ihwTkTIeudHZbdCCah_Q_gm7HUe3aUtN__vrSj300GaaGxQq0GL7mMz0DuJXrwfSryfK3aAkKZ6xgkAMVfp1lfC8_2CAvL8QGUG6mltQgPp-TeTSbwm3H5NmNbb_wG5EB0Z", - "time": 1592110088, - "type": "consensus_group_v1" - }, - { - "delay": 5, - "hash": "MdGogde_J7Let1-D-FKR5LqAVWsC_dcTqI15ix8zPMY", - "height": 372486, - "members": [ - "112mRr9U2QkP5svLtTZjnGZ9qMwExoY8zz3Y5KyNYh6eKsvhsaxT", - "11edHhAK28WHFMZ6D6HTKnzer9jXNRq57ghzxv1ij7ERPMXRKnH", - "119hQxQAhkGT7dWMPXoPH4E811PzJB9PsgVjsTcUCDLPaCT9aNP", - "11gQQknec6vuRm8exJU4UG9pyT1e1NXr6yZV7sjPdCwvXaYCJBN", - "112VVqgL1LRxy6jhAM4AtNVa4qDcw1KmfGf4HjkjQAszo23EqYYY", - "112L7A2Xpkh7fjKjuaTfq3WgEn9nnAXg2M7BTWsR9dYvn4eopguz", - "11eMofv6oYA3Y7LE4EZxJzwxzyjNHdedKSMNDP5y8pCuvnaMRQ6", - "11Qg88VmPkmv2oZggft8THbNhMKtnhUjBVPFJdy33q64GFu5JPN", - "11tWRj2Qhnn177iVYm3KUmbPdMyhRfeqHqk9kCyiR7y57hdG9JA", - "11ADL7tz5fazKdFM21kdo6K11k7bpjun6JwY22N4tx6ab6mjrYx", - "112Pah4kwPwuVmCTmD1T5tiM2YZTQ4MmoFg68zxwyZsiYVtk8Bx3", - "11ztQpmCJbfPxv3RjsnvFTozbikpZ72dgmHTYwBQ2n2rABytnLE", - "11knHXfj4QiwxtSajc6D8FQzpDZFCEL4Q2cF74K7Yu8Lp3pCXXu", - "112dDDJ8HCWR9qGC3jsm1UBBaVy2LgLu8Pryd4vNvHXhv8LL4gMW", - "112hMyXUsTjZV68R5GpP1CMPeyF546zQjnfi9mdUiwBxNqbi2Lw5", - "112HwmAx3XVW2NUGWa9Gk1yB2zkxXE6Bv4FXgop5Was5Msa7SUcH" - ], - "proof": "g1AAAAdHeJxF1Hk81HkYB_Dxq9RE65YMdoaiiWEck9llUY5hQlnH5Jxicx-zaIxxM2Ijdsgx7mssxoQcLbs17hwTuTdCbRIh2lwjmp3-mPz1_efzer2_z_N8n68_CAQS9QYCeAcM5EiKc5eLLPEpuNIUczSObeuHzBwgtzb4K_m792BFmFZfUxikKQADJeR3riH3OHpSFZ4LtbFtybQPxJpPVclC07jw8-HG1AYACvTl18ogUNtV5e6gyfd4j8rRqKfek2rSFcDZrZYnjGt8s0Y12oBdDOdscUxNx54NKDFD5cc_vFZI0d8ttuyeRE4cmiUu1TdNt_8aPQ0zWPl3V9680GzZv5GLjXwtML1r84CjAkCv5BZN-CTbl6qhcMxs9p3TYef8HZdOzshcaEq1CkfP1vFND--ZPdTbEykDdrRTqUbK3vL1JoGzzDliBiLM5GfrxplDk6KtErUf1lqvdx2I0Q3qh-yMpMhMVyfjr0pQKp0R5BUAan10O-DeCu6Bm4XEnOCysTU9Gzhz4NFjcnFV1mam3YzBN7u9hKe68prRiPN39o7Nom-6Oi38t6PR6_qiiuZkgV0lfk2ZI814ZrMDEPnr9ojNspHU8V5lpzTWiEN-y4HE5fWNJhsddXMiLzKNdhQMCoZk0QlheS3JDR3DRooEOfwT37JfGCZzV0Vz-GidpLYY6oi--67EWQkR0ax-PDWpZiqj9YryznR-nRbR52vKDGkCQEm746NPnpf0K8uIYctpZqCuj680HOIUk5wv7feWppGhABSFoS6Ech5vFmmbQuek7t8RLmF3Rkvqv8oJyYMLSw9e5JOoDor2Hqvj45vYLnCef2uF_hqLxjp-hUizZUbN1BhtHdbZ4pkrqt6iqjx-ArGpY-pz63RfwkLz4n0NHZLc30nDF37iRZ6-wIAW_UvhSH2K5U81L21CTSF_eK6mELpn0uoT4OPn-Kh90BHX7tXd6Z7jd0_chhS__VmP8-KUQVOSks4Iudv71Sp_oFA3bCdLYFDrO0SyfQk43VDNcfLpPsIsuVpTxIltX05V5JkV8KOd0nWNPrr21aU3I0hcVSvW5n27y44GUmzZZsLIPN-0G5uCCf0ZHLRwdD25e4_jpuZcKHe9lh12sBDTB6t9GXBY6Hx3vt5_uHWC-Pi2TPmG-V7Ug2vygB50mrGSXUqEyCrxIv92N2hwwbQt0x22mM_grFE8TFMwMWqprGXn5nzRi3o0H00gwAvxLnB9UgtTCUC6QRvEFN5bW3ZOdSofY3m-Scz4VqiDi84rMueBxpJjmAh-9OJw5HJXG45Qdef2F7uUcFtdMs_MC4W0fNnvaD4i3AcnUgJ7mMaKi_TXW4wRxmPb9q1hOt8M3TyvG4zPhayv_MORWyl0XhNZSUuqgJr6GRp6Fs5PLR1uy3LqmB99BgcOeZlZ0e5x0RhenPJmcoh78mH7lNitG5LmAPSaltfmM-eCt1-cH-ukE2gWVpC4ja42Tcy9bLzLXIOsAN-ceE9XTEIr_ym5cVBa1vyu0TacS1fOOm7sIKZOIYb2Dh02N3MCEVL7235j1mYAa8pkcXlKRbbaUD-wuShM_sP8Myd_XiRdesLCt3L7Ouck9QxcoU2gRizbwUv1B5XAh5YHuj7ua3xUckUK7B2kOf_8QLXHg1MF-lHheTbNK9gps2t8gZUHs_m2LQGCWYIkLyNMjutDXxTdeSQA9Xdr4Zsh8I4aHEFNIV4FoDClXCPXRxuV2O8HrCSCqun03-333tV7HcsL-EzKcMZp8EkJ1qUM5a3eIQE5mOIX7Li8j9yF_ui90uG1j_3xoyRt9cPeprri9D4Npael34ZZDmiKYk7F31U80O2L6KaMZTpEs90BqIrbjdwmJsbeLsultfES5Kmu1rHPGE-SrOUn-IF8gSeHb7bscE8wXcQTa8mOWnUFtNo1oSC9PxZ71Lcv1-uKUwySDk2q9V0uZ5oxG59t0vUOeiuineOOwwUOyiu-1jFnqXXwfr8LcQ0DEWI9mLsB6_GXd62ov_3TgKUMovViLqFizcM1X_LNpcwEcC5GCd2WvWBRDX7yubksJ7B8J5bEPYhLTc2BnPv2bm_veJdHo9j22Gb17EcEPOGRX3CPhQKWalOq8vFdup4n71YF7xlp4vf8LB-RQ_w1C0GON4Z95IC5xEap0bEzvq65IXxzHnd_djfIi1JyI0X7e7_i2LzHSmT0PlFo1tEwLWp6_a9v4zxb0A4N00ct5chV2XOEbKK12qW5Zz-X5SSYxVx1L1KLAKCykVahSLTqvLrA3BFmovSCtHgOvjKNwV19C_41rY4u7Ps_lTspEA", - "time": 1592108023, - "type": "consensus_group_v1" - }, - { - "delay": 0, - "hash": "22qhsNH-Rw-5v8exId1KHgitBAwPf45SPMwhpyylyKI", - "height": 372448, - "members": [ - "112mRr9U2QkP5svLtTZjnGZ9qMwExoY8zz3Y5KyNYh6eKsvhsaxT", - "11edHhAK28WHFMZ6D6HTKnzer9jXNRq57ghzxv1ij7ERPMXRKnH", - "119hQxQAhkGT7dWMPXoPH4E811PzJB9PsgVjsTcUCDLPaCT9aNP", - "11gQQknec6vuRm8exJU4UG9pyT1e1NXr6yZV7sjPdCwvXaYCJBN", - "112VVqgL1LRxy6jhAM4AtNVa4qDcw1KmfGf4HjkjQAszo23EqYYY", - "112L7A2Xpkh7fjKjuaTfq3WgEn9nnAXg2M7BTWsR9dYvn4eopguz", - "11GSd5uyaRF3BkYWc7XGVDz8FzMRTxBi5bHy5ZWjg8jN9mv5gnY", - "112qdBK6mYPCnovBTcUSPSspo5dDF2GQL7TXHNKihoiqYnDwaizS", - "112wEDaaeDbUUCNtcjd8LCX6epXuRvSM9qQZW2KtyM2vDgT6GK5N", - "11eMofv6oYA3Y7LE4EZxJzwxzyjNHdedKSMNDP5y8pCuvnaMRQ6", - "11Qg88VmPkmv2oZggft8THbNhMKtnhUjBVPFJdy33q64GFu5JPN", - "112M6AiQEedVsuzfw5au1WFUgSPEiaVCU31Aa1xjCHFYX8WohEnC", - "11tWRj2Qhnn177iVYm3KUmbPdMyhRfeqHqk9kCyiR7y57hdG9JA", - "11ADL7tz5fazKdFM21kdo6K11k7bpjun6JwY22N4tx6ab6mjrYx", - "112Pah4kwPwuVmCTmD1T5tiM2YZTQ4MmoFg68zxwyZsiYVtk8Bx3", - "11ztQpmCJbfPxv3RjsnvFTozbikpZ72dgmHTYwBQ2n2rABytnLE" - ], - "proof": "g1AAAAdAeJxF1Hs4E2ocB_A1cj3llsSMjdMey23ouIUcJJeTldyblrnMMkTMIveVhNJIxhA5RW5JLqu0LGLuoyJ3Z045c4nYXHI5-mPrr_ef7_N83u_z-70vHgAASAcCg_cOKKBhbVesCiV7ozLaU7-GSqlckAw98eRLmw7P6pmRLMki5WfKFmEDhEi3W7VxTtmh26aaSp_vJmCvyvou1lGLoJ4kvP0kBcEBQhTTqibpzEfItQzUloh4-WCjZIaIMdXVheEw4d5SDtfnk66hQt6t8-sjbaK3xSJBRf86n9j4fMDiRYr6cVZ0a-DUvIC0_Xsbe_6LP7Sl-zDuxWhm5FyteTBWaesuF26-sjqgfAMIiTHIflIEi_sY6aikIBtve2jjWX8tNBzTxeshmizuFkzzyeQr8AI0Cm5GbKhSByIuQmplVDhOfzGGGLD99AD2DfLP1GnEKSAkDLv1EFkrnZFyDL9SzSNl9idq330xj2vSUPt-_aFapiwQCvgU693N4qhYKWpdlQje56_CmuYNbOmWWV8zXG4thGct8c1W7G9D7_LqjbU1bm7uHzf28faa-b6m-977cxnFy95hniCoCd2KyrTZtdN4Y8nxvvBYhETUCbzalHRn2HU4Ht4HVJwGQiLlC7WGXMwPgoe9sNXJck6FF1flDDVqqCtn_OjFz24z-KQc_U8yjPu-d58yVG3H4QMYp3yMGbdZ3LewzEwaIBroCGqK-a6KhnUpm7SU-oqL9H-yhBUbeaahYm7KO7OiKQGM13s1S8I9Zz8WdEqEsUHiuh5CIjpW3O76UhQoLL7cY_AWy4pvRqxqGIWjc0Hf5oY3lOcKLixIzd1JKYWcCjp5MqBgcmhWUNMNLF2-9NzzGm8HpMjL1Q9ugm_fDxiwKEEO5JAzo8TAeyt2eFQFbLR4YokWeysDnvq5vgDR_IByQDqda1rx2MLclk_uDL7Bd5D1elj9nP-CQuWVJP_yEqkgM0dktnk9RzFu-YKaqNcbvEf_eDh2TXrMezE-3B7XYtVx9sUctPbVlEAxBrh7NQdcsjeLc1obrRH2CqXFgY1-7GUTzWqckHsE1wv_UQ_EN78r6WwbacVEZOcnVOPiaL6jqZllWl2Xns5PltdU-OV3800o4F42qfzyLl3B52y9Yiekujb4SNjuNYIxIKlCt_FKt4QHEKJ1jir91uFsSi-CDIaPY4bI7uOmU2M2uLSgQ3Dac8JBvvlHC8lgk96yzE54J56Hp5WaLdApdFFHAuV8VezoU0vuL7Nk5Fni5MhZnNldztKsSIwNF0wLjMGsZJsL3zluYJu3AoSYN6I7arXkbEiMVaf_3qs27DM97dmCjxx7zSohFXMc0_jmoTl58cBQvcn-bc02340ygKlKfw4FG-6V9e7DDD0Peu5nyg5hu2dS8DqqmoSUmIpB_2ZftLWmGW29vZGF1g0rkohP6P82sRdJvX5TW8LFCqpsGOJsdh_h-z4XiuzbUfJtOphsErtulcNHa5FZrrbXsBHJas2Kb7No26BvrhLQsKeUQs3iXOirI4mCHbJc_I4KI2IkTW41tqvFn1nsZ6cSSJNypRG4BR26COgAEOLqdrZX2PuKKNsk1zrtTY6LxdEgRpTqE327e_sn2iv1WvnkbFayeO5pdeOXOTP25eJvftSXPAh5tJZA3N1OTE9_ADoqIAlsE2KpRtM6EPYV1tMLU4jHIi_99pmXBOiwJbj3EB2AEMiP80hVq2EYd_HrfHd25xFCl0u55fir5UFn6vHLNZHtfFJdaoNnNWthoRDd4GQzL3b4WNyy1NJKoZ9BobSQ24y_269xzpxcSyseGzXskCjSjst3dkjtdjmQQ3mY8rIuWjsDA-sAQkzfcZXBRL3OFia7IMi6QC5T4y25zjOdrXb630eLBsOyfNOTmIhRvv4QR3V8ES-c2H0-CJHVGU2rxavjMW0OUlVnfpllQSj9E_-0_N4j5AScCFkAIBVf5ll6f_FTYg9-sSfrRgEhPkE1qslel9CAubpYfZnmrz6G-q7ioqiyl1560x-YEa_5psvgEFSyKTx0RvjbrdbNjYtaFwqUPSq7o7Zn4juglWPBgucZ8iOtszXWIg0qM3KSPjEpnd3Tc6N3u5L-agKUFLRpILF3KyqB1Nkp6dNXwrx-LumUys10eWZfNsIdDV6ANjXLPheMs-aQgcwfQmaYdbnf5aSk7zPR91KeDpFpjrC1kfwafQJOME7AykB0igxjyv-IEtLa44FR37SGZIOhHSxN2KkYkSFM2PuFpvx8wj9iWGX2xncTXjHHAkIuatpj43eq-qg5XBck7fL_jZ4mIA", - "time": 1592105642, - "type": "consensus_group_v1" - } - ] -} -``` - - - - ---- - -## Currently Elected Hotspots - -``` -GET https://api.helium.io/v1/hotspots/elected -``` - -Returns the list of hotspots that are currently elected to the consensus group. - - - - -_No Parameters_ - - - - -200: OK - -```json -{ - "data": [ - { - "lng": -121.85991310272425, - "lat": 37.71966414273407, - "status": { - "online": "online", - "height": 488792 - }, - "score_update_height": 488777, - "score": 0.9963226318359375, - "owner": "14S7ZHRYtCCLExgh5qJphfB25dZHn3Pfy6pBkXHNgG7WvkWxazS", - "nonce": 1, - "name": "genuine-grape-mockingbird", - "location": "8c2830d2334adff", - "geocode": { - "short_street": "Cranbrook Pl", - "short_state": "CA", - "short_country": "US", - "short_city": "Dublin", - "long_street": "Cranbrook Place", - "long_state": "California", - "long_country": "United States", - "long_city": "Dublin", - "city_id": "ZHVibGluY2FsaWZvcm5pYXVuaXRlZCBzdGF0ZXM" - }, - "block_added": 450212, - "block": 488901, - "address": "11A45JqGJ8Jnx9YnuncFYLtBj6Vn8nhcQTc6uh549QzqqFMc4F3" - }, - { - "lng": -90.31235668207206, - "lat": 38.65572336414821, - "status": { - "online": "online", - "height": 488880 - }, - "score_update_height": 488872, - "score": 0.98834228515625, - "owner": "13FYzYCw1VMJzbFNAqNB7GDD2EWPB7uE82iHj33g5KrWyZAvpPm", - "nonce": 1, - "name": "polite-raspberry-newt", - "location": "8c2646260973bff", - "geocode": { - "short_street": "Washington Ave", - "short_state": "MO", - "short_country": "US", - "short_city": "University City", - "long_street": "Washington Avenue", - "long_state": "Missouri", - "long_country": "United States", - "long_city": "University City", - "city_id": "dW5pdmVyc2l0eSBjaXR5bWlzc291cml1bml0ZWQgc3RhdGVz" - }, - "block_added": 459422, - "block": 488901, - "address": "11UeLFyfHaoL8U2oWmtkDYxSt37ZSd432Jnaa2Uy4rLSTHP5AiG" - }, - { - "lng": -74.01032445204942, - "lat": 40.72147348660547, - "status": { - "online": "online", - "height": 488871 - }, - "score_update_height": 488768, - "score": 0.9685516357421875, - "owner": "13cAirRyuUzK9pWNHQoQnk6ikLYCxHyACQvV6RJMdt4ymyNpD1K", - "nonce": 1, - "name": "cool-tawny-chameleon", - "location": "8c2a1072c44bdff", - "geocode": { - "short_street": "Washington St", - "short_state": "NY", - "short_country": "US", - "short_city": "New York", - "long_street": "Washington Street", - "long_state": "New York", - "long_country": "United States", - "long_city": "New York", - "city_id": "bmV3IHlvcmtuZXcgeW9ya3VuaXRlZCBzdGF0ZXM" - }, - "block_added": 157683, - "block": 488901, - "address": "1124V1P146uMRpNvyuoRc8Uda1G54wqVBPuRzxzNuhEMFdNFkuaD" - }, - { - "lng": -84.14116349722525, - "lat": 34.099581418911974, - "status": { - "online": "online", - "height": 488880 - }, - "score_update_height": 488885, - "score": 0.9802703857421875, - "owner": "13Htq8exAPrLx35PhTJU4Tk2N7sGw1sdfLUtaCUcik7cZJQWQJJ", - "nonce": 1, - "name": "joyful-citron-walrus", - "location": "8c44c128eb151ff", - "geocode": { - "short_street": "Bradford Ln", - "short_state": "GA", - "short_country": "US", - "short_city": "Suwanee", - "long_street": "Bradford Lane", - "long_state": "Georgia", - "long_country": "United States", - "long_city": "Suwanee", - "city_id": "c3V3YW5lZWdlb3JnaWF1bml0ZWQgc3RhdGVz" - }, - "block_added": 100661, - "block": 488901, - "address": "11cpUwQf8DpRaJbKpDwr8rBAQTmsVp72X4LePQokUM8SZWfaPSp" - }, - { - "lng": -112.02337472794586, - "lat": 33.371050552126555, - "status": { - "online": "online", - "height": 488892 - }, - "score_update_height": 488877, - "score": 0.7867889404296875, - "owner": "13ZQv5D9xiAziFxYz5SffsZH3iTaKW7WH5LXeWvnq79usjwrwhN", - "nonce": 2, - "name": "old-opal-bison", - "location": "8c48e96934201ff", - "geocode": { - "short_street": "E South Mountain Ave", - "short_state": "AZ", - "short_country": "US", - "short_city": "Phoenix", - "long_street": "East South Mountain Avenue", - "long_state": "Arizona", - "long_country": "United States", - "long_city": "Phoenix", - "city_id": "cGhvZW5peGFyaXpvbmF1bml0ZWQgc3RhdGVz" - }, - "block_added": 102779, - "block": 488901, - "address": "112ucXwiiR6i6zgkEbfUHpFtggivB4qKx8EMjAG7ZSJmhTrRwTA1" - }, - { - "lng": -79.88736058394272, - "lat": 40.398811120042815, - "status": { - "online": "online", - "height": 488864 - }, - "score_update_height": 488893, - "score": 0.8791351318359375, - "owner": "14FUSqWYcWfQd7KQjrDSPXehsxvtJqxFf2q2QdxakbH4597KCz9", - "nonce": 1, - "name": "custom-khaki-bat", - "location": "8c2a8472a5287ff", - "geocode": { - "short_street": "Grant Ave", - "short_state": "PA", - "short_country": "US", - "short_city": "Homestead", - "long_street": "Grant Avenue", - "long_state": "Pennsylvania", - "long_country": "United States", - "long_city": "Homestead", - "city_id": "aG9tZXN0ZWFkcGVubnN5bHZhbmlhdW5pdGVkIHN0YXRlcw" - }, - "block_added": 161205, - "block": 488901, - "address": "11rraissynzdXzuvR9C9zsiPuZCMsJ33jMszpNqafKhCN8T1LtJ" - }, - { - "lng": -104.9819667654663, - "lat": 39.731924587349546, - "status": { - "online": "online", - "height": 488887 - }, - "score_update_height": 488873, - "score": 0.681549072265625, - "owner": "14mgCFAcGKtcu3L3ZFrqFNvcozeWFCNRvqWtwBvifa1R6EqmiaJ", - "nonce": 4, - "name": "shaggy-pistachio-rabbit", - "location": "8c268cda821b9ff", - "geocode": { - "short_street": "Logan St", - "short_state": "CO", - "short_country": "US", - "short_city": "Denver", - "long_street": "Logan Street", - "long_state": "Colorado", - "long_country": "United States", - "long_city": "Denver", - "city_id": "ZGVudmVyY29sb3JhZG91bml0ZWQgc3RhdGVz" - }, - "block_added": 126278, - "block": 488901, - "address": "11pbDpPD8xGQxzJYcEgUTjB2A299bZqd5MyP3CUiEqYLdiDe4CX" - }, - { - "lng": -118.43240806178659, - "lat": 34.06300352288759, - "status": { - "online": "online", - "height": 488881 - }, - "score_update_height": 488816, - "score": 0.7606201171875, - "owner": "14WKFHYag7LGCFgPBWQUHiM2Pvtie1fiykDSUGUecKQMwPgMNuA", - "nonce": 1, - "name": "jumpy-pear-toad", - "location": "8c29a199d4639ff", - "geocode": { - "short_street": "Wilshire Blvd", - "short_state": "CA", - "short_country": "US", - "short_city": "Los Angeles", - "long_street": "Wilshire Boulevard", - "long_state": "California", - "long_country": "United States", - "long_city": "Los Angeles", - "city_id": "bG9zIGFuZ2VsZXNjYWxpZm9ybmlhdW5pdGVkIHN0YXRlcw" - }, - "block_added": 465022, - "block": 488901, - "address": "11DDaP3k7aZFKr1C8B9gdyvChX79RHvGbydzRxwEVHEBFd3NdKK" - }, - { - "lng": -87.90081429668973, - "lat": 42.126905592654815, - "status": { - "online": "online", - "height": 488887 - }, - "score_update_height": 488879, - "score": 0.9979248046875, - "owner": "14EQRNNEmjK8bM97NEp5vM441u7mcTxrPjnVJ4dJ8SD2X9Qwseb", - "nonce": 5, - "name": "brilliant-teal-lemur", - "location": "8c2759adc50bdff", - "geocode": { - "short_street": "Mill Cir", - "short_state": "IL", - "short_country": "US", - "short_city": "Wheeling", - "long_street": "Mill Circle", - "long_state": "Illinois", - "long_country": "United States", - "long_city": "Wheeling", - "city_id": "d2hlZWxpbmdpbGxpbm9pc3VuaXRlZCBzdGF0ZXM" - }, - "block_added": 117340, - "block": 488901, - "address": "11UtixMtxVK73SrdDqXGTRsmJNfgiHipXUHmeF6Tjp4HETnSooz" - }, - { - "lng": -80.18078079776579, - "lat": 26.022409638823497, - "status": { - "online": "online", - "height": 488881 - }, - "score_update_height": 488858, - "score": 0.9946136474609375, - "owner": "14FvBfvRkERkW4RrR16i5NharQh8Ehjq77RowbpWbdxUiHAXUdi", - "nonce": 1, - "name": "zesty-peanut-nightingale", - "location": "8c44a10426003ff", - "geocode": { - "short_street": "Cleveland St", - "short_state": "FL", - "short_country": "US", - "short_city": "Hollywood", - "long_street": "Cleveland Street", - "long_state": "Florida", - "long_country": "United States", - "long_city": "Hollywood", - "city_id": "aG9sbHl3b29kZmxvcmlkYXVuaXRlZCBzdGF0ZXM" - }, - "block_added": 452874, - "block": 488901, - "address": "11VSRV6KZjdhBqabde1Piq4zkRVa1WRNEFAW22XMBfGtAHW7nV9" - }, - { - "lng": -121.97991888865624, - "lat": 37.31889190483364, - "status": { - "online": "online", - "height": 488862 - }, - "score_update_height": 488845, - "score": 0.9733428955078125, - "owner": "14NHk7ajkBnsBsSfZSmmHRD5SHb1UvWyLdwz5z9MCEDyjezFWXD", - "nonce": 1, - "name": "rapid-spruce-opossum", - "location": "8c28347048cd1ff", - "geocode": { - "short_street": "Norwalk Dr", - "short_state": "CA", - "short_country": "US", - "short_city": "San Jose", - "long_street": "Norwalk Drive", - "long_state": "California", - "long_country": "United States", - "long_city": "San Jose", - "city_id": "c2FuIGpvc2VjYWxpZm9ybmlhdW5pdGVkIHN0YXRlcw" - }, - "block_added": 147758, - "block": 488901, - "address": "112uRR5Vhz1kBW6c2Jbn4wDcokKibUi3NSjLwDGnBBHFuwNYuidN" - }, - { - "lng": -74.91795266574553, - "lat": 39.04734411775066, - "status": { - "online": "online", - "height": 488888 - }, - "score_update_height": 488850, - "score": 0.9910125732421875, - "owner": "13oBvk7EmZ5nMckycXRoBrR7ymXeFWn86gFhso14QnJWmB8HJQG", - "nonce": 3, - "name": "acidic-banana-pangolin", - "location": "8c2aad1441095ff", - "geocode": { - "short_street": "N 12th St", - "short_state": "NJ", - "short_country": "US", - "short_city": "Villas", - "long_street": "North 12th Street", - "long_state": "New Jersey", - "long_country": "United States", - "long_city": "Villas", - "city_id": "dmlsbGFzbmV3IGplcnNleXVuaXRlZCBzdGF0ZXM" - }, - "block_added": 448442, - "block": 488901, - "address": "11xF1ZrLGDtS1VrLU7zCwzMBu3UCHrLTzPvvT63qkcDvSnLgzYy" - }, - { - "lng": -118.3147080907313, - "lat": 34.024854598484325, - "status": { - "online": "online", - "height": 488892 - }, - "score_update_height": 488863, - "score": 0.9638671875, - "owner": "146j8VSV8gydkDVmUMeBbzwM5t879uzK5xop9Gx1Hs4pEACEszp", - "nonce": 4, - "name": "crazy-cedar-swift", - "location": "8c29a1d65c687ff", - "geocode": { - "short_street": "W 35th St", - "short_state": "CA", - "short_country": "US", - "short_city": "Los Angeles", - "long_street": "West 35th Street", - "long_state": "California", - "long_country": "United States", - "long_city": "Los Angeles", - "city_id": "bG9zIGFuZ2VsZXNjYWxpZm9ybmlhdW5pdGVkIHN0YXRlcw" - }, - "block_added": 338998, - "block": 488901, - "address": "112UBBKntnNF6LeqDTVfNmay9X3CKQSVW5iaSiFqFVfWpjCP3VKF" - }, - { - "lng": -122.42776937373586, - "lat": 37.66143533833919, - "status": { - "online": "online", - "height": 488891 - }, - "score_update_height": 488803, - "score": 0.985321044921875, - "owner": "14HvA6X2uKjSwsihJPnHHx2P4E1rbCTjSJuWkKAZzNpeUmfeRR2", - "nonce": 1, - "name": "rich-oily-whale", - "location": "8c2830972d329ff", - "geocode": { - "short_street": "Treeside Ct", - "short_state": "CA", - "short_country": "US", - "short_city": "South San Francisco", - "long_street": "Treeside Court", - "long_state": "California", - "long_country": "United States", - "long_city": "South San Francisco", - "city_id": "c291dGggc2FuIGZyYW5jaXNjb2NhbGlmb3JuaWF1bml0ZWQgc3RhdGVz" - }, - "block_added": 147503, - "block": 488901, - "address": "11oygj4b5zEagbSTP3ozTcYfBCHJwLX9uQKeUtS65howdQyteGJ" - }, - { - "lng": -75.27826551964438, - "lat": 40.08090500714629, - "status": { - "online": "online", - "height": 488816 - }, - "score_update_height": 488885, - "score": 0.991241455078125, - "owner": "13oBvk7EmZ5nMckycXRoBrR7ymXeFWn86gFhso14QnJWmB8HJQG", - "nonce": 4, - "name": "noisy-coal-beaver", - "location": "8c2aac9492d51ff", - "geocode": { - "short_street": "State Rte 3014", - "short_state": "PA", - "short_country": "US", - "short_city": "Lafayette Hill", - "long_street": "State Route 3014", - "long_state": "Pennsylvania", - "long_country": "United States", - "long_city": "Lafayette Hill", - "city_id": "bGFmYXlldHRlIGhpbGxwZW5uc3lsdmFuaWF1bml0ZWQgc3RhdGVz" - }, - "block_added": 448854, - "block": 488901, - "address": "11judjQVWMVBmsvBaQrtBZE831wVBo7LLdU4RKU1J7aVEqvztrx" - }, - { - "lng": -94.24977711202023, - "lat": 36.334097707199234, - "status": { - "online": "online", - "height": 488885 - }, - "score_update_height": 488783, - "score": 0.9935455322265625, - "owner": "13ickN56yPe38a3Vga161gp4nkSLckWvy7JChvnFr9osfP4AHGE", - "nonce": 1, - "name": "colossal-tangerine-reindeer", - "location": "8c26ed42c3915ff", - "geocode": { - "short_street": "SW Layton Rd", - "short_state": "AR", - "short_country": "US", - "short_city": "Bentonville", - "long_street": "Southwest Layton Road", - "long_state": "Arkansas", - "long_country": "United States", - "long_city": "Bentonville", - "city_id": "YmVudG9udmlsbGVhcmthbnNhc3VuaXRlZCBzdGF0ZXM" - }, - "block_added": 100810, - "block": 488901, - "address": "11Fi6ynL2ecRiTGoJGtLcWYPJXQv1aH4jxgbUTejZtu4rBtvUYZ" - } - ] -} -``` - - - - ---- - -## Hotspot Challenges - -``` -GET https://api.helium.io/v1/hotspots/:address/challenges -``` - -Lists the challenge (receipts) that the given hotspot was a challenger, challengee -or witness in. This route is paged using a `cursor`. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ------------------------------------- | -| address (optional) | _string_ | B58 address of the hotspot to look up | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| cursor (optional) | _string_ | Cursor for the page to fetch | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -Fetches the challenges that the hotspot with -`11DvZivbwHVRx4PbQwAd5w2DQEAcfSCRVzsW7gjRKQ86nCEJxHJ` was involved in. - -```json -{ - "data": [ - { - "type": "poc_receipts_v1", - "time": 1593711283, - "secret": "AGzlnZfDnyFn1F_aLLlgYErFiEIAtFH0qTVV68pAibwNBOaVB2Wvnn2ZeF_unWN55Ld_7VXemk64lPHnjsOG_1YLXDnP7RT4EGELD9xriv1AZbNCoMAfY-xPhRHlf3YVPms", - "path": [ - { - "witnesses": [ - { - "timestamp": 1593710795471113454, - "signal": -78, - "packet_hash": "5AN5Y3hcAVqZk_9KFetSbh-Z_qPGSeN-MFcH7neSyNM", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60c37aa5ff", - "gateway": "112QWbkXGkZ5dSkP2511A6aYGLyabeLRRnd7un22WhQNShfSbXNc" - }, - { - "timestamp": 1593710795456164133, - "signal": -77, - "packet_hash": "5AN5Y3hcAVqZk_9KFetSbh-Z_qPGSeN-MFcH7neSyNM", - "owner": "14cSUPEX76FLdhjgyT6Y6fBFYzeJdTjTMDDrHDnpeA8tSXmYrfq", - "location": "8c2ab60c46e4bff", - "gateway": "1112cKvndYQE1X3BxpRtuycvh36ehEuA4yqpiSzJqMGzrcQGUER" - }, - { - "timestamp": 1593710795454238307, - "signal": -94, - "packet_hash": "5AN5Y3hcAVqZk_9KFetSbh-Z_qPGSeN-MFcH7neSyNM", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60c170b9ff", - "gateway": "112LxPghCf7qXigCBRz74LTAKKvPtfYPjqPxbBpkie9E9BcrMDdc" - }, - { - "timestamp": 1593710795459449071, - "signal": -71, - "packet_hash": "5AN5Y3hcAVqZk_9KFetSbh-Z_qPGSeN-MFcH7neSyNM", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60c4b46dff", - "gateway": "11iYaU281c2Yjo2tvMxyeu1t95Cv7aLWuAoBYte51gZ7bKijzpj" - }, - { - "timestamp": 1593710795447538617, - "signal": -78, - "packet_hash": "5AN5Y3hcAVqZk_9KFetSbh-Z_qPGSeN-MFcH7neSyNM", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60c426e7ff", - "gateway": "1128s66jgeG9oxw33FV7Gw52wfNukPSKGupB2C7N3w1poid5LeRC" - } - ], - "receipt": { - "timestamp": 1593710793585261540, - "signal": 0, - "origin": "p2p", - "gateway": "11a44i7ry5WQ2ZuPTL5Hpx7RkQBHevNwiQkpU6sZgGxkYQ9K59o", - "data": "o9w" - }, - "geocode": { - "short_street": "Washington Ave", - "short_state": "MI", - "short_country": "US", - "short_city": "Port Huron", - "long_street": "Washington Avenue", - "long_state": "Michigan", - "long_country": "United States", - "long_city": "Port Huron" - }, - "challengee_owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "challengee_lon": -82.43305482993941, - "challengee_location": "8c2ab60e3c14bff", - "challengee_lat": 42.98855335905615, - "challengee": "11a44i7ry5WQ2ZuPTL5Hpx7RkQBHevNwiQkpU6sZgGxkYQ9K59o" - }, - { - "witnesses": [ - { - "timestamp": 1593710797368850439, - "signal": -95, - "packet_hash": "viJWqE5v96u8eKCRwTqm-bf2IlD2m87N3A0SKs7Yf4c", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60c37aa5ff", - "gateway": "112QWbkXGkZ5dSkP2511A6aYGLyabeLRRnd7un22WhQNShfSbXNc" - }, - { - "timestamp": 1593710797331238274, - "signal": -102, - "packet_hash": "viJWqE5v96u8eKCRwTqm-bf2IlD2m87N3A0SKs7Yf4c", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60c170b9ff", - "gateway": "112LxPghCf7qXigCBRz74LTAKKvPtfYPjqPxbBpkie9E9BcrMDdc" - }, - { - "timestamp": 1593710797335494047, - "signal": -93, - "packet_hash": "viJWqE5v96u8eKCRwTqm-bf2IlD2m87N3A0SKs7Yf4c", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60c4b46dff", - "gateway": "11iYaU281c2Yjo2tvMxyeu1t95Cv7aLWuAoBYte51gZ7bKijzpj" - }, - { - "timestamp": 1593710797325570974, - "signal": -99, - "packet_hash": "viJWqE5v96u8eKCRwTqm-bf2IlD2m87N3A0SKs7Yf4c", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60c426e7ff", - "gateway": "1128s66jgeG9oxw33FV7Gw52wfNukPSKGupB2C7N3w1poid5LeRC" - }, - { - "timestamp": 1593710797326235913, - "signal": -81, - "packet_hash": "viJWqE5v96u8eKCRwTqm-bf2IlD2m87N3A0SKs7Yf4c", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60e3c14bff", - "gateway": "11a44i7ry5WQ2ZuPTL5Hpx7RkQBHevNwiQkpU6sZgGxkYQ9K59o" - } - ], - "receipt": null, - "challengee_owner": "14cSUPEX76FLdhjgyT6Y6fBFYzeJdTjTMDDrHDnpeA8tSXmYrfq", - "challengee_lon": -82.4633534637547, - "challengee_location": "8c2ab60c024adff", - "challengee_lat": 42.94538752297601, - "challengee": "1123VfBqFkbBfLtMZiYMR2WoUew2tZWWdZcoVHGRG2KSq7pYtCpJ" - }, - { - "witnesses": [], - "receipt": null, - "challengee_owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "challengee_lon": -82.46035597096102, - "challengee_location": "8c2ab60c14219ff", - "challengee_lat": 42.941715433247545, - "challengee": "11DvZivbwHVRx4PbQwAd5w2DQEAcfSCRVzsW7gjRKQ86nCEJxHJ" - }, - { - "witnesses": [], - "receipt": null, - "challengee_owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "challengee_lon": -82.49094619308394, - "challengee_location": "8c2ab60c37aa5ff", - "challengee_lat": 42.93231949041608, - "challengee": "112QWbkXGkZ5dSkP2511A6aYGLyabeLRRnd7un22WhQNShfSbXNc" - } - ], - "onion_key_hash": "YM1oa4GmFBucT2g5NXHSN4CH907uuEo7waMnDIVG85k", - "height": 397058, - "hash": "tmWvGykf9sIjix1VxkYQwRjz1jzwuluGvVxDnMwWAZ4", - "fee": 0, - "challenger_owner": "14ZxnCvJq9wNgdFjLGatcYCjxdnT3RfzJ6dkVHNB9Wkwq5FHLj4", - "challenger_lon": -118.49635947992698, - "challenger_location": "8c29a19ab59c1ff", - "challenger_lat": 34.02420568554961, - "challenger": "118AgJni9yvsbX1nJF8ZRhXXtdPqEsSoshaZV9G9fyYz1Miwk2b" - }, - { - "type": "poc_receipts_v1", - "time": 1593709051, - "secret": "AA-QE2YLG0iIIc1KO4FA7zJSiGDYVTgxoi7bKtn7TcfABNru4ZZmh5Wo_j88yUGDXW7m_jmYc1nq8Rn8b3rmxkCBUVw31SW88BtNyWYdI4RqwHXWmtA-fqrq-Ksr0KvgA_I", - "path": [ - { - "witnesses": [ - { - "timestamp": 1593708823109097719, - "signal": -103, - "packet_hash": "bAxUoDw2Ypgv1qY6ZzFZBYun99Fa_ch4VPqKhdBZJD8", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60e38113ff", - "gateway": "112bM2Comn8VD9KXMYdKZYeSUKwRuJDWUJc2YbfKbDgHwArnt46a" - }, - { - "timestamp": 1593708823089884139, - "signal": -91, - "packet_hash": "bAxUoDw2Ypgv1qY6ZzFZBYun99Fa_ch4VPqKhdBZJD8", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60c389c5ff", - "gateway": "112rzgdhF48KqLKUUuJe6FKQX6yVaCte639JuuixtybHkezL2iAB" - }, - { - "timestamp": 1593708823101331551, - "signal": -99, - "packet_hash": "bAxUoDw2Ypgv1qY6ZzFZBYun99Fa_ch4VPqKhdBZJD8", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60c170b9ff", - "gateway": "112LxPghCf7qXigCBRz74LTAKKvPtfYPjqPxbBpkie9E9BcrMDdc" - }, - { - "timestamp": 1593708823100783822, - "signal": -91, - "packet_hash": "bAxUoDw2Ypgv1qY6ZzFZBYun99Fa_ch4VPqKhdBZJD8", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60c58341ff", - "gateway": "112BgzGtWwcCsL98Xpcz6p5bJeaS1KrcevDeYnrZSKDzqgBngW1a" - }, - { - "timestamp": 1593708823104408242, - "signal": -99, - "packet_hash": "bAxUoDw2Ypgv1qY6ZzFZBYun99Fa_ch4VPqKhdBZJD8", - "owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "location": "8c2ab60e318e7ff", - "gateway": "119td1MLCtGEAjnGJjMXTh6dcyq3FwW2gxoU9Ev5jrmE1f6aZQh" - } - ], - "receipt": { - "timestamp": 1593708821274903421, - "signal": 0, - "origin": "p2p", - "gateway": "112mBp6av2P1Ko7aXQZSSBiZLPxi9dP2YL1E1M8ysBx9MbKPR4FJ", - "data": "zw0" - }, - "geocode": { - "short_street": "Military St", - "short_state": "MI", - "short_country": "US", - "short_city": "Port Huron", - "long_street": "Military Street", - "long_state": "Michigan", - "long_country": "United States", - "long_city": "Port Huron" - }, - "challengee_owner": "14cSUPEX76FLdhjgyT6Y6fBFYzeJdTjTMDDrHDnpeA8tSXmYrfq", - "challengee_lon": -82.42495037863101, - "challengee_location": "8c2ab60c5b05bff", - "challengee_lat": 42.961154068414594, - "challengee": "112mBp6av2P1Ko7aXQZSSBiZLPxi9dP2YL1E1M8ysBx9MbKPR4FJ" - }, - { - "witnesses": [], - "receipt": null, - "challengee_owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "challengee_lon": -82.46035597096102, - "challengee_location": "8c2ab60c14219ff", - "challengee_lat": 42.941715433247545, - "challengee": "11DvZivbwHVRx4PbQwAd5w2DQEAcfSCRVzsW7gjRKQ86nCEJxHJ" - }, - { - "witnesses": [], - "receipt": null, - "challengee_owner": "13gXUZcSK6RBAByDQmETVNgqXBQcSi7agTe1gN7mWevVJSY6qsp", - "challengee_lon": -82.45085880023731, - "challengee_location": "8c2ab60c426e7ff", - "challengee_lat": 42.9667313386322, - "challengee": "1128s66jgeG9oxw33FV7Gw52wfNukPSKGupB2C7N3w1poid5LeRC" - } - ], - "onion_key_hash": "py6G-BruPSyZQaTAoakOtOlHH5R7CVA_Ttn3ALt6j90", - "height": 397017, - "hash": "azI_l34BanrX73rYT7E7rKbqzEK_NqoKWckPRQUrvMo", - "fee": 0, - "challenger_owner": "13NjZfyLXDWks8mhgrwN7Mw9tN2Fm1qJ7XG6LVTqvdUHgCRYz2f", - "challenger_lon": -73.98415801053285, - "challenger_location": "8c2a100d225ebff", - "challenger_lat": 40.731030047462795, - "challenger": "11iaWmYt7ixwXqbWkCaYf5b9tS24GNy7Fq3af1MSNkfGGvKVPX5" - } - ], - "cursor": "eyJ0eXBlcyI6InBvY19yZWNlaXB0c192MSIsImJsb2NrIjozOTcwMDAsImFuY2hvcl9ibG9jayI6Mzk3MDAwfQ" -} -``` - - - - ---- - -## Rewards for a Hotspot - -``` -GET https://api.helium.io/v1/hotspots/:address/rewards -``` - -Returns rewards for a given hotspot per reward block the hotspot is in, for a -given timeframe. Timestamps are given in ISO 8601 format. The block that -contains the `max_time` timestamp is **excluded** from the result. - -The result will be a list of rewards between `min_time` and `max_time` both -given in UTC. Both default to "now" which means that at least one of the two -parameters is required. - -The result includes a `type` field which is the type of activity that generated -the reward. - -This route is paged using a `cursor`. - -:::info -For older reward results, if the `type` is `null` the amount is a total for that -hotspot in the given block. -::: - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | -------------------------- | -| address (required) | _string_ | B58 address of the hotspot | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | -------------------------------------- | -| cursor (optional) | _string_ | Cursor for page of rewards to fetch | -| max_time (optional) | _string_ | Last timestamp to include rewards for | -| min_time (required) | _string_ | First timestamp to include rewards for | - - - - -200: OK - -Rewards for a hotspot with time range: `max_time=2020-08-29&min_time=2020-08-27` - -```json -{ - "data": [ - { - "account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM", - "amount": 7885016, - "block": 470788, - "gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88", - "hash": "DTU1GGfR0eU15hv6KiV_bg6FOJXfUWz4TjIq1H7TGy4", - "timestamp": "2020-08-28T01:29:46.000000Z" - }, - { - "account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM", - "amount": 3612069, - "block": 470753, - "gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88", - "hash": "l3EQR6AJ6R1qE1meHyafDnNF8vJ-X-rH1pujxQRTds4", - "timestamp": "2020-08-28T00:50:44.000000Z" - }, - { - "account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM", - "amount": 8623955, - "block": 470509, - "gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88", - "hash": "5fQJY9MprH9b3IstVU1SdfBteUWoF_sdsVuiARPBtTY", - "timestamp": "2020-08-27T19:01:48.000000Z" - }, - { - "account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM", - "amount": 4009855, - "block": 470475, - "gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88", - "hash": "0M0fudEmzW9dmAsO3dcWT286tTL6wTX9sllXtsyz-0Q", - "timestamp": "2020-08-27T18:15:17.000000Z" - } - ] -} -``` - - - - ---- - -## Rewards in a Rewards Block for a Hotspot - -``` -GET https://api.helium.io/v1/hotspots/:address/rewards/:block -``` - -Returns rewards for a given hotspot for a given block. - -The result includes a `type` field which is the type of activity that generated -the reward. - -This route is paged using a `cursor`. - -:::info -For older reward results, if the `type` is `null` the amount is a total for that -hotspot in the given block. -::: - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | -------------------------- | -| address (required) | _string_ | B58 address of the hotspot | - - - - -200: OK - -Rewards for a hotspot in block `470788` - -```json -{ - "data": [ - { - "type": null, - "timestamp": "2020-08-28T01:29:46.000000Z", - "hash": "DTU1GGfR0eU15hv6KiV_bg6FOJXfUWz4TjIq1H7TGy4", - "gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88", - "block": 470788, - "amount": 7885016, - "account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM" - } - ] -} -``` - - - - ---- - -## Reward Total for a Hotspot - -``` -GET https://api.helium.io/v1/hotspots/:address/rewards/sum -``` - -Returns the total rewards earned for a given hotspot over a given time range. -Timestamps are given in ISO 8601 format. The block that includes the `max_time` -timestamp is **excluded** from the result. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | -------------------------- | -| address (required) | _string_ | B58 address of the hotspot | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | -------------------------------------- | -| max_time (required) | _string_ | Last timestamp to include rewards for | -| min_time (required) | _string_ | First timestamp to include rewards for | - - - - -200: OK - -```json -{ - "data": { - "max_time": "2020-08-29T00:00:00Z", - "min_time": "2020-08-27T00:00:00Z", - "sum": "164942208" - } -} -``` - - - - ---- - -## Witnesses for a Hotspot - -``` -GET https://api.helium.io/v1/hotspots/:address/witnesses -``` - -Retrieves the list of witnesses for a given hotspot over about the last 5 days of blocks. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ------------------------------------ | -| address (required) | _string_ | B58 address for a hotspot to look up | - - - - -200: OK - -```json -{ - "data": [ - { - "lng": -84.38947964027781, - "lat": 33.77442909128778, - "timestamp_added": "2021-06-24T22:12:07.000000Z", - "status": { - "online": "online", - "listen_addrs": [ - "/p2p/11PhkxBRa6SXjKTj32RdDhbU9jwPNvmL1rgPScfT8VwHJWTkmG6/p2p-circuit/p2p/112vrDrzMZjE8NkxgUuLWSrfXuQFA3fDhaNEca7FPmyEV4SwPJEk" - ], - "height": 900645 - }, - "reward_scale": 1.0, - "owner": "14ZDTJZE41rQJPxrSHgp3UKuyZnB1KZuE3pZgMAhJraKfEF6X7D", - "nonce": 2, - "name": "merry-blood-otter", - "mode": "full", - "location_hex": "8844c1a8ebfffff", - "location": "8c44c1a8eadebff", - "last_poc_challenge": 900303, - "last_change_block": 900738, - "geocode": { - "short_street": "Spring St NW", - "short_state": "GA", - "short_country": "US", - "short_city": "Atlanta", - "long_street": "Spring Street Northwest", - "long_state": "Georgia", - "long_country": "United States", - "long_city": "Atlanta", - "city_id": "YXRsYW50YWdlb3JnaWF1bml0ZWQgc3RhdGVz" - }, - "gain": 23, - "elevation": 50, - "block_added": 895576, - "block": 900768, - "address": "112vrDrzMZjE8NkxgUuLWSrfXuQFA3fDhaNEca7FPmyEV4SwPJEk" - }, - { - "lng": -84.41078918647065, - "lat": 33.78627614557136, - "timestamp_added": "2021-06-22T15:33:09.000000Z", - "status": { - "online": "online", - "listen_addrs": [ - "/p2p/113hRKavKYh8oRg1qTPWyB9a24tVrSRLP67jUbRutm2AcHC4bAj/p2p-circuit/p2p/11BXSMm2PnVEnRUvKhjfoF3bQS1r45x8SynmXkBpR2uW18LDfeG" - ], - "height": 900645 - }, - "reward_scale": 1.0, - "owner": "13CsDkkHCroh7EFKjEkT74JmC7qkr4PuJn4jybqShBzYYrR4p7B", - "nonce": 1, - "name": "fun-hazel-gorilla", - "mode": "full", - "location_hex": "8844c1a88bfffff", - "location": "8c44c1a88a2c9ff", - "last_poc_challenge": 900738, - "last_change_block": 900763, - "geocode": { - "short_street": "14th St NW", - "short_state": "GA", - "short_country": "US", - "short_city": "Atlanta", - "long_street": "14th Street Northwest", - "long_state": "Georgia", - "long_country": "United States", - "long_city": "Atlanta", - "city_id": "YXRsYW50YWdlb3JnaWF1bml0ZWQgc3RhdGVz" - }, - "gain": 12, - "elevation": 0, - "block_added": 892710, - "block": 900768, - "address": "11BXSMm2PnVEnRUvKhjfoF3bQS1r45x8SynmXkBpR2uW18LDfeG" - } - ] -} -``` - - - - -## Witnessed for a Hotspot - -``` -GET https://api.helium.io/v1/hotspots/:address/witnessed -``` - -Retrieves the list of hotspots the given hotspot witnessed over the last 5 days. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ------------------------------------ | -| address (required) | _string_ | B58 address for a hotspot to look up | - - - - -Shows the hotspots that hotspot -`11sYnfeGAbFzDhXJ9NujYY2v2CnrcXPrewiF4iRN8upMs3HYUN2` witnessed - -200: OK - -```json -{ - "data": [ - { - "address": "112ZUpjfpGjCgoHjF5d2AUVznDYSFBzZcupdcZ5AivXkS2CNkKAG", - "block": 943086, - "block_added": 909051, - "elevation": 35, - "gain": 58, - "geocode": { - "city_id": "amFiYWwgbHVibmFubGViYW5vbg", - "long_city": null, - "long_country": "Lebanon", - "long_state": "Jabal Lubnan", - "long_street": "قماطية", - "short_city": null, - "short_country": "LB", - "short_state": "Jabal Lubnan", - "short_street": "قماطية" - }, - "last_change_block": 943072, - "last_poc_challenge": 942763, - "lat": 33.79955623248546, - "lng": 35.58377688261546, - "location": "8c2da24de12c7ff", - "location_hex": "882da24de1fffff", - "mode": "full", - "name": "handsome-satin-bat", - "nonce": 1, - "owner": "13VKSpg4fW4EbroEAEe5H7JsWM5sUBAvcQHiJWgPx2ztci5HHFg", - "payer": "13ENbEQPAvytjLnqavnbSAzurhGoCSNkGECMx7eHHDAfEaDirdY", - "reward_scale": 1.0, - "status": { - "height": 942913, - "listen_addrs": ["/ip4/185.187.130.9/tcp/44158"], - "online": "online", - "timestamp": "2021-07-29T08:27:35.292000Z" - }, - "timestamp_added": "2021-07-06T12:25:11.000000Z" - }, - { - "address": "112KiUgwQjH3HWC8DRD1AwzBd6JYVQhcyTm2cuH9S52VAEufUTxx", - "block": 943086, - "block_added": 586187, - "elevation": 40, - "gain": 58, - "geocode": { - "city_id": "amFiYWwgbHVibmFubGViYW5vbg", - "long_city": null, - "long_country": "Lebanon", - "long_state": "Jabal Lubnan", - "long_street": "قماطية", - "short_city": null, - "short_country": "LB", - "short_state": "Jabal Lubnan", - "short_street": "قماطية" - }, - "last_change_block": 943077, - "last_poc_challenge": 943053, - "lat": 33.80608713927618, - "lng": 35.573540070314635, - "location": "8c2da24d12c19ff", - "location_hex": "882da24d13fffff", - "mode": "full", - "name": "furry-mossy-spider", - "nonce": 5, - "owner": "14CTinSvsJJDfYmbVfNUscB8ZW1GWSDmCodK3SE2kCW9oAVpERU", - "payer": "14fzfjFcHpDR1rTH8BNPvSi5dKBbgxaDnmsVPbCjuq9ENjpZbxh", - "reward_scale": 0.8333282470703125, - "status": { - "height": 942453, - "listen_addrs": ["/ip4/185.187.130.21/tcp/44158"], - "online": "online", - "timestamp": "2021-07-29T01:09:21.481000Z" - }, - "timestamp_added": "2020-11-12T17:15:45.000000Z" - } - ] -} -``` - - - diff --git a/docs/api/blockchain/introduction.mdx b/docs/api/blockchain/introduction.mdx deleted file mode 100644 index 7e0371d33..000000000 --- a/docs/api/blockchain/introduction.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: introduction -sidebar_label: Introduction -slug: /api/blockchain/introduction ---- - -# Blockchain API - -## Endpoints - -The Helium [blockchain API](https://github.com/helium/blockchain-http) serves up -the blockchain from a database that is filled by a -[blockchain node](https://github.com/helium/blockchain-etl) that populates the -database as blocks come in. - -While anyone can run a node and a corresponding API, the Helium hosted version -offers up the API through two endpoints. - -- **https://api.helium.wtf** — Beta, scalable endpoint for new features and - tests. Currently connected to mainnet. This endpoint is used for feature - development. Submitted transactions may get dropped. -- **https://api.helium.io** — Stable, scalable production service. Connected to - mainnet. - -### Specify a User-Agent -To access the helium api via script you will need to specify a valid `User-Agent` HTTP header field identifying your agent, all requests made without a `User-Agent` header will result in an error `429 Slow down gun powder!`. - -## Routes - -The API routes are grouped together in sub-pages of this page. Refer to the -subpages for details. - -## Cursors - -In order to return data quickly and reduce the load on the API, a `cursor` may -be returned from an API request. The documentation for each route will indicate -whether the result is paged with a cursor. - -In order to request the next page of results, add a cursor URL parameter to the URL that -was used to make the first request. - -For example: - -```text -export API_URL=https://api.helium.io -http get $(API_URL)/v1/blocks -``` - -will return a `data` array with _zero or more_ block results and a `cursor` -field. To request the next page: - -```text -http get $(API_URL)/v1/blocks?cursor=eyJiZWZvcmUiOjQzOTIwMX0 -``` - -Which will return the next page of results and a next `cursor` for the following -page. - -:::info -In order to improve caching the API may return an empty data array and a -cursor. Use the cursor to request more data. -::: diff --git a/docs/api/blockchain/locations.mdx b/docs/api/blockchain/locations.mdx deleted file mode 100644 index 7be093082..000000000 --- a/docs/api/blockchain/locations.mdx +++ /dev/null @@ -1,61 +0,0 @@ ---- -id: locations -sidebar_label: Locations -slug: /api/blockchain/locations ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Locations - -Locations are used to associate human readable geographic informaion to an h3 -location. This API exposes this geographic information. - ---- - -## Get Location - -``` -GET https://api.helium.io/v1/locations/:location -``` - -Get geographic information for a given location - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------- | ---------| --------- | -| location (required) | _string_ | h3 index | - - - - -200: OK - -```json -{ - "data": { - "city_id": "c2FuIGpvc2VjYWxpZm9ybmlhdW5pdGVkIHN0YXRlcw", - "location": "8c28347213117ff", - "long_city": "San Jose", - "long_country": "United States", - "long_state": "California", - "long_street": "Rainbow Drive", - "short_city": "San Jose", - "short_country": "US", - "short_state": "CA", - "short_street": "Rainbow Dr" - } -} -``` - - - - diff --git a/docs/api/blockchain/oracle-prices.mdx b/docs/api/blockchain/oracle-prices.mdx deleted file mode 100644 index 10d2220b2..000000000 --- a/docs/api/blockchain/oracle-prices.mdx +++ /dev/null @@ -1,347 +0,0 @@ ---- -id: oracle-prices -sidebar_label: Oracle Prices -slug: /api/blockchain/oracle-prices ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Oracle Prices - ---- - -## Current Oracle Price - -``` -GET https://api.helium.io/v1/oracle/prices/current -``` - -The current Oracle Price and at which block it took effect. - - - - -_No Parameters_ - - - - -200: OK - -The current Oracle Price and at which block it took effect. - -```json -{ - "data": { - "price": 167000000, - "block": 471570 - } -} -``` - - - - ---- - -## Current and Historical Oracle Prices - -``` -GET https://api.helium.io/v1/oracle/prices -``` - -The current and historical Oracle Prices and at which block they took effect. -This route is paged using a cursor. - - - - -_Path Parameters_ - -| param | Type | Note | -| ----------------- | -------- | --------------------------------------------------------------------- | -| cursor (optional) | _string_ | Returned from an initial query, allowing client to fetch more results | - - - - -200: OK - -Returns a list of recent Oracle Prices and at which block they took effect. - -```json -{ - "data": [ - { - "price": 167000000, - "block": 471570 - }, - { - "price": 169630000, - "block": 471540 - } - ], - "cursor": "eyJiZWZvcmUiOjQ2NjE5MH0" -} -``` - - - - ---- - -## Oracle Price Stats - -``` -GET https://api.helium.io/v1/oracle/prices/stats -``` - -Gets statistics on Oracle prices. - - - - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | ------------------------------ | -| min_time (required) | _string_ | First time to include in stats | -| max_time (required) | _string_ | Last time to include in stats | - - - - -Returns Oracle price statistics over the last 30 days by specifying -`?min_time=-30%20day` - -200: OK - -```json -{ - "data": { - "avg": 12.433719079615384, - "max": 20.0, - "median": 12.53731614, - "min": 6.0, - "stddev": 3.50807814 - }, - "meta": { - "max_time": "2021-04-20T15:52:28Z", - "min_time": "2021-03-21T15:52:28Z" - } -} -``` - - - - ---- - -## Oracle Price at a Specific Block - -``` -GET https://api.helium.io/v1/oracle/prices/:block -``` - -Provides the oracle price at a specific block and at which block it initially -took effect. - - - - -_Path Parameters_ - -| param | Type | Note | -| ---------------- | -------- | ---------------------------------------- | -| block (required) | _string_ | The block to get the HNT Oracle Price at | - - - - -200: OK - -Returns a list of recent Oracle Prices and at which block they took effect.. - -```json -{ - "data": { - "price": 167000000, - "block": 471570 - } -} -``` - - - - ---- - -## List Oracle Activity - -``` -GET https://api.helium.io/v1/oracle/activity -``` - -List oracle price report transactions for all oracle keys. This route is paged -with a cursor. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| cursor (optional) | _string_ | Cursor for the next page to fetch | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -```json -{ - "cursor": "eyJ0eXBlcyI6InByaWNlX29yYWNsZV92MSIsImJsb2NrIjozNzc5MDAsImFuY2hvcl9ibG9jayI6Mzc3OTAwfQ", - "data": [ - { - "block_height": 377896, - "fee": 0, - "hash": "UcKE8X9UtuhOx5N3yxjyI7QcVihSoJTBq_DVQME7RWI", - "height": 377900, - "price": 35736000, - "public_key": "13Btezbvbwr9LhKmDQLgBnJUgjhZighEjNPLeu79dqBbmXRwoWm", - "time": 1592484227, - "type": "price_oracle_v1" - } - ] -} -``` - - - - ---- - -## List Activity for a Specific Oracle - -``` -GET https://api.helium.io/v1/oracle/:address/activity -``` - -Lists price report transactions for the given oracle key. This route is paged -using a cursor. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------- | -| address (optional) | _string_ | The public key of the oracle | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| cursor (optional) | _string_ | Cursor for the next page to fetch | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -```json -{ - "cursor": "eyJ0eXBlcyI6InByaWNlX29yYWNsZV92MSIsImJsb2NrIjozNzc5MDAsImFuY2hvcl9ibG9jayI6Mzc3OTAwfQ", - "data": [ - { - "block_height": 377896, - "fee": 0, - "hash": "UcKE8X9UtuhOx5N3yxjyI7QcVihSoJTBq_DVQME7RWI", - "height": 377900, - "price": 35736000, - "public_key": "13Btezbvbwr9LhKmDQLgBnJUgjhZighEjNPLeu79dqBbmXRwoWm", - "time": 1592484227, - "type": "price_oracle_v1" - } - ] -} -``` - - - - ---- - -## Get Predicted HNT Oracle Prices - -``` -GET https://api.helium.io/v1/oracle/predictions -``` - -This returns a list of expected times when the Oracle Price is expected to -change.The blockchain operates in "block-time", meaning that blocks can come out -at some schedule close to 1 per minute. Oracles report in "wall-clock-time", -meaning they report what they believe the price should be.If the route returns -one or more prices and times, it indicates that the chain is expected to adjust -the price (based on Oracle reports) no earlier than the indicated time to the -returned price.NOTE: A prediction may not be seen in the blockchain if they are -close together (within 10 blocks) since block times may cause the blockchain to -skip to a next predicted price. If no predictions are returned the current HNT -Oracle Price is valid for at least 1 hour. - - - - -_No Parameters_ - - - - -200: OK - -Returns a prediction that the price will change to 47000000 at the earliest at -the indicated seconds since Unix epoch time. - -```json -{ - "data": [ - { - "price": 47000000, - "time": 1594410146 - } - ] -} -``` - - - diff --git a/docs/api/blockchain/ouis.mdx b/docs/api/blockchain/ouis.mdx deleted file mode 100644 index 9ac299f57..000000000 --- a/docs/api/blockchain/ouis.mdx +++ /dev/null @@ -1,271 +0,0 @@ ---- -id: ouis -sidebar_label: OUIs -slug: /api/blockchain/ouis ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# OUIs - -Organization Unique Identifiers - -OUIs are used to assign part of the global address space to a given set of -router addresses. Hotspots that see device traffic will look up the router -address for the given device OUI and offer the device data to registered router. - ---- - -## List OUIs - -``` -GET https://api.helium.io/v1/ouis -``` - -Lists all OUI transactions known to the blockchain. - -This route is `cursor` paginated. - - - - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ----------------------------------- | -| cursor (optional) | _string_ | Cursor for page of results to fetch | - - - - -200: OK - -```json -{ - "data": [ - { - "subnets": [ - { - "mask": 8388606, - "base": 2080 - } - ], - "owner": "13o9kcgQQTLPGZMej8ya3RjRBWytJnGZkiLyruu4J9dqXgEDyvZ", - "oui": 7, - "nonce": 0, - "block": 762430, - "addresses": [] - }, - { - "subnets": [ - { - "mask": 8388606, - "base": 2072 - } - ], - "owner": "13HWrdkMoooYJEYz8LjKWzfK1oZifCzwxPaCnV9XDJbC5Gso1ic", - "oui": 6, - "nonce": 1, - "block": 762430, - "addresses": [] - }, - { - "subnets": [ - { - "mask": 8388606, - "base": 2064 - } - ], - "owner": "11P9o2DQNqkQ5GU6RTGcdUbRRtjc3syyhN29nFvm4ZfuhMnHj4S", - "oui": 5, - "nonce": 1, - "block": 762430, - "addresses": [] - }, - { - "subnets": [ - { - "mask": 8388606, - "base": 2056 - } - ], - "owner": "11xHXS5AgLyjYRCJ4ctcWcsMRULS8jro9Pb1GPaTG1neGk1dNcf", - "oui": 4, - "nonce": 1, - "block": 762430, - "addresses": [] - }, - { - "subnets": [ - { - "mask": 8388606, - "base": 2048 - } - ], - "owner": "14oSuAgRmAFPFPZRY1MUwir5AJSLGkaXHzuSZJ92BuYCfLMN1Et", - "oui": 3, - "nonce": 3, - "block": 762430, - "addresses": [] - }, - { - "subnets": [ - { - "mask": 8388352, - "base": 1024 - } - ], - "owner": "1124CJ9yJaHq4D6ugyPCDnSBzQik61C1BqD9VMh1vsUmjwt16HNB", - "oui": 2, - "nonce": 8, - "block": 762430, - "addresses": [] - }, - { - "subnets": [ - { - "mask": 8388352, - "base": 0 - } - ], - "owner": "13tyMLKRFYURNBQqLSqNJg9k41maP1A7Bh8QYxR13oWv7EnFooc", - "oui": 1, - "nonce": 0, - "block": 762430, - "addresses": [ - "112qB3YaH5bZkCnKA5uRH7tBtGNv2Y5B4smv1jsmvGUzgKT71QpE" - ] - } - ] -} -``` - - - - ---- - -## Get an OUI - -``` -GET https://api.helium.io/v1/ouis/:oui -``` - -Returns information for a specific OUI. - - - - -_No Parameters_ - - - - -200: OK - -```json -{ - "data": { - "subnets": [ - { - "mask": 8388352, - "base": 1024 - } - ], - "owner": "1124CJ9yJaHq4D6ugyPCDnSBzQik61C1BqD9VMh1vsUmjwt16HNB", - "oui": 2, - "nonce": 8, - "block": 762436, - "addresses": [] - } -} -``` - - - - ---- - -## Get last assigned OUI - -``` -GET https://api.helium.io/v1/ouis/last -``` - -Returns the last assigned OUI transaction. The last assigned OUI can be used to -request a new OUI - - - - -_No Parameters_ - - - - -200: OK - -```json -{ - "data": { - "subnets": [ - { - "mask": 8388606, - "base": 2080 - } - ], - "owner": "13o9kcgQQTLPGZMej8ya3RjRBWytJnGZkiLyruu4J9dqXgEDyvZ", - "oui": 7, - "nonce": 0, - "block": 762431, - "addresses": [] - } -} -``` - - - - ---- - -## Get OUI Stats - -``` -GET https://api.helium.io/v1/ouis/stats -``` - -Returns stats for the registered OUIs - - - - -_No Parameters_ - - - - -200: OK - -```json -{ - "data": { - "count": 7 - } -} -``` - - - diff --git a/docs/api/blockchain/pending-transactions.mdx b/docs/api/blockchain/pending-transactions.mdx deleted file mode 100644 index d2333e893..000000000 --- a/docs/api/blockchain/pending-transactions.mdx +++ /dev/null @@ -1,122 +0,0 @@ ---- -id: pending-transactions -sidebar_label: Pending Transactions -slug: /api/blockchain/pending-transactions ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Pending Transactions - ---- - -## Pending Transaction Status - -``` -GET https://api.helium.io/v1/pending_transactions/:hash -``` - -Fetches the status for a given pending transaction hash. Multiple transactions -for the same hash may be returned. - - - - -_Path Parameters_ - -| param | Type | Note | -| --------------- | -------- | ----------------------------------------- | -| hash (required) | _string_ | Hash of the pending transaction to fetch. | - - - - -200: OK - -A successful pending transaction status request - -```json -{ - "data": [ - { - "updated_at": "2020-07-29T00:44:13.578098Z", - "type": "payment_v2", - "txn": { - "type": "payment_v2", - "payments": [ - { - "payee": "13FkKYnwHPoa6F7K23jJ7j2WNg9cMPsznJ7i4c9ysCwLoS8vx3E", - "amount": 100000000 - } - ], - "payer": "14h5MCATzJAB88gGBph8YtPM9539FdyBnMdTt7sYxg4Ts1D1aW3", - "nonce": 7, - "hash": "q7pnrm2LvPoZKclF4f2BB6AmcnD0SORECgq9VbNLir4", - "fee": 35000 - }, - "status": "pending", - "hash": "q7pnrm2LvPoZKclF4f2BB6AmcnD0SORECgq9VbNLir4", - "failed_reason": "", - "created_at": "2020-07-29T00:44:11.516601Z" - } - ] -} -``` - - - - ---- - -## Submit a New Transaction - -``` -POST https://api.helium.io/v1/pending_transactions/:hash -``` - -New transactions can be submitted to the blockchain by sending a pending -transaction.The transaction has to be constructed using the protobuf form, -encoded and then signed. The resulting signed transaction is then wrapped in a -transaction wrapper which must be encoded and then submitted to this endpoint.If -successful, the response will include a transaction hash that can be used to -check for pending transaction status. - - - - -_Headers_ - -| param | Type | Note | -| ----------------------- | -------- | ---------------- | -| Content-Type (optional) | _string_ | application/json | - -_Body Parameters_ - -| param | Type | Note | -| -------------- | -------- | -------------------------------------------------------------------------------------------- | -| txn (required) | _string_ | A base64 encoded transaction. An exmple of the both of a post request:{ "txn": "QoWBCIe..."} | - - - - -200: OK - -A successful pending transaction status request - -```json -{ - "data": { - "hash": "Coy2WqcmCt6k8MgSq3hK0XW1Um5NtwHskoY1zwYADKE" - } -} -``` - - - diff --git a/docs/api/blockchain/rewards.mdx b/docs/api/blockchain/rewards.mdx deleted file mode 100644 index 5723a0345..000000000 --- a/docs/api/blockchain/rewards.mdx +++ /dev/null @@ -1,141 +0,0 @@ ---- -id: rewards -sidebar_label: Rewards -slug: /api/blockchain/rewards ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Rewards - ---- - -## Reward Totals - -``` -GET https://api.helium.io/v1/rewards/sum -``` - -Returns the total rewards for the whole network in a given timeframe. Timestamps -can be given in ISO 8601 format (e.g. `2020-08-27T00:00:00Z`) or in relative -time (e.g. `-1 week`, which when url esacped becomes `-1%20week`). When ommitted -the current time is assumed. - -The results can also be bucketed in time by specifying a `bucket` query -parameter which buckets information per bucket in the given timeframe. Data is -bucketed by time. Valid bucket values include `hour`, `day` and `week`). - -For example to get the last 7 days of rewards bucketed by day use the following -path/parameters: `?min_time=-7%20day&bucket=day` - -The block that contains the `max_time` timestamp is -**excluded** from the result. - - - - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | -------------------------------------- | -| min_time (required) | _string_ | First time to include rewards for | -| max_time (required) | _string_ | Last time to include rewards for | -| bucket (optional) | _string_ | Bucket specifier | - - - - -200: OK - -Return the last 7 days of rewards bucketed by day - -```json -{ - "meta": { - "min_time": "2021-03-09T14:02:16Z", - "max_time": "2021-03-16T14:02:16Z", - "bucket": "day" - }, - "data": [ - { - "total": 163097.17250743, - "timestamp": "2021-03-15T14:02:16.000000Z", - "sum": 16309717250743, - "stddev": 1979.00681618, - "min": 3472.21917515, - "median": 4016.203702235, - "max": 12284.71884406, - "avg": 4796.975661983235 - }, - { - "total": 168002.27841848, - "timestamp": "2021-03-14T14:02:16.000000Z", - "sum": 16800227841848, - "stddev": 2309.16069573, - "min": 3472.21841404, - "median": 4016.20370501, - "max": 12611.11000226, - "avg": 5090.9781338933335 - }, - { - "total": 133361.07596175, - "timestamp": "2021-03-13T14:02:16.000000Z", - "sum": 13336107596175, - "stddev": 2798.46444455, - "min": 3472.21962795, - "median": 4124.99999633, - "max": 14787.03221898, - "avg": 5129.272152375 - }, - { - "total": 163106.43648989, - "timestamp": "2021-03-12T14:02:16.000000Z", - "sum": 16310643648989, - "stddev": 2546.58274217, - "min": 3472.2198613, - "median": 3907.40369327, - "max": 13590.27500482, - "avg": 4942.619287572425 - }, - { - "total": 172761.52602361, - "timestamp": "2021-03-11T14:02:16.000000Z", - "sum": 17276152602361, - "stddev": 1987.78361329, - "min": 3472.22221761, - "median": 4016.20370451, - "max": 10108.79357198, - "avg": 4798.931278433611 - }, - { - "total": 174583.28615868, - "timestamp": "2021-03-10T14:02:16.000000Z", - "sum": 17458328615868, - "stddev": 1803.57075522, - "min": 3472.22221792, - "median": 3798.61111202, - "max": 12502.31093528, - "avg": 4476.494516889231 - }, - { - "total": 171546.22586829, - "timestamp": "2021-03-09T14:02:16.000000Z", - "sum": 17154622586829, - "stddev": 1240.37282909, - "min": 3472.21796038, - "median": 4070.598475985, - "max": 9129.62498664, - "avg": 4514.374364955 - } - ] -} -``` - - - - ---- diff --git a/docs/api/blockchain/state-channels.mdx b/docs/api/blockchain/state-channels.mdx deleted file mode 100644 index f1f75de48..000000000 --- a/docs/api/blockchain/state-channels.mdx +++ /dev/null @@ -1,89 +0,0 @@ ---- -id: state-channels -sidebar_label: State Channels -slug: /api/blockchain/state-channels ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# State Channels - ---- - -## State Channel Closes - -``` -GET https://api.helium.io/v1/state_channels -``` - -Use this API to list state channel close transactions. - -This route is `cursor` paginated. - - - - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | --------------------------------- | -| cursor (optional) | _string_ | Cursor for page to fetch | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -Return a page of state channel close transactions. - -```json -{ - "data": [ - { - "type": "state_channel_close_v1", - "time": 1627577017, - "state_channel": { - "summaries": [ - { - "owner": "14qHxW3wwEonzJJrVPZ78BXZujPeHvdn2fo4iZ4YQ2kLUwkZXtm", - "num_packets": 16, - "num_dcs": 16, - "location": "8c2baa4e889b5ff", - "client": "112uipUqDVgAzqWdtcRtPQuoeGJFFfwW3oBDXtatvisbbqHWk3RW" - }, - { - "owner": "13mYJikVu11XhX59Zqqk1ToNeWdzq6vReb3A3iSPLruMxuxqRAc", - "num_packets": 124, - "num_dcs": 248, - "location": "8c29b6d8a4dc5ff", - "client": "11fcc2zTmmXgopTNfMmoL3MU8KGfWZJ3NqQRgAZtaey5UBgAk7D" - } - ], - "state": "closed", - "root_hash": "5WgBNc99K2ql6yd300IYdDrQukxOQFSAdWuKP7u8v80", - "owner": "112qB3YaH5bZkCnKA5uRH7tBtGNv2Y5B4smv1jsmvGUzgKT71QpE", - "nonce": 21499, - "id": "6_S3g9x7pbAusjYPjV3sdxc9nVrWbFyjtZtcRo4NRpM", - "expire_at_block": 943427 - }, - "height": 943429, - "hash": "HOzKneeR7b18s7t6a8AISFzpUrPRTwACf26Q76kkW3E", - "conflicts_with": null, - "closer": "112qB3YaH5bZkCnKA5uRH7tBtGNv2Y5B4smv1jsmvGUzgKT71QpE" - } - ], - "cursor": "eyJ0eXBlcyI6InN0YXRlX2NoYW5uZWxfY2xvc2VfdjEiLCJtaW5fYmxvY2siOjEsImJsb2NrIjo5NDM0MDAsImFuY2hvcl9ibG9jayI6OTQzNDAwfQ" -} -``` - - - - ---- diff --git a/docs/api/blockchain/stats.mdx b/docs/api/blockchain/stats.mdx deleted file mode 100644 index fee2102d7..000000000 --- a/docs/api/blockchain/stats.mdx +++ /dev/null @@ -1,133 +0,0 @@ ---- -id: stats -sidebar_label: Stats -slug: /api/blockchain/stats ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Stats - ---- - -## Blockchain Stats - -``` -GET https://api.helium.io/v1/stats -``` - -Retrieve basic stats for the blockchain such as total token supply, and average -block and election times over a number of intervals. - - - - -_No Parameters_ - - - - -200: OK - -```json -{ - "data": { - "block_times": { - "last_day": { - "avg": 70.45921696574226, - "stddev": 68.83988201467606 - }, - "last_hour": { - "avg": 66.16666666666667, - "stddev": 4.492131485499826 - }, - "last_month": { - "avg": 58.57145439754135, - "stddev": 54.42394685110655 - }, - "last_week": { - "avg": 66.77767965559113, - "stddev": 78.40328359329104 - } - }, - "challenge_counts": { - "active": 3226, - "last_day": 33084 - }, - "counts": { - "validators": 2145, - "ouis": 13, - "hotspots_dataonly": 64, - "blocks": 644074, - "challenges": 14189829, - "cities": 2458, - "consensus_groups": 16884, - "countries": 55, - "hotspots": 14402, - "transactions": 37813658 - }, - "election_times": { - "last_day": { - "avg": 2981.2413793103447, - "stddev": 1693.238289178722 - }, - "last_hour": { - "avg": 1997.0, - "stddev": null - }, - "last_month": { - "avg": 2247.3307291666665, - "stddev": 821.206067231938 - }, - "last_week": { - "avg": 2608.6293103448274, - "stddev": 1048.715520504349 - } - }, - "token_supply": 66042860.58752121 - } -} -``` - - - - ---- - -## Token Supply - -``` -GET https://api.helium.io/v1/stats/token_supply -``` - -Returns the circulating token supply in either JSON or raw form. - - - - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | --------------------------------------------------------- | -| format (optional) | _string_ | specify `raw` to get a raw number, otherwise returns json | - - - - -200: OK - -RAW form of the result when called with `/v1/stats/token_supply?format=raw` - -```json -49450470.73544278 -``` - - - diff --git a/docs/api/blockchain/transactions.mdx b/docs/api/blockchain/transactions.mdx deleted file mode 100644 index cb1dbf1b8..000000000 --- a/docs/api/blockchain/transactions.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: transactions -sidebar_label: Transactions -slug: /api/blockchain/transactions ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Transactions - ---- - -## Transaction for Hash - -``` -GET https://api.helium.io/v1/transactions/:hash -``` - -Fetch the transaction for a given hash. - - - - -_Path Parameters_ - -| param | Type | Note | -| --------------- | -------- | ------------------------- | -| hash (required) | _string_ | Transaction hash to fetch | - - - - -200: OK - -Transaction successfully retrieved. - -```json -{ - "data": { - "type": "payment_v2", - "time": 1595980494, - "payments": [ - { - "payee": "13FkKYnwHPoa6F7K23jJ7j2WNg9cMPsznJ7i4c9ysCwLoS8vx3E", - "amount": 100000000 - } - ], - "payer": "14h5MCATzJAB88gGBph8YtPM9539FdyBnMdTt7sYxg4Ts1D1aW3", - "nonce": 6, - "height": 435251, - "hash": "bUc6-LQXdR6zOBaR_8TPWlf3THCpb4wI6WPXJHJfnYw", - "fee": 35000 - } -} -``` - - - diff --git a/docs/api/blockchain/validators.mdx b/docs/api/blockchain/validators.mdx deleted file mode 100644 index de763833a..000000000 --- a/docs/api/blockchain/validators.mdx +++ /dev/null @@ -1,7694 +0,0 @@ ---- -id: validators -sidebar_label: Validators -slug: /api/blockchain/validators ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Validators - ---- - -:::warning - -These docs reflect the Validator Mainnet API. If you would like to use the Testnet API, -please use the following base url: - -``` -https://testnet-api.helium.wtf/v1/ -``` - -::: - -## List Validators - -``` -GET https://api.helium.io/v1/validators -``` - -List known validators as registered on the blockchain. The results are paged. If a -`cursor` field is present in the response, more results are available. - - - - -_Query Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ---------------------------- | -| cursor (optional) | _string_ | Cursor for the page to fetch | - - - - -200: OK - -Validators successfully retrieved. - -```json -{ - "data": [ - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": ["/ip4/173.234.31.106/tcp/2154"], - "height": 17454 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1angb56sircurmps45PN8S3xkp6UGWBicG4vLuxNdjjWLWKbGiJ", - "name": "soft-aquamarine-bear", - "last_heartbeat": 1, - "block_added": 57693, - "block": 57780, - "address": "1ZzqXn48DByf5RsPujPTt3AcemXKDJNudYnJfCBAkcYBaBxPzEf" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/161.35.239.72/tcp/2154"], - "height": 57620 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1aHjgDtLvURwScQRUhkY7R72Chf6LURa1kPW19orJG1B3Y1W3F6", - "name": "kind-khaki-koala", - "last_heartbeat": 57771, - "block_added": 57621, - "block": 57780, - "address": "1brL1Gop8xjXLg8ouy7mTF6ENerCq2efa8z6xueDGcDAzGMNXX2" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": ["/ip4/3.19.229.249/tcp/2154"], - "height": 13236 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1bDnpfSfjKuvXExmaUPvrgPGejGYRAnuLmEHpD9jc9tqtCdJo7L", - "name": "clean-sepia-corgi", - "last_heartbeat": 1, - "block_added": 57375, - "block": 57780, - "address": "1YcYePNZgLd5NXgozRepyLkF8RzUQy3VAgaC8QkPVXX3TnbsxHy" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": [ - "/p2p/1YHCeWRvkowVUrAmvTHYPsMu4kLTMa47ZdFfitg7mGwF4vD7nS6/p2p-circuit/p2p/1Z8miaJzGE5xKWVAhgfdsDcazvVsGgvCw4VT4fYT8dD75YU7CcM" - ], - "height": 17454 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1a8jaYof7PzvjcwrGty1EXcimpFuwKahafAsKeVyKN9VGohAHGz", - "name": "lone-cedar-bird", - "last_heartbeat": 1, - "block_added": 57094, - "block": 57780, - "address": "1Z8miaJzGE5xKWVAhgfdsDcazvVsGgvCw4VT4fYT8dD75YU7CcM" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": [ - "/p2p/1Zks5oKPUGMQMrwoxatXhpUb62jkYhpF9BQNGLjTgV3D4Pq5Tjm/p2p-circuit/p2p/1ZJdib3QEzGrbUSjShhM6N9LjsbZQx9aJJeEvrT4YPpa5MVjq2A" - ], - "height": 57693 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1bqByKbvSGqvi9cNHj2pVsBKU4ozJfJaormeiuJwPYXZqQUCyh7", - "name": "dazzling-pine-deer", - "last_heartbeat": 57772, - "block_added": 56874, - "block": 57780, - "address": "1ZJdib3QEzGrbUSjShhM6N9LjsbZQx9aJJeEvrT4YPpa5MVjq2A" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/128.199.110.198/tcp/2154"], - "height": 57723 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 2.0800018310546875, - "penalties": [ - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "performance", - "height": 57559, - "amount": 0 - }, - { - "type": "performance", - "height": 57573, - "amount": 0 - }, - { - "type": "performance", - "height": 57585, - "amount": 0 - }, - { - "type": "performance", - "height": 57601, - "amount": 0 - }, - { - "type": "performance", - "height": 57619, - "amount": 0 - }, - { - "type": "performance", - "height": 57633, - "amount": 0 - }, - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - } - ], - "owner": "1aHkk454S483K482HGvCfUdBfAiAXWtkGGZ3BmEQBCqSYJrGCpn", - "name": "original-neon-finch", - "last_heartbeat": 57777, - "block_added": 56344, - "block": 57780, - "address": "1Z6bxAwSTpKUqn1wchPAzf6chV7NaFCRqh9GdHurJGQprd1ZT64" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1bd4WfNCQsBU6enYHK4NW5b8M181PgeWhuMWtfV6DiumpYzGopG", - "name": "fit-pear-corgi", - "last_heartbeat": 1, - "block_added": 55676, - "block": 57780, - "address": "1bd4WfNCQsBU6enYHK4NW5b8M181PgeWhuMWtfV6DiumpYzGopG" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": ["/ip4/45.63.122.123/tcp/2154"], - "height": 17454 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1bpNMsVaK4V9v3f979Wt8MJyrQ1qQrUeGg9nvRvaq7WpiGiFAwg", - "name": "narrow-mercurial-ostrich", - "last_heartbeat": 1, - "block_added": 55676, - "block": 57780, - "address": "1ZxNeN9S5UXP4v84iuLR6jnxv2V5c4aANUPZ7LXFR7Fa1gfN3Hi" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": ["/ip4/95.179.229.119/tcp/2154"], - "height": 17454 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1aKoNNY5KrJDxfzW9USERQTjP5L57uq3T55jHcCBCy6RXbcL3Jf", - "name": "big-brunette-wallaby", - "last_heartbeat": 1, - "block_added": 55674, - "block": 57780, - "address": "1Zg7in5DSjgJNw1Y1tTAUkwDvMWZskGZMkK2i8qYqFo5ufQaAuT" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": [], - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1bZxXDLbweRyMW43hvmQMcyvsBxA5oucjX9xwfQXDKzUU6yMhWt", - "name": "dapper-blonde-troll", - "last_heartbeat": 1, - "block_added": 55186, - "block": 57780, - "address": "1YPN2hKjbNWxfvCgwAsb4xh2P3afc2LxcaCjM12Ngf9KGzaXE25" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": [ - "/p2p/1YEmVh7eeSXdqzjKMeZUWjZbDmVWVMKVLY7Y4nQheWV5YmU8ie3/p2p-circuit/p2p/1ZvBKi4rbUue3rbbSeGVwRBZobkLRAHGpaiyxuyFEhDSKN2yqN4" - ], - "height": 57701 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 4.4100189208984375, - "penalties": [ - { - "type": "performance", - "height": 57704, - "amount": 0.477996826171875 - }, - { - "type": "performance", - "height": 57684, - "amount": 0.4792022705078125 - }, - { - "type": "performance", - "height": 57738, - "amount": 1.9405670166015625 - }, - { - "type": "tenure", - "height": 57684, - "amount": 1 - }, - { - "type": "tenure", - "height": 57704, - "amount": 1 - }, - { - "type": "tenure", - "height": 57738, - "amount": 1 - } - ], - "owner": "1bXCpL79ZuEye2bKhcNqZ8yRLPgEtL4bsVUPegwthUAU1eWUVwH", - "name": "brave-hazelnut-dragon", - "last_heartbeat": 57776, - "block_added": 55105, - "block": 57780, - "address": "1ZvBKi4rbUue3rbbSeGVwRBZobkLRAHGpaiyxuyFEhDSKN2yqN4" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/72.75.228.194/tcp/2154"], - "height": 57665 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 56880, - "amount": 1.5211639404296875 - }, - { - "type": "performance", - "height": 56851, - "amount": 1.540802001953125 - }, - { - "type": "performance", - "height": 56868, - "amount": 1.986358642578125 - }, - { - "type": "tenure", - "height": 56851, - "amount": 1 - }, - { - "type": "tenure", - "height": 56868, - "amount": 1 - }, - { - "type": "tenure", - "height": 56880, - "amount": 1 - } - ], - "owner": "1bZYC5HM5z5DSJ6BYCkvZN3WqaBpLoRDjU8aTKdEQ3fqmb21cdh", - "name": "huge-hickory-flamingo", - "last_heartbeat": 57773, - "block_added": 54840, - "block": 57780, - "address": "1Zq7YFrWEihKZPfrMWVE64RWPuuR2K4qg7C6uLcHMMPCrsGMfSa" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/3.141.1.44/tcp/2154"], - "height": 57176 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57061, - "amount": 0 - }, - { - "type": "performance", - "height": 57092, - "amount": 0 - }, - { - "type": "performance", - "height": 57113, - "amount": 7.875885009765625 - }, - { - "type": "tenure", - "height": 57061, - "amount": 1 - }, - { - "type": "tenure", - "height": 57092, - "amount": 1 - }, - { - "type": "tenure", - "height": 57113, - "amount": 1 - } - ], - "owner": "1b5u8WUEZyCduBs7TSaGD86CHGkajLapmafXsQH2sUd25T7CdJj", - "name": "elegant-indigo-orca", - "last_heartbeat": 57770, - "block_added": 54721, - "block": 57780, - "address": "1YbCrM7hQHP6kKVnevibmdtVTf9Q4zosdqw4gsvJcSWgujUZfas" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/18.220.78.219/tcp/2154"], - "height": 57681 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.7920074462890625, - "penalties": [ - { - "type": "performance", - "height": 57585, - "amount": 0 - }, - { - "type": "performance", - "height": 57601, - "amount": 0 - }, - { - "type": "performance", - "height": 57619, - "amount": 0 - }, - { - "type": "performance", - "height": 57633, - "amount": 0 - }, - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - } - ], - "owner": "1ac8ohAz1aAzPyj93R18YMdXWovPi3QD7vCVAh1pqjzqY3AAAsH", - "name": "tricky-orange-antelope", - "last_heartbeat": 57775, - "block_added": 54645, - "block": 57780, - "address": "1ZCvokeKQJEpY53aRWXxFRSNwR1D4QHMpULQwctmMfbQkgu8vPs" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": [ - "/p2p/1ZHrstqGvr1yKsEgiKr9LpSMNRNW8TRLC8owivFSEVmrmHqoMuC/p2p-circuit/p2p/1ZxFE2edaTGBbTpbd3a5frT4E4gFDFSfeXSKrsCTLdbxjyx1WVf" - ], - "height": 57427 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57147, - "amount": 0.4907989501953125 - }, - { - "type": "performance", - "height": 57171, - "amount": 0.5872039794921875 - }, - { - "type": "performance", - "height": 57158, - "amount": 0.6887969970703125 - }, - { - "type": "tenure", - "height": 57147, - "amount": 1 - }, - { - "type": "tenure", - "height": 57158, - "amount": 1 - }, - { - "type": "tenure", - "height": 57171, - "amount": 1 - } - ], - "owner": "1atx3iDSFCjUZR4R6CqfSmD38BHM3BwT5hN2uDRQ5Em5RVFvG3y", - "name": "passive-lilac-donkey", - "last_heartbeat": 57772, - "block_added": 54574, - "block": 57780, - "address": "1ZxFE2edaTGBbTpbd3a5frT4E4gFDFSfeXSKrsCTLdbxjyx1WVf" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": [], - "height": 57719 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 6.357635498046875, - "penalties": [ - { - "type": "performance", - "height": 57753, - "amount": 0.59320068359375 - }, - { - "type": "performance", - "height": 57765, - "amount": 4.22259521484375 - }, - { - "type": "tenure", - "height": 57753, - "amount": 1 - }, - { - "type": "tenure", - "height": 57765, - "amount": 1 - } - ], - "owner": "1bZxXDLbweRyMW43hvmQMcyvsBxA5oucjX9xwfQXDKzUU6yMhWt", - "name": "magic-iris-otter", - "last_heartbeat": 57776, - "block_added": 54546, - "block": 57780, - "address": "1YJB5T4jj1PQtEeuy81DMKYUY1NpUUVDAphjLMM72zMbKFN8Wi4" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.81.253.204/tcp/2154"], - "height": 57696 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 56533, - "amount": 0 - }, - { - "type": "performance", - "height": 56547, - "amount": 0 - }, - { - "type": "performance", - "height": 56559, - "amount": 0.09759521484375 - }, - { - "type": "tenure", - "height": 56533, - "amount": 1 - }, - { - "type": "tenure", - "height": 56547, - "amount": 1 - }, - { - "type": "tenure", - "height": 56559, - "amount": 1 - } - ], - "owner": "1aLVi6Z9qcraQwLAsqdVydCTErZtKyDgUKgcQCJ9JTBbJoxCC77", - "name": "early-glass-rabbit", - "last_heartbeat": 57772, - "block_added": 54152, - "block": 57780, - "address": "1ZNaqFEXa8Uun5A4MbsGrLg7QWVCQn35fBpafxuzE4cK4se5M2Z" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/95.216.206.222/tcp/2154"], - "height": 57733 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 2.8350067138671875, - "penalties": [ - { - "type": "performance", - "height": 57573, - "amount": 0 - }, - { - "type": "performance", - "height": 57765, - "amount": 0 - }, - { - "type": "performance", - "height": 57601, - "amount": 0.0948028564453125 - }, - { - "type": "performance", - "height": 57777, - "amount": 0.096405029296875 - }, - { - "type": "performance", - "height": 57585, - "amount": 0.295196533203125 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57765, - "amount": 1 - }, - { - "type": "tenure", - "height": 57777, - "amount": 1 - } - ], - "owner": "1bLo6qZh387D9yZppCRLzvdLofyPQ4SFyPM9T8VvSf7XLuSmS62", - "name": "hot-blonde-eagle", - "last_heartbeat": 57752, - "block_added": 53507, - "block": 57780, - "address": "1YjRG26vfH5AuTmNdYpSHy8LoNZmBitWRE2sXCArzWwnCpFLLBc" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.81.143.171/tcp/2154"], - "height": 57570 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0.947998046875, - "penalties": [ - { - "type": "performance", - "height": 57530, - "amount": 0 - }, - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "performance", - "height": 57559, - "amount": 0 - }, - { - "type": "performance", - "height": 57573, - "amount": 0 - }, - { - "type": "performance", - "height": 57585, - "amount": 0 - }, - { - "type": "performance", - "height": 57601, - "amount": 0 - }, - { - "type": "tenure", - "height": 57530, - "amount": 1 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - } - ], - "owner": "1btCJwtoPL52UEDNbwNitqXtDNsD6hf71oqC2byaMY8T6YETBvY", - "name": "feisty-raisin-parrot", - "last_heartbeat": 57774, - "block_added": 53304, - "block": 57780, - "address": "1Z1kvpjykGWjPgvQT7uDRm8oCKuEKGpBs9UPun1UYbdn1bfxumU" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/34.217.83.142/tcp/2154"], - "height": 57751 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 6.2188568115234375, - "penalties": [ - { - "type": "performance", - "height": 57753, - "amount": 0.682403564453125 - }, - { - "type": "performance", - "height": 57516, - "amount": 1.204681396484375 - }, - { - "type": "performance", - "height": 57765, - "amount": 1.2259521484375 - }, - { - "type": "performance", - "height": 57738, - "amount": 2.122161865234375 - }, - { - "type": "tenure", - "height": 57516, - "amount": 1 - }, - { - "type": "tenure", - "height": 57738, - "amount": 1 - }, - { - "type": "tenure", - "height": 57753, - "amount": 1 - }, - { - "type": "tenure", - "height": 57765, - "amount": 1 - } - ], - "owner": "1aFHALQYwKKofGd84SL2cfxCvMx58TBKpANrAXUyrVtfrEmEMJf", - "name": "proper-wooden-pelican", - "last_heartbeat": 57776, - "block_added": 53218, - "block": 57780, - "address": "1ZUi3iMFQZNbECoULtKsfnhQcRwc4UaGhcXM8wB9aQkwLNJfp6D" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "offline", - "listen_addrs": [ - "/p2p/1ZQ9cc2cTJ5RB2DcxWf4EBZebqsSWcPqb1fxKBa8357nvNZTgE7/p2p-circuit/p2p/1ZBJs1N8A7fJQcs8e2NoZBtWjdqPwPChvohUFFvPFeBszeovCeu" - ], - "height": 55498 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 55009, - "amount": 0 - }, - { - "type": "performance", - "height": 55156, - "amount": 0 - }, - { - "type": "performance", - "height": 55232, - "amount": 0 - }, - { - "type": "performance", - "height": 55216, - "amount": 0.1967926025390625 - }, - { - "type": "performance", - "height": 55192, - "amount": 1.587432861328125 - }, - { - "type": "tenure", - "height": 55009, - "amount": 1 - }, - { - "type": "tenure", - "height": 55156, - "amount": 1 - }, - { - "type": "tenure", - "height": 55192, - "amount": 1 - }, - { - "type": "tenure", - "height": 55216, - "amount": 1 - }, - { - "type": "tenure", - "height": 55232, - "amount": 1 - } - ], - "owner": "1aPwSMjyDT7BEzfp2yAZAttsNEZ5e2n6piB5HmrNNwRpYCQEPpL", - "name": "sweet-silver-python", - "last_heartbeat": 55536, - "block_added": 52892, - "block": 57780, - "address": "1ZBJs1N8A7fJQcs8e2NoZBtWjdqPwPChvohUFFvPFeBszeovCeu" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/34.214.145.125/tcp/2154"], - "height": 57692 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 56704, - "amount": 0 - }, - { - "type": "performance", - "height": 56716, - "amount": 0 - }, - { - "type": "performance", - "height": 56732, - "amount": 0 - }, - { - "type": "performance", - "height": 56751, - "amount": 0 - }, - { - "type": "tenure", - "height": 56704, - "amount": 1 - }, - { - "type": "tenure", - "height": 56716, - "amount": 1 - }, - { - "type": "tenure", - "height": 56732, - "amount": 1 - }, - { - "type": "tenure", - "height": 56751, - "amount": 1 - } - ], - "owner": "1b4WiA7V1qnmHkGGkNbUKNz1npbJS3iD87xak1mJwPmmBPmqTci", - "name": "energetic-blush-albatross", - "last_heartbeat": 57775, - "block_added": 52705, - "block": 57780, - "address": "1YGNwxjixoC51DHL8btRVKN5Tbw2ouF4xPqQxwQeg5QePQcACJR" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.208.34.210/tcp/2154"], - "height": 57662 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.089141845703125, - "penalties": [ - { - "type": "performance", - "height": 57426, - "amount": 0.0955963134765625 - }, - { - "type": "performance", - "height": 57645, - "amount": 0.096405029296875 - }, - { - "type": "performance", - "height": 57412, - "amount": 0.2971954345703125 - }, - { - "type": "performance", - "height": 57398, - "amount": 0.3907928466796875 - }, - { - "type": "performance", - "height": 57633, - "amount": 0.39520263671875 - }, - { - "type": "tenure", - "height": 57398, - "amount": 1 - }, - { - "type": "tenure", - "height": 57412, - "amount": 1 - }, - { - "type": "tenure", - "height": 57426, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - } - ], - "owner": "1b1VsaMgUnbxuJ9kjXAs8E24pB7m65n59nSAEnMC879hBb2Abgs", - "name": "colossal-carbon-bat", - "last_heartbeat": 57776, - "block_added": 52678, - "block": 57780, - "address": "1YWQKAoUjZgG2mEMLbgaaN5v8ymFjZkubW9howLpMjmWLwe9rmz" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.29/tcp/2154"], - "height": 57573 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0.6880035400390625, - "penalties": [ - { - "type": "performance", - "height": 57516, - "amount": 0 - }, - { - "type": "performance", - "height": 57530, - "amount": 0 - }, - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "performance", - "height": 57559, - "amount": 0 - }, - { - "type": "performance", - "height": 57573, - "amount": 0 - }, - { - "type": "performance", - "height": 57585, - "amount": 0 - }, - { - "type": "tenure", - "height": 57516, - "amount": 1 - }, - { - "type": "tenure", - "height": 57530, - "amount": 1 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "special-cloth-griffin", - "last_heartbeat": 57772, - "block_added": 52555, - "block": 57780, - "address": "1YcVG1K9SYo37KnpJYfVu1Py8nUvp77vruK4zMFW5jtP5N9yKMW" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.28/tcp/2154"], - "height": 57739 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 3.496002197265625, - "penalties": [ - { - "type": "performance", - "height": 57573, - "amount": 0 - }, - { - "type": "performance", - "height": 57585, - "amount": 0 - }, - { - "type": "performance", - "height": 57601, - "amount": 0 - }, - { - "type": "performance", - "height": 57619, - "amount": 0 - }, - { - "type": "performance", - "height": 57633, - "amount": 0 - }, - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "performance", - "height": 57665, - "amount": 0 - }, - { - "type": "performance", - "height": 57777, - "amount": 0 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - }, - { - "type": "tenure", - "height": 57665, - "amount": 1 - }, - { - "type": "tenure", - "height": 57777, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "great-laurel-crocodile", - "last_heartbeat": 57771, - "block_added": 52554, - "block": 57780, - "address": "1YkbPxnYTyTGBVxtmCc2on3Tqgbtm85TqJQsfBN6uDXgVeejuuG" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.27/tcp/2154"], - "height": 57740 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.264007568359375, - "penalties": [ - { - "type": "performance", - "height": 57398, - "amount": 0 - }, - { - "type": "performance", - "height": 57412, - "amount": 0 - }, - { - "type": "performance", - "height": 57426, - "amount": 0 - }, - { - "type": "performance", - "height": 57441, - "amount": 0 - }, - { - "type": "performance", - "height": 57455, - "amount": 0 - }, - { - "type": "performance", - "height": 57619, - "amount": 0 - }, - { - "type": "performance", - "height": 57633, - "amount": 0 - }, - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "tenure", - "height": 57398, - "amount": 1 - }, - { - "type": "tenure", - "height": 57412, - "amount": 1 - }, - { - "type": "tenure", - "height": 57426, - "amount": 1 - }, - { - "type": "tenure", - "height": 57441, - "amount": 1 - }, - { - "type": "tenure", - "height": 57455, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "early-grey-deer", - "last_heartbeat": 57775, - "block_added": 52552, - "block": 57780, - "address": "1ZPGU6W5NDFQEhn9v32PfBZ7YvnfmoRyMJfbrCTrqBzdWQi6BGu" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/143.198.104.240/tcp/2154", - "/ip4/51.222.222.26/tcp/2154" - ], - "height": 57723 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 2.4239959716796875, - "penalties": [ - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "performance", - "height": 57665, - "amount": 0 - }, - { - "type": "performance", - "height": 57684, - "amount": 0 - }, - { - "type": "performance", - "height": 57704, - "amount": 0 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - }, - { - "type": "tenure", - "height": 57665, - "amount": 1 - }, - { - "type": "tenure", - "height": 57684, - "amount": 1 - }, - { - "type": "tenure", - "height": 57704, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "brilliant-menthol-cobra", - "last_heartbeat": 57771, - "block_added": 52548, - "block": 57780, - "address": "1ZMyArznjcAGq6H5ax3oEoyiNSf41PJLosUHKg5sfBfxuExqDKD" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/18.216.140.136/tcp/2154"], - "height": 57630 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.944000244140625, - "penalties": [ - { - "type": "performance", - "height": 57765, - "amount": 0 - }, - { - "type": "performance", - "height": 57777, - "amount": 0 - }, - { - "type": "tenure", - "height": 57765, - "amount": 1 - }, - { - "type": "tenure", - "height": 57777, - "amount": 1 - } - ], - "owner": "1a5oTkG3cv77muh1wg76pMBajxh3RoR1zz8ZqP8ijeEGyQmcFft", - "name": "thankful-ocean-toad", - "last_heartbeat": 57773, - "block_added": 52271, - "block": 57780, - "address": "1YfaZAYDP2B3PWSun6J9hqPmd7XSxQ1N2xNc2DdxLVnuh8iF3G2" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1bKCma9WJvRLNkEQQrbXXbnybGVx9DWyqrLDVhpT3jM7LW5xLY4", - "name": "mini-arctic-weasel", - "last_heartbeat": 1, - "block_added": 52189, - "block": 57780, - "address": "1ZYewkJ7oFBqiej48soq9WXNd4En4h32zKFFPnxy9kBsi46Y4H3" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/18.222.81.91/tcp/2154"], - "height": 57692 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0.272003173828125, - "penalties": [ - { - "type": "performance", - "height": 57516, - "amount": 0 - }, - { - "type": "performance", - "height": 57530, - "amount": 0 - }, - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "performance", - "height": 57559, - "amount": 0 - }, - { - "type": "tenure", - "height": 57516, - "amount": 1 - }, - { - "type": "tenure", - "height": 57530, - "amount": 1 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - } - ], - "owner": "1bEFB6JcJ7onc7YVEAMSQMThWT9SCN62AsonJaKZY5t7LqXsU9Z", - "name": "perfect-smoke-locust", - "last_heartbeat": 57770, - "block_added": 52130, - "block": 57780, - "address": "1ZUQYRPmzRDocw2bJwG9DtgQZbXw99rNYLdDpjmD7aJ3SBJGBvz" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": [ - "/p2p/1YjRG26vfH5AuTmNdYpSHy8LoNZmBitWRE2sXCArzWwnCpFLLBc/p2p-circuit/p2p/1YYxaV7Fc39Pzz8WXHo1zK7kvAEPivJn2JEfLQoMbigrGSLNdzQ" - ], - "height": 57555 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.9040069580078125, - "penalties": [ - { - "type": "performance", - "height": 57573, - "amount": 0 - }, - { - "type": "performance", - "height": 57585, - "amount": 0 - }, - { - "type": "performance", - "height": 57601, - "amount": 0 - }, - { - "type": "performance", - "height": 57619, - "amount": 0 - }, - { - "type": "performance", - "height": 57633, - "amount": 0 - }, - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - } - ], - "owner": "1avB3L1a7B61nN8M9P8y53knzTKRMfTh453n4XQc4bckGrZFy6z", - "name": "creamy-cider-chimpanzee", - "last_heartbeat": 57778, - "block_added": 52100, - "block": 57780, - "address": "1YYxaV7Fc39Pzz8WXHo1zK7kvAEPivJn2JEfLQoMbigrGSLNdzQ" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/52.40.248.123/tcp/2154"], - "height": 57670 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 4.1024017333984375, - "penalties": [ - { - "type": "performance", - "height": 57573, - "amount": 0.585601806640625 - }, - { - "type": "performance", - "height": 57559, - "amount": 1.1022491455078125 - }, - { - "type": "performance", - "height": 57619, - "amount": 1.4909210205078125 - }, - { - "type": "performance", - "height": 57585, - "amount": 1.5559539794921875 - }, - { - "type": "performance", - "height": 57601, - "amount": 1.6009979248046875 - }, - { - "type": "performance", - "height": 57633, - "amount": 2.3933258056640625 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - } - ], - "owner": "1aV7KAzcWpTy1YLmGgua14TwhjvXZBY8PYSh9SBqBeLHt8VrdJN", - "name": "quiet-red-dragon", - "last_heartbeat": 57778, - "block_added": 51795, - "block": 57780, - "address": "1Y7xaVqrR8Ci84fh1PmV7NYDWo4d1v9n8JCmCWW3D7i9ZXQCVdb" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "offline", - "listen_addrs": ["/ip4/18.232.161.36/tcp/2154"], - "height": 17454 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 3.9394989013671875, - "penalties": [ - { - "type": "performance", - "height": 57265, - "amount": 0 - }, - { - "type": "performance", - "height": 57280, - "amount": 0 - }, - { - "type": "performance", - "height": 57321, - "amount": 0 - }, - { - "type": "performance", - "height": 57334, - "amount": 0 - }, - { - "type": "performance", - "height": 57346, - "amount": 0 - }, - { - "type": "performance", - "height": 57360, - "amount": 0 - }, - { - "type": "performance", - "height": 57384, - "amount": 0 - }, - { - "type": "performance", - "height": 57398, - "amount": 0 - }, - { - "type": "performance", - "height": 57305, - "amount": 0.097198486328125 - }, - { - "type": "tenure", - "height": 57265, - "amount": 1 - }, - { - "type": "tenure", - "height": 57280, - "amount": 1 - }, - { - "type": "tenure", - "height": 57305, - "amount": 1 - }, - { - "type": "tenure", - "height": 57321, - "amount": 1 - }, - { - "type": "tenure", - "height": 57334, - "amount": 1 - }, - { - "type": "tenure", - "height": 57346, - "amount": 1 - }, - { - "type": "tenure", - "height": 57360, - "amount": 1 - }, - { - "type": "tenure", - "height": 57384, - "amount": 1 - }, - { - "type": "tenure", - "height": 57398, - "amount": 1 - } - ], - "owner": "1aYcwS9EvtbiNkrjQWTqBo5bk8wAmvWTAcRyVtY6dSVqc1weYHR", - "name": "damp-beige-bison", - "last_heartbeat": 57472, - "block_added": 51758, - "block": 57780, - "address": "1ZyLR6PuSW1bBCRPskZb8pbQpyfDahED6A9ikbmB25DNhAUoi4E" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.81.35.101/tcp/2154"], - "height": 57704 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57171, - "amount": 0 - }, - { - "type": "performance", - "height": 57199, - "amount": 0 - }, - { - "type": "performance", - "height": 57185, - "amount": 0.1952056884765625 - }, - { - "type": "performance", - "height": 57225, - "amount": 0.3907928466796875 - }, - { - "type": "performance", - "height": 56981, - "amount": 0.3936004638671875 - }, - { - "type": "performance", - "height": 57213, - "amount": 0.41107177734375 - }, - { - "type": "performance", - "height": 56998, - "amount": 0.489593505859375 - }, - { - "type": "tenure", - "height": 56981, - "amount": 1 - }, - { - "type": "tenure", - "height": 56998, - "amount": 1 - }, - { - "type": "tenure", - "height": 57171, - "amount": 1 - }, - { - "type": "tenure", - "height": 57185, - "amount": 1 - }, - { - "type": "tenure", - "height": 57199, - "amount": 1 - }, - { - "type": "tenure", - "height": 57213, - "amount": 1 - }, - { - "type": "tenure", - "height": 57225, - "amount": 1 - } - ], - "owner": "1aPBTQKmPv4fZpZeewyo2K22iJ6PfrnVDhjavLNx72SFzx6kn2K", - "name": "zealous-pastel-gibbon", - "last_heartbeat": 57776, - "block_added": 51619, - "block": 57780, - "address": "1ZssqG34DZZCLqBx1XhyRv8LhSTjj9szR5dRUrbfYsj3TTWefA4" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": [ - "/p2p/1ZfBoM7AVCkWbakXegpYH7MpFtdnANLbjG3LaHyNUWTsdJXwMTi/p2p-circuit/p2p/1ZvUXiiiJDEKp3fsECSuBQhdVWPcMNsdG8fjAcs6bhPWEyeSFUR" - ], - "height": 57634 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0.272003173828125, - "penalties": [ - { - "type": "performance", - "height": 57321, - "amount": 0 - }, - { - "type": "performance", - "height": 57334, - "amount": 0 - }, - { - "type": "performance", - "height": 57516, - "amount": 0 - }, - { - "type": "performance", - "height": 57530, - "amount": 0 - }, - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "performance", - "height": 57559, - "amount": 0 - }, - { - "type": "tenure", - "height": 57321, - "amount": 1 - }, - { - "type": "tenure", - "height": 57334, - "amount": 1 - }, - { - "type": "tenure", - "height": 57516, - "amount": 1 - }, - { - "type": "tenure", - "height": 57530, - "amount": 1 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - } - ], - "owner": "1a4kNGHFHHPRgSzcEUKrXrqni7UnDdFqFK5SQtYYa6RgBUjaQSL", - "name": "square-scarlet-caribou", - "last_heartbeat": 57770, - "block_added": 51273, - "block": 57780, - "address": "1ZvUXiiiJDEKp3fsECSuBQhdVWPcMNsdG8fjAcs6bhPWEyeSFUR" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.7519989013671875, - "penalties": [ - { - "type": "dkg", - "height": 51817, - "amount": 1 - }, - { - "type": "dkg", - "height": 51851, - "amount": 1 - } - ], - "owner": "1bd4CVJTR9Fj2VngDKZ2uFqFCasYHfWShBhGFVZshkN9S5rkJRB", - "name": "sparkly-dijon-sloth", - "last_heartbeat": 51863, - "block_added": 51143, - "block": 57780, - "address": "1YeF6utcT8EuYcuGB2Y9W5egz8UcchSVrRmb6xgjsxmTK5dMoUh" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.25/tcp/2154"], - "height": 57534 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.7239990234375, - "penalties": [ - { - "type": "performance", - "height": 57738, - "amount": 0 - }, - { - "type": "performance", - "height": 57753, - "amount": 0 - }, - { - "type": "tenure", - "height": 57738, - "amount": 1 - }, - { - "type": "tenure", - "height": 57753, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "loud-vinyl-grasshopper", - "last_heartbeat": 57778, - "block_added": 50702, - "block": 57780, - "address": "1Z2aacQ4cAjZHPHtLwn56gL4TR4UvFAkR2x4J9a3dyFjfmE4267" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/143.198.104.240/tcp/2154", - "/ip4/51.222.222.24/tcp/2154" - ], - "height": 57694 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 3.503997802734375, - "penalties": [ - { - "type": "performance", - "height": 57601, - "amount": 0 - }, - { - "type": "performance", - "height": 57619, - "amount": 0 - }, - { - "type": "performance", - "height": 57633, - "amount": 0 - }, - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "performance", - "height": 57665, - "amount": 0 - }, - { - "type": "performance", - "height": 57684, - "amount": 0 - }, - { - "type": "performance", - "height": 57704, - "amount": 0 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - }, - { - "type": "tenure", - "height": 57665, - "amount": 1 - }, - { - "type": "tenure", - "height": 57684, - "amount": 1 - }, - { - "type": "tenure", - "height": 57704, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "overt-licorice-goldfish", - "last_heartbeat": 57773, - "block_added": 50699, - "block": 57780, - "address": "1YxuHDUJCgqCJ9UgK8hyGhS2WDLPZKzFNjiQnDoiaryvT9JQNuH" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/51.222.222.23/tcp/2154", - "/p2p/1Zpy7FoMr77QL2ussk2VfkvN6TicdvpPwAeWyfDZXyYDcxpDMkZ/p2p-circuit/p2p/1YEPkpDTqD1fFf6N61PBLQnwTQiMjUwwxHET2GDrx1giXzji24C" - ], - "height": 57732 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 2.4239959716796875, - "penalties": [ - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "performance", - "height": 57665, - "amount": 0 - }, - { - "type": "performance", - "height": 57684, - "amount": 0 - }, - { - "type": "performance", - "height": 57704, - "amount": 0 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - }, - { - "type": "tenure", - "height": 57665, - "amount": 1 - }, - { - "type": "tenure", - "height": 57684, - "amount": 1 - }, - { - "type": "tenure", - "height": 57704, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "restless-metal-unicorn", - "last_heartbeat": 57771, - "block_added": 50697, - "block": 57780, - "address": "1YEPkpDTqD1fFf6N61PBLQnwTQiMjUwwxHET2GDrx1giXzji24C" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.22/tcp/2154"], - "height": 57736 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57412, - "amount": 0 - }, - { - "type": "performance", - "height": 57426, - "amount": 0 - }, - { - "type": "performance", - "height": 57441, - "amount": 0 - }, - { - "type": "performance", - "height": 57455, - "amount": 0 - }, - { - "type": "performance", - "height": 57483, - "amount": 0 - }, - { - "type": "tenure", - "height": 57412, - "amount": 1 - }, - { - "type": "tenure", - "height": 57426, - "amount": 1 - }, - { - "type": "tenure", - "height": 57441, - "amount": 1 - }, - { - "type": "tenure", - "height": 57455, - "amount": 1 - }, - { - "type": "tenure", - "height": 57483, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "small-frost-locust", - "last_heartbeat": 57777, - "block_added": 50695, - "block": 57780, - "address": "1ZLZCVsNXfnH8KPD5hjYshSmWDiWw2imVFbq8rhnUKHpgL3LYWh" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.21/tcp/2154"], - "height": 57671 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 5.011993408203125, - "penalties": [ - { - "type": "performance", - "height": 57684, - "amount": 0 - }, - { - "type": "performance", - "height": 57704, - "amount": 0 - }, - { - "type": "performance", - "height": 57738, - "amount": 0 - }, - { - "type": "performance", - "height": 57753, - "amount": 0 - }, - { - "type": "performance", - "height": 57765, - "amount": 0 - }, - { - "type": "performance", - "height": 57777, - "amount": 0 - }, - { - "type": "tenure", - "height": 57684, - "amount": 1 - }, - { - "type": "tenure", - "height": 57704, - "amount": 1 - }, - { - "type": "tenure", - "height": 57738, - "amount": 1 - }, - { - "type": "tenure", - "height": 57753, - "amount": 1 - }, - { - "type": "tenure", - "height": 57765, - "amount": 1 - }, - { - "type": "tenure", - "height": 57777, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "sweet-bubblegum-peacock", - "last_heartbeat": 57773, - "block_added": 50694, - "block": 57780, - "address": "1YNrqPWwBzFDFZrGdnTk7pnkQPMLXc51jJ1WCjuqNozukpUqv7e" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.20/tcp/2154"], - "height": 57589 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57225, - "amount": 0 - }, - { - "type": "performance", - "height": 57334, - "amount": 0 - }, - { - "type": "performance", - "height": 57346, - "amount": 0 - }, - { - "type": "performance", - "height": 57360, - "amount": 0 - }, - { - "type": "performance", - "height": 57239, - "amount": 0.09759521484375 - }, - { - "type": "tenure", - "height": 57225, - "amount": 1 - }, - { - "type": "tenure", - "height": 57239, - "amount": 1 - }, - { - "type": "tenure", - "height": 57334, - "amount": 1 - }, - { - "type": "tenure", - "height": 57346, - "amount": 1 - }, - { - "type": "tenure", - "height": 57360, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "hollow-lemonade-aardvark", - "last_heartbeat": 57769, - "block_added": 50673, - "block": 57780, - "address": "1ZJyb9E4AC9uvyrYU1692ahwZzpMhdcrnrftdgx7Cz9xMXvznHi" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.19/tcp/2154"], - "height": 57709 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57199, - "amount": 0 - }, - { - "type": "performance", - "height": 57213, - "amount": 0 - }, - { - "type": "performance", - "height": 57185, - "amount": 0.0995941162109375 - }, - { - "type": "tenure", - "height": 57185, - "amount": 1 - }, - { - "type": "tenure", - "height": 57199, - "amount": 1 - }, - { - "type": "tenure", - "height": 57213, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "calm-cinnamon-falcon", - "last_heartbeat": 57770, - "block_added": 50644, - "block": 57780, - "address": "1ZCGDMuXAxG9LnT96p4SyvS9HMEua263bx2wg8gJ1xCWsJVQ43K" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.18/tcp/2154"], - "height": 57600 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57147, - "amount": 0 - }, - { - "type": "performance", - "height": 57158, - "amount": 0 - }, - { - "type": "performance", - "height": 57171, - "amount": 0 - }, - { - "type": "performance", - "height": 57199, - "amount": 0 - }, - { - "type": "performance", - "height": 57213, - "amount": 0 - }, - { - "type": "performance", - "height": 57185, - "amount": 0.0995941162109375 - }, - { - "type": "tenure", - "height": 57147, - "amount": 1 - }, - { - "type": "tenure", - "height": 57158, - "amount": 1 - }, - { - "type": "tenure", - "height": 57171, - "amount": 1 - }, - { - "type": "tenure", - "height": 57185, - "amount": 1 - }, - { - "type": "tenure", - "height": 57199, - "amount": 1 - }, - { - "type": "tenure", - "height": 57213, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "silly-lavender-cod", - "last_heartbeat": 57769, - "block_added": 50639, - "block": 57780, - "address": "1Za9xHS9uLiifxA277kHR6VzzRp28uFeacPhyFLNnxbuW8WTBuF" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.17/tcp/2154"], - "height": 57692 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0.99200439453125, - "penalties": [ - { - "type": "performance", - "height": 57777, - "amount": 0 - }, - { - "type": "tenure", - "height": 57777, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "shallow-butter-shark", - "last_heartbeat": 57777, - "block_added": 50636, - "block": 57780, - "address": "1Z9zkkswtjmrHsu7XK21rdxprwhNmhqpX4NirghEynauaohVjYu" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/51.222.222.16/tcp/2154"], - "height": 57662 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.3520050048828125, - "penalties": [ - { - "type": "performance", - "height": 57483, - "amount": 0 - }, - { - "type": "performance", - "height": 57498, - "amount": 0 - }, - { - "type": "performance", - "height": 57530, - "amount": 0 - }, - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "performance", - "height": 57559, - "amount": 0 - }, - { - "type": "performance", - "height": 57573, - "amount": 0 - }, - { - "type": "performance", - "height": 57585, - "amount": 0 - }, - { - "type": "performance", - "height": 57684, - "amount": 0 - }, - { - "type": "tenure", - "height": 57483, - "amount": 1 - }, - { - "type": "tenure", - "height": 57498, - "amount": 1 - }, - { - "type": "tenure", - "height": 57530, - "amount": 1 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57684, - "amount": 1 - } - ], - "owner": "1aTZ28SE9BHkiLehdxaDGLVE6tyEEDvtj8YHjvYY6wmX1ANB25H", - "name": "amusing-sepia-caterpillar", - "last_heartbeat": 57771, - "block_added": 50614, - "block": 57780, - "address": "1Y8Rr9WaEcQBWn7Jh7QnXrctZ99a15PQEpoLQHCNTeZcDY5ziA7" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/27.33.106.122/tcp/2154"], - "height": 57725 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57199, - "amount": 0 - }, - { - "type": "performance", - "height": 57213, - "amount": 0 - }, - { - "type": "performance", - "height": 57225, - "amount": 0 - }, - { - "type": "performance", - "height": 57254, - "amount": 0 - }, - { - "type": "performance", - "height": 57265, - "amount": 0 - }, - { - "type": "performance", - "height": 57280, - "amount": 0 - }, - { - "type": "performance", - "height": 57321, - "amount": 0 - }, - { - "type": "performance", - "height": 57334, - "amount": 0 - }, - { - "type": "performance", - "height": 57305, - "amount": 0.097198486328125 - }, - { - "type": "performance", - "height": 57239, - "amount": 2.3732757568359375 - }, - { - "type": "tenure", - "height": 57199, - "amount": 1 - }, - { - "type": "tenure", - "height": 57213, - "amount": 1 - }, - { - "type": "tenure", - "height": 57225, - "amount": 1 - }, - { - "type": "tenure", - "height": 57239, - "amount": 1 - }, - { - "type": "tenure", - "height": 57254, - "amount": 1 - }, - { - "type": "tenure", - "height": 57265, - "amount": 1 - }, - { - "type": "tenure", - "height": 57280, - "amount": 1 - }, - { - "type": "tenure", - "height": 57305, - "amount": 1 - }, - { - "type": "tenure", - "height": 57321, - "amount": 1 - }, - { - "type": "tenure", - "height": 57334, - "amount": 1 - } - ], - "owner": "1abzm1EJjtzKmh5r37nczeTWbKxmP2MLQa11sz5xwGF8YFozCLW", - "name": "sneaky-marigold-cow", - "last_heartbeat": 57769, - "block_added": 50328, - "block": 57780, - "address": "1YWPtU4sFrGVx7V3Br5AM44G16YvRm2cLofSpZmhYJxysiXxhH6" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/157.230.179.75/tcp/2154", - "/ip4/3.14.135.248/tcp/2154" - ], - "height": 57686 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57254, - "amount": 0 - }, - { - "type": "performance", - "height": 57265, - "amount": 0 - }, - { - "type": "performance", - "height": 57280, - "amount": 0 - }, - { - "type": "performance", - "height": 57321, - "amount": 0 - }, - { - "type": "performance", - "height": 57334, - "amount": 0 - }, - { - "type": "performance", - "height": 57305, - "amount": 0.097198486328125 - }, - { - "type": "performance", - "height": 57239, - "amount": 0.09759521484375 - }, - { - "type": "tenure", - "height": 57239, - "amount": 1 - }, - { - "type": "tenure", - "height": 57254, - "amount": 1 - }, - { - "type": "tenure", - "height": 57265, - "amount": 1 - }, - { - "type": "tenure", - "height": 57280, - "amount": 1 - }, - { - "type": "tenure", - "height": 57305, - "amount": 1 - }, - { - "type": "tenure", - "height": 57321, - "amount": 1 - }, - { - "type": "tenure", - "height": 57334, - "amount": 1 - } - ], - "owner": "1aX7Ns19teoSbHPZCjwvtxwmJSRn5hQgZZsrYkoGixwKWfr5F53", - "name": "docile-sangria-kookaburra", - "last_heartbeat": 57772, - "block_added": 49836, - "block": 57780, - "address": "1ZvYhyswiiGjQz8y7uxdi98LA9MoM1yauQAHhdX8oUH2FJWpX1T" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 51102, - "amount": 0.0959930419921875 - }, - { - "type": "performance", - "height": 51077, - "amount": 0.100006103515625 - }, - { - "type": "performance", - "height": 51089, - "amount": 0.2960052490234375 - }, - { - "type": "performance", - "height": 51248, - "amount": 0.419677734375 - }, - { - "type": "performance", - "height": 51271, - "amount": 0.4904022216796875 - }, - { - "type": "performance", - "height": 51260, - "amount": 0.6880035400390625 - }, - { - "type": "tenure", - "height": 51077, - "amount": 1 - }, - { - "type": "tenure", - "height": 51089, - "amount": 1 - }, - { - "type": "tenure", - "height": 51102, - "amount": 1 - }, - { - "type": "tenure", - "height": 51248, - "amount": 1 - }, - { - "type": "tenure", - "height": 51260, - "amount": 1 - }, - { - "type": "tenure", - "height": 51271, - "amount": 1 - } - ], - "owner": "1aTrjfqNa7q8T18VdTwLSJEG5a9jMmfkq1TZZQk9yMo3hQqGjMp", - "name": "bright-purple-hornet", - "last_heartbeat": 51622, - "block_added": 49718, - "block": 57780, - "address": "1Z5mHkZuDUEijpMZsTS1Y3kkbTjKoPEGAhDY9mXXvPr2gyH8irP" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/135.148.26.233/tcp/2154"], - "height": 57684 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.011993408203125, - "penalties": [ - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "performance", - "height": 57559, - "amount": 0 - }, - { - "type": "performance", - "height": 57573, - "amount": 0 - }, - { - "type": "performance", - "height": 57684, - "amount": 0 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57684, - "amount": 1 - } - ], - "owner": "1anVbFBA4Zqgei1Vs4uqMa8xFkiuosbVB4X4WykVfR9187YF3Gh", - "name": "real-orchid-trout", - "last_heartbeat": 57775, - "block_added": 49631, - "block": 57780, - "address": "1YaLyfKpqoUUaJMt6xHe1f3hzy8uY4nSHXTcQX2NbJoADgKjhaT" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "offline", - "listen_addrs": [ - "/p2p/1a1oxkzJWZSzUnu3y6gjfcNnp9a7VvZtoeM8hM9SPEZCRcmMrpD/p2p-circuit/p2p/1Z7LbpCvefzo58nxDVe6MNPLJ5RgAdTkQJr54ZZr8UQLgtvyRrv" - ], - "height": 57498 - }, - "stake_status": "unstaked", - "stake": 0, - "penalty": 3.5028839111328125, - "penalties": [ - { - "type": "performance", - "height": 51102, - "amount": 0 - }, - { - "type": "performance", - "height": 51120, - "amount": 0 - }, - { - "type": "performance", - "height": 51131, - "amount": 0 - }, - { - "type": "performance", - "height": 51156, - "amount": 0 - }, - { - "type": "performance", - "height": 51191, - "amount": 0 - }, - { - "type": "performance", - "height": 51143, - "amount": 0.096405029296875 - }, - { - "type": "performance", - "height": 51168, - "amount": 0.09759521484375 - }, - { - "type": "tenure", - "height": 51102, - "amount": 1 - }, - { - "type": "tenure", - "height": 51120, - "amount": 1 - }, - { - "type": "tenure", - "height": 51131, - "amount": 1 - }, - { - "type": "tenure", - "height": 51143, - "amount": 1 - }, - { - "type": "tenure", - "height": 51156, - "amount": 1 - }, - { - "type": "tenure", - "height": 51168, - "amount": 1 - }, - { - "type": "tenure", - "height": 51191, - "amount": 1 - } - ], - "owner": "1a4kNGHFHHPRgSzcEUKrXrqni7UnDdFqFK5SQtYYa6RgBUjaQSL", - "name": "real-marmalade-millipede", - "last_heartbeat": 51260, - "block_added": 49427, - "block": 57780, - "address": "1Z7LbpCvefzo58nxDVe6MNPLJ5RgAdTkQJr54ZZr8UQLgtvyRrv" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.216.185.4/tcp/2154"], - "height": 57725 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 2.9297027587890625, - "penalties": [ - { - "type": "performance", - "height": 57765, - "amount": 0 - }, - { - "type": "performance", - "height": 57585, - "amount": 0.298797607421875 - }, - { - "type": "performance", - "height": 57573, - "amount": 0.3907928466796875 - }, - { - "type": "performance", - "height": 57545, - "amount": 0.39520263671875 - }, - { - "type": "performance", - "height": 57559, - "amount": 0.39520263671875 - }, - { - "type": "performance", - "height": 57619, - "amount": 0.3975982666015625 - }, - { - "type": "performance", - "height": 57601, - "amount": 0.485992431640625 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57765, - "amount": 1 - } - ], - "owner": "1avoE626bzb1QdYco4yhhe3ahe8iYxp2PKkPPtfZmwNG4jaJ4vG", - "name": "quaint-grape-condor", - "last_heartbeat": 57770, - "block_added": 48996, - "block": 57780, - "address": "1YDxa3tQ82QHuHMjxqL7K8iUYMzRAniPsJA8nr4japhqw79LCeK" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "offline", - "listen_addrs": ["/ip4/54.216.224.10/tcp/2154"], - "height": 54927 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.2440032958984375, - "penalties": [ - { - "type": "performance", - "height": 54806, - "amount": 0 - }, - { - "type": "performance", - "height": 54821, - "amount": 0 - }, - { - "type": "performance", - "height": 54838, - "amount": 0 - }, - { - "type": "tenure", - "height": 54806, - "amount": 1 - }, - { - "type": "tenure", - "height": 54821, - "amount": 1 - }, - { - "type": "tenure", - "height": 54838, - "amount": 1 - } - ], - "owner": "1a8jaYof7PzvjcwrGty1EXcimpFuwKahafAsKeVyKN9VGohAHGz", - "name": "rural-honeysuckle-armadillo", - "last_heartbeat": 54965, - "block_added": 48979, - "block": 57780, - "address": "1YW65RUBQHkE43N1gp4ps9msUTqKaBqaWsaRPbKUreWsDUw8WXx" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/107.23.177.78/tcp/2154"], - "height": 57692 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 4.38800048828125, - "penalties": [ - { - "type": "performance", - "height": 57704, - "amount": 0 - }, - { - "type": "performance", - "height": 57738, - "amount": 0 - }, - { - "type": "performance", - "height": 57753, - "amount": 0 - }, - { - "type": "performance", - "height": 57765, - "amount": 0 - }, - { - "type": "performance", - "height": 57777, - "amount": 0 - }, - { - "type": "tenure", - "height": 57704, - "amount": 1 - }, - { - "type": "tenure", - "height": 57738, - "amount": 1 - }, - { - "type": "tenure", - "height": 57753, - "amount": 1 - }, - { - "type": "tenure", - "height": 57765, - "amount": 1 - }, - { - "type": "tenure", - "height": 57777, - "amount": 1 - } - ], - "owner": "1aPexPoA1CpezaSHPjY2Lz2c15MzvQmP2M7RczExHmonQnRkBC3", - "name": "cheery-saffron-fish", - "last_heartbeat": 57772, - "block_added": 48739, - "block": 57780, - "address": "1ZLQpfQVoz7iGAByqENCzLKm8VNLxx8YrKQ1CLT6n5PPk2ChTJm" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/65.21.73.155/tcp/2154"], - "height": 57699 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57321, - "amount": 0 - }, - { - "type": "performance", - "height": 57334, - "amount": 0 - }, - { - "type": "performance", - "height": 57346, - "amount": 0 - }, - { - "type": "performance", - "height": 57360, - "amount": 0 - }, - { - "type": "performance", - "height": 57384, - "amount": 0 - }, - { - "type": "performance", - "height": 57398, - "amount": 0 - }, - { - "type": "performance", - "height": 57412, - "amount": 0 - }, - { - "type": "performance", - "height": 57426, - "amount": 0 - }, - { - "type": "performance", - "height": 57441, - "amount": 0 - }, - { - "type": "performance", - "height": 57455, - "amount": 0 - }, - { - "type": "performance", - "height": 57483, - "amount": 0 - }, - { - "type": "performance", - "height": 57305, - "amount": 0.097198486328125 - }, - { - "type": "tenure", - "height": 57305, - "amount": 1 - }, - { - "type": "tenure", - "height": 57321, - "amount": 1 - }, - { - "type": "tenure", - "height": 57334, - "amount": 1 - }, - { - "type": "tenure", - "height": 57346, - "amount": 1 - }, - { - "type": "tenure", - "height": 57360, - "amount": 1 - }, - { - "type": "tenure", - "height": 57384, - "amount": 1 - }, - { - "type": "tenure", - "height": 57398, - "amount": 1 - }, - { - "type": "tenure", - "height": 57412, - "amount": 1 - }, - { - "type": "tenure", - "height": 57426, - "amount": 1 - }, - { - "type": "tenure", - "height": 57441, - "amount": 1 - }, - { - "type": "tenure", - "height": 57455, - "amount": 1 - }, - { - "type": "tenure", - "height": 57483, - "amount": 1 - } - ], - "owner": "1ajWa9pdk12GqwkgeYEmAvYu1BsWSJzkhv151Ze2n5pruuKwijv", - "name": "festive-mint-osprey", - "last_heartbeat": 57772, - "block_added": 48003, - "block": 57780, - "address": "1YQTkckbXNZCvsXjGoRt9Q1KT5LU4KxqJ5AqbedPkQz16GsiFNv" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/157.90.182.223/tcp/2154"], - "height": 57705 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.3679962158203125, - "penalties": [ - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "performance", - "height": 57559, - "amount": 0 - }, - { - "type": "performance", - "height": 57573, - "amount": 0 - }, - { - "type": "performance", - "height": 57777, - "amount": 0 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57777, - "amount": 1 - } - ], - "owner": "1ajWa9pdk12GqwkgeYEmAvYu1BsWSJzkhv151Ze2n5pruuKwijv", - "name": "jolly-grape-cormorant", - "last_heartbeat": 57771, - "block_added": 48003, - "block": 57780, - "address": "1ZV83cUCR5Sn46XJx4EMCFi7v2KiK4jutH4GQgsPfw5NWqVMcoQ" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/157.90.182.100/tcp/2154"], - "height": 57668 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57441, - "amount": 0 - }, - { - "type": "performance", - "height": 57455, - "amount": 0 - }, - { - "type": "performance", - "height": 57483, - "amount": 0 - }, - { - "type": "performance", - "height": 57498, - "amount": 0 - }, - { - "type": "performance", - "height": 57516, - "amount": 0 - }, - { - "type": "tenure", - "height": 57441, - "amount": 1 - }, - { - "type": "tenure", - "height": 57455, - "amount": 1 - }, - { - "type": "tenure", - "height": 57483, - "amount": 1 - }, - { - "type": "tenure", - "height": 57498, - "amount": 1 - }, - { - "type": "tenure", - "height": 57516, - "amount": 1 - } - ], - "owner": "1ajWa9pdk12GqwkgeYEmAvYu1BsWSJzkhv151Ze2n5pruuKwijv", - "name": "silly-spruce-tuna", - "last_heartbeat": 57769, - "block_added": 48003, - "block": 57780, - "address": "1ZVM5goX3XWjahieRP2nqU4zKwcgtVesjUZhRSsba1KksmuHBbb" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/135.181.178.105/tcp/2154", - "/ip4/143.198.104.240/tcp/2154" - ], - "height": 57668 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57455, - "amount": 0 - }, - { - "type": "performance", - "height": 57483, - "amount": 0 - }, - { - "type": "performance", - "height": 57498, - "amount": 0 - }, - { - "type": "performance", - "height": 57441, - "amount": 0.0951995849609375 - }, - { - "type": "tenure", - "height": 57441, - "amount": 1 - }, - { - "type": "tenure", - "height": 57455, - "amount": 1 - }, - { - "type": "tenure", - "height": 57483, - "amount": 1 - }, - { - "type": "tenure", - "height": 57498, - "amount": 1 - } - ], - "owner": "1ajWa9pdk12GqwkgeYEmAvYu1BsWSJzkhv151Ze2n5pruuKwijv", - "name": "tall-raspberry-reindeer", - "last_heartbeat": 57769, - "block_added": 48000, - "block": 57780, - "address": "1ZbvcJb8r6knjAuwoPS5KtuWDSj2peqLdLqYh48yosQbbpRjJRR" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.208.167.101/tcp/2154"], - "height": 57268 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57346, - "amount": 0.3975982666015625 - }, - { - "type": "performance", - "height": 57321, - "amount": 0.5915985107421875 - }, - { - "type": "performance", - "height": 57360, - "amount": 0.823883056640625 - }, - { - "type": "performance", - "height": 57334, - "amount": 1.2197113037109375 - }, - { - "type": "tenure", - "height": 57321, - "amount": 1 - }, - { - "type": "tenure", - "height": 57334, - "amount": 1 - }, - { - "type": "tenure", - "height": 57346, - "amount": 1 - }, - { - "type": "tenure", - "height": 57360, - "amount": 1 - } - ], - "owner": "1aJnWbphJGN9oQt9UCkdN9NxemuoRAz2nD4saSZaTotsttaF3Jf", - "name": "magnificent-fuzzy-haddock", - "last_heartbeat": 57773, - "block_added": 47982, - "block": 57780, - "address": "1ZZZ6jstSLCvmut5SVy2sCbDGeFKX6bdYJYsG1qQihjRcUXH8yT" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/79.209.216.136/tcp/2154"], - "height": 57723 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 4.3679962158203125, - "penalties": [ - { - "type": "performance", - "height": 57704, - "amount": 0 - }, - { - "type": "performance", - "height": 57738, - "amount": 0 - }, - { - "type": "performance", - "height": 57753, - "amount": 0 - }, - { - "type": "performance", - "height": 57765, - "amount": 0 - }, - { - "type": "performance", - "height": 57777, - "amount": 0 - }, - { - "type": "tenure", - "height": 57704, - "amount": 1 - }, - { - "type": "tenure", - "height": 57738, - "amount": 1 - }, - { - "type": "tenure", - "height": 57753, - "amount": 1 - }, - { - "type": "tenure", - "height": 57765, - "amount": 1 - }, - { - "type": "tenure", - "height": 57777, - "amount": 1 - } - ], - "owner": "1bJs4KSftnw2VhoZkxiSSovsoWjGDWjrmBrREePg5MHfGnFk655", - "name": "petite-blue-beetle", - "last_heartbeat": 57776, - "block_added": 47864, - "block": 57780, - "address": "1YJRWb3x14gz5C33Jp3VuXrnEMxgca48vv7ART5iMBcHnGs4grL" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.208.251.218/tcp/2154"], - "height": 57553 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57147, - "amount": 0 - }, - { - "type": "performance", - "height": 57346, - "amount": 0.096405029296875 - }, - { - "type": "performance", - "height": 57334, - "amount": 0.19720458984375 - }, - { - "type": "performance", - "height": 57131, - "amount": 0.2855987548828125 - }, - { - "type": "performance", - "height": 57113, - "amount": 0.7803955078125 - }, - { - "type": "tenure", - "height": 57113, - "amount": 1 - }, - { - "type": "tenure", - "height": 57131, - "amount": 1 - }, - { - "type": "tenure", - "height": 57147, - "amount": 1 - }, - { - "type": "tenure", - "height": 57334, - "amount": 1 - }, - { - "type": "tenure", - "height": 57346, - "amount": 1 - } - ], - "owner": "1aJnWbphJGN9oQt9UCkdN9NxemuoRAz2nD4saSZaTotsttaF3Jf", - "name": "passive-sepia-sparrow", - "last_heartbeat": 57771, - "block_added": 47800, - "block": 57780, - "address": "1ZHoSRYx5b8djJNQDVxC3NAJMqvpojRM3nkqXFQ6rLDNNzTmwro" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/97.118.156.174/tcp/2154", - "/p2p/1YMCJx48nwiEWFsDnApaz1zKpUWqVG38kVruS4AFzRbvknMcBjb/p2p-circuit/p2p/1YLgpJzDFSGk2paHE4ooC32Lz2poX3y8CdkwUvuRjj6GWg81q6D" - ], - "height": 57728 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 56880, - "amount": 0 - }, - { - "type": "performance", - "height": 56893, - "amount": 0 - }, - { - "type": "performance", - "height": 56908, - "amount": 0 - }, - { - "type": "tenure", - "height": 56880, - "amount": 1 - }, - { - "type": "tenure", - "height": 56893, - "amount": 1 - }, - { - "type": "tenure", - "height": 56908, - "amount": 1 - } - ], - "owner": "1b4WiA7V1qnmHkGGkNbUKNz1npbJS3iD87xak1mJwPmmBPmqTci", - "name": "amateur-denim-pike", - "last_heartbeat": 57774, - "block_added": 47129, - "block": 57780, - "address": "1YLgpJzDFSGk2paHE4ooC32Lz2poX3y8CdkwUvuRjj6GWg81q6D" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "unstaked", - "stake": 0, - "penalty": 0, - "penalties": [ - { - "type": "dkg", - "height": 52676, - "amount": 1 - }, - { - "type": "performance", - "height": 52446, - "amount": 0 - }, - { - "type": "performance", - "height": 52457, - "amount": 0 - }, - { - "type": "performance", - "height": 52642, - "amount": 0 - }, - { - "type": "performance", - "height": 52653, - "amount": 0 - }, - { - "type": "performance", - "height": 52665, - "amount": 0 - }, - { - "type": "performance", - "height": 52679, - "amount": 0.0955963134765625 - }, - { - "type": "performance", - "height": 52694, - "amount": 0.946441650390625 - }, - { - "type": "tenure", - "height": 52446, - "amount": 1 - }, - { - "type": "tenure", - "height": 52457, - "amount": 1 - }, - { - "type": "tenure", - "height": 52642, - "amount": 1 - }, - { - "type": "tenure", - "height": 52653, - "amount": 1 - }, - { - "type": "tenure", - "height": 52665, - "amount": 1 - }, - { - "type": "tenure", - "height": 52679, - "amount": 1 - }, - { - "type": "tenure", - "height": 52694, - "amount": 1 - } - ], - "owner": "1aLVi6Z9qcraQwLAsqdVydCTErZtKyDgUKgcQCJ9JTBbJoxCC77", - "name": "brave-cyan-eagle", - "last_heartbeat": 52852, - "block_added": 46753, - "block": 57780, - "address": "1YgYM95SJwMtAfSq8K4H2uvo9NvHS6k3U1N26LeAxUj6RhM8VfE" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1b7f7BhDcuatz7ricU8p918FBkHURY6mxnKdk6dXBfm7qCtGLnw", - "name": "teeny-tawny-hyena", - "last_heartbeat": 1, - "block_added": 46394, - "block": 57780, - "address": "1YJpb6YksS8moNVGRBjs77MZ1vrdy5AESbwC6oGtzfXmcGaL9Jg" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.195.147.195/tcp/2154"], - "height": 57677 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57092, - "amount": 0 - }, - { - "type": "performance", - "height": 57113, - "amount": 0 - }, - { - "type": "performance", - "height": 57131, - "amount": 0 - }, - { - "type": "performance", - "height": 57147, - "amount": 0 - }, - { - "type": "performance", - "height": 57158, - "amount": 0 - }, - { - "type": "tenure", - "height": 57092, - "amount": 1 - }, - { - "type": "tenure", - "height": 57113, - "amount": 1 - }, - { - "type": "tenure", - "height": 57131, - "amount": 1 - }, - { - "type": "tenure", - "height": 57147, - "amount": 1 - }, - { - "type": "tenure", - "height": 57158, - "amount": 1 - } - ], - "owner": "1aYPkgUsZphXJvvcMbTuikfr3KRMYGRAPGtHKSakVcqzehajbLK", - "name": "attractive-violet-lark", - "last_heartbeat": 57774, - "block_added": 46301, - "block": 57780, - "address": "1YCaXHnZLvx8tZptK6x6nevogdvhsdJedQ1EiEELZjMWgKZofBu" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.209.187.197/tcp/2154"], - "height": 57602 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 56732, - "amount": 0.5919952392578125 - }, - { - "type": "performance", - "height": 56751, - "amount": 1.1962738037109375 - }, - { - "type": "tenure", - "height": 56732, - "amount": 1 - }, - { - "type": "tenure", - "height": 56751, - "amount": 1 - } - ], - "owner": "1bi8fa75vFtEFWn1JQpQg5FDvHeqRuxjoSXTVVzbRxyb3S6HmDW", - "name": "handsome-blood-mustang", - "last_heartbeat": 57769, - "block_added": 46256, - "block": 57780, - "address": "1Z8pQquJoYLbAPQP8UCcTBdiRJHc1qy8RUHCGntTG8Fvk7xspYQ" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "offline", - "listen_addrs": ["/ip4/52.14.178.143/tcp/2154"], - "height": 57689 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 9.630126953125, - "penalties": [ - { - "type": "performance", - "height": 57738, - "amount": 8.668807983398438 - }, - { - "type": "tenure", - "height": 57738, - "amount": 1 - } - ], - "owner": "1bbTarsZdyE8gtdNM48hNFJE6z7aiXQfT1WLJuwRcxczvjWMfAj", - "name": "oblong-rose-salmon", - "last_heartbeat": 57698, - "block_added": 46131, - "block": 57780, - "address": "1YmT6uzyBhrnm4jGGcniFuwyfBjRjQfvNbkfnYKAuUz5SToREhT" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "offline", - "listen_addrs": ["/ip4/54.165.11.53/tcp/2154"], - "height": 57569 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 2.63623046875, - "penalties": [ - { - "type": "performance", - "height": 57483, - "amount": 0 - }, - { - "type": "performance", - "height": 57498, - "amount": 0 - }, - { - "type": "performance", - "height": 57530, - "amount": 0.0955963134765625 - }, - { - "type": "performance", - "height": 57516, - "amount": 0.1927947998046875 - }, - { - "type": "tenure", - "height": 57483, - "amount": 1 - }, - { - "type": "tenure", - "height": 57498, - "amount": 1 - }, - { - "type": "tenure", - "height": 57516, - "amount": 1 - }, - { - "type": "tenure", - "height": 57530, - "amount": 1 - } - ], - "owner": "1b2LMHZmhyqz18rGizsGbjyfZ8REjwsHvG3QhkHZdRjTbDmEgpf", - "name": "silly-neon-okapi", - "last_heartbeat": 57601, - "block_added": 45809, - "block": 57780, - "address": "1YDZyKhsvvchsEgbpucD9t2ATMSNhkaktMffTUWmytJ9o5sAaYD" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1bZfPLcdfCJDigYqp5exTBJiiRzKPxBHj11NNiAaMqTr5UqM1BR", - "name": "macho-lavender-duck", - "last_heartbeat": 1, - "block_added": 45697, - "block": 57780, - "address": "1YmFWY299j3VjrbCFvs6sRKJZj5YL125Bex1CkRfZHJujgJY7J9" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.245.230.192/tcp/2154"], - "height": 57715 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57321, - "amount": 0 - }, - { - "type": "performance", - "height": 57334, - "amount": 0 - }, - { - "type": "performance", - "height": 57346, - "amount": 0 - }, - { - "type": "performance", - "height": 57360, - "amount": 0 - }, - { - "type": "performance", - "height": 57384, - "amount": 0 - }, - { - "type": "performance", - "height": 57398, - "amount": 0 - }, - { - "type": "performance", - "height": 57412, - "amount": 0 - }, - { - "type": "performance", - "height": 57426, - "amount": 0 - }, - { - "type": "performance", - "height": 57305, - "amount": 0.097198486328125 - }, - { - "type": "tenure", - "height": 57305, - "amount": 1 - }, - { - "type": "tenure", - "height": 57321, - "amount": 1 - }, - { - "type": "tenure", - "height": 57334, - "amount": 1 - }, - { - "type": "tenure", - "height": 57346, - "amount": 1 - }, - { - "type": "tenure", - "height": 57360, - "amount": 1 - }, - { - "type": "tenure", - "height": 57384, - "amount": 1 - }, - { - "type": "tenure", - "height": 57398, - "amount": 1 - }, - { - "type": "tenure", - "height": 57412, - "amount": 1 - }, - { - "type": "tenure", - "height": 57426, - "amount": 1 - } - ], - "owner": "1aKoBwEpWhKL7aW4U5pcnKwUWoFzy9ppJWdq9xyBELrVcNThXwd", - "name": "acidic-shadow-cougar", - "last_heartbeat": 57770, - "block_added": 45404, - "block": 57780, - "address": "1ZN2CcXc3EXyDkbBJ93nLuWK1Crd2vA3Vs8Kth3AgRFsz4MK91A" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/116.24.64.79/tcp/1275", - "/ip4/116.24.64.79/tcp/2154", - "/ip4/157.230.10.25/tcp/2154" - ], - "height": 57611 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.5677642822265625, - "penalties": [ - { - "type": "performance", - "height": 57601, - "amount": 0 - }, - { - "type": "performance", - "height": 57619, - "amount": 0 - }, - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "performance", - "height": 57633, - "amount": 0.0955963134765625 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - } - ], - "owner": "1aCjBMAWymv9x7kXTvKVsTe7tBkSyWoR5uzkQ49SG1tKtYwYG6n", - "name": "quick-satin-shell", - "last_heartbeat": 57776, - "block_added": 44792, - "block": 57780, - "address": "1YPws85sTKu9rf5gBo9JYCUE1muDDrBhVkjUphDnskkk55RruVf" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "offline", - "listen_addrs": ["/ip4/3.11.155.41/tcp/2154"], - "height": 55661 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 10.198928833007812, - "penalties": [ - { - "type": "performance", - "height": 55655, - "amount": 0 - }, - { - "type": "performance", - "height": 55674, - "amount": 0 - }, - { - "type": "performance", - "height": 55694, - "amount": 7.476837158203125 - }, - { - "type": "tenure", - "height": 55655, - "amount": 1 - }, - { - "type": "tenure", - "height": 55674, - "amount": 1 - }, - { - "type": "tenure", - "height": 55694, - "amount": 1 - } - ], - "owner": "1byV62k3WzNMCu1hHeuH39H42cLGxGBtKZK5g3MUX9DrFfyqCLS", - "name": "cheerful-laurel-dog", - "last_heartbeat": 55669, - "block_added": 44729, - "block": 57780, - "address": "1ZGwNJPLtskkfs18Miae7S7PEsKJoZp9Gn87C37GLP1VhSa9zVY" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.209.98.119/tcp/2154"], - "height": 57653 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 2.5706329345703125, - "penalties": [ - { - "type": "performance", - "height": 57665, - "amount": 0 - }, - { - "type": "performance", - "height": 57498, - "amount": 0.0951995849609375 - }, - { - "type": "performance", - "height": 57645, - "amount": 0.294403076171875 - }, - { - "type": "performance", - "height": 57601, - "amount": 0.298797607421875 - }, - { - "type": "performance", - "height": 57619, - "amount": 0.3843994140625 - }, - { - "type": "performance", - "height": 57633, - "amount": 0.391998291015625 - }, - { - "type": "performance", - "height": 57483, - "amount": 0.668792724609375 - }, - { - "type": "tenure", - "height": 57483, - "amount": 1 - }, - { - "type": "tenure", - "height": 57498, - "amount": 1 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - }, - { - "type": "tenure", - "height": 57665, - "amount": 1 - } - ], - "owner": "1bPJZubi2tKQev99o231oWenaERvZKbZE7B2sK5smPH35KLaWJr", - "name": "loud-cherry-oyster", - "last_heartbeat": 57777, - "block_added": 44504, - "block": 57780, - "address": "1ZXz2pLkCxAfCDMGRwd3DzPsqnEjxHjEDkrpDLDQxx1vpCiAHyi" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/35.211.248.182/tcp/2154", - "/p2p/1Yhf5LGzkamM7dis7HxGHtyQBhFUYGDr2riJi9CW1aF7QKiXXxF/p2p-circuit/p2p/1YABQ9HqRix254pGNMLQ9GC9autumU9u8oMMpfGnPpErxFM9bUH" - ], - "height": 57719 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.8079376220703125, - "penalties": [ - { - "type": "performance", - "height": 57645, - "amount": 0.096405029296875 - }, - { - "type": "performance", - "height": 57633, - "amount": 0.49200439453125 - }, - { - "type": "performance", - "height": 57619, - "amount": 0.884796142578125 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - } - ], - "owner": "1a9zgtYAvFgt6UtzpQnogptcczTpSdb3sS3ZcUjqKoWphBGoLJV", - "name": "decent-silver-chameleon", - "last_heartbeat": 57776, - "block_added": 44259, - "block": 57780, - "address": "1YABQ9HqRix254pGNMLQ9GC9autumU9u8oMMpfGnPpErxFM9bUH" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.247.115.147/tcp/2154"], - "height": 57732 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.8719940185546875, - "penalties": [ - { - "type": "performance", - "height": 57753, - "amount": 0 - }, - { - "type": "performance", - "height": 57765, - "amount": 0 - }, - { - "type": "tenure", - "height": 57753, - "amount": 1 - }, - { - "type": "tenure", - "height": 57765, - "amount": 1 - } - ], - "owner": "1avhBTeMUQ7V2bRvMnfevirCy2gFBDNttcsWPPCgLPCgyi2Bo6U", - "name": "loud-opaque-ant", - "last_heartbeat": 57773, - "block_added": 43945, - "block": 57780, - "address": "1YJGyfXgrQRuBBAUH8rqWb2gpLELAqZQJtaNq5scrpAiXN9UPSc" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/54.210.126.66/tcp/2154"], - "height": 57690 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 4.9080047607421875, - "penalties": [ - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "performance", - "height": 57559, - "amount": 0 - }, - { - "type": "performance", - "height": 57573, - "amount": 0 - }, - { - "type": "performance", - "height": 57585, - "amount": 0 - }, - { - "type": "performance", - "height": 57601, - "amount": 0 - }, - { - "type": "performance", - "height": 57619, - "amount": 0 - }, - { - "type": "performance", - "height": 57633, - "amount": 0 - }, - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "performance", - "height": 57665, - "amount": 0 - }, - { - "type": "performance", - "height": 57684, - "amount": 0 - }, - { - "type": "performance", - "height": 57704, - "amount": 0 - }, - { - "type": "performance", - "height": 57738, - "amount": 0 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - }, - { - "type": "tenure", - "height": 57573, - "amount": 1 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - }, - { - "type": "tenure", - "height": 57665, - "amount": 1 - }, - { - "type": "tenure", - "height": 57684, - "amount": 1 - }, - { - "type": "tenure", - "height": 57704, - "amount": 1 - }, - { - "type": "tenure", - "height": 57738, - "amount": 1 - } - ], - "owner": "1aPexPoA1CpezaSHPjY2Lz2c15MzvQmP2M7RczExHmonQnRkBC3", - "name": "shallow-ultraviolet-caterpillar", - "last_heartbeat": 57775, - "block_added": 43591, - "block": 57780, - "address": "1Y9MHtteYBUCACwg4Pvo1DovaK1xs7qMv8PSajgp5urHuCKZ15n" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/54.227.10.71/tcp/2154"], - "height": 57697 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0.0679931640625, - "penalties": [ - { - "type": "performance", - "height": 57498, - "amount": 0 - }, - { - "type": "performance", - "height": 57530, - "amount": 0 - }, - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "performance", - "height": 57516, - "amount": 0.093994140625 - }, - { - "type": "tenure", - "height": 57498, - "amount": 1 - }, - { - "type": "tenure", - "height": 57516, - "amount": 1 - }, - { - "type": "tenure", - "height": 57530, - "amount": 1 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - } - ], - "owner": "1aPexPoA1CpezaSHPjY2Lz2c15MzvQmP2M7RczExHmonQnRkBC3", - "name": "damaged-sapphire-robin", - "last_heartbeat": 57776, - "block_added": 43590, - "block": 57780, - "address": "1Z5dNcPs1ZkW9zmCF9TfvWYPPgPmGvwGfcUURuufvdHc1pgB8KH" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/157.230.179.75/tcp/2154", - "/ip4/35.214.81.118/tcp/2154" - ], - "height": 57637 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 56908, - "amount": 0.100006103515625 - }, - { - "type": "performance", - "height": 56851, - "amount": 0.19720458984375 - }, - { - "type": "performance", - "height": 57092, - "amount": 1.230804443359375 - }, - { - "type": "tenure", - "height": 56851, - "amount": 1 - }, - { - "type": "tenure", - "height": 56908, - "amount": 1 - }, - { - "type": "tenure", - "height": 57092, - "amount": 1 - } - ], - "owner": "1befPFhkCGHsWncAeoGTaAoMyfDtY6A4VaHuPT53HukP9AD338G", - "name": "nutty-infrared-tardigrade", - "last_heartbeat": 57775, - "block_added": 43362, - "block": 57780, - "address": "1Ya6X63YxYg5VaRpvNiXxqJT8YwChuWUiSa8caooP8Bb4m9TKuJ" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.208.63.25/tcp/2154"], - "height": 57627 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 2.712158203125, - "penalties": [ - { - "type": "performance", - "height": 57777, - "amount": 0.3928070068359375 - }, - { - "type": "performance", - "height": 57765, - "amount": 0.3975982666015625 - }, - { - "type": "tenure", - "height": 57765, - "amount": 1 - }, - { - "type": "tenure", - "height": 57777, - "amount": 1 - } - ], - "owner": "1agpdxLkREyoEY7JyvNejFHHgf6ZWAmVRx4XB4MQmuJVXrtMSCp", - "name": "sparkly-sable-fly", - "last_heartbeat": 57755, - "block_added": 43138, - "block": 57780, - "address": "1YeaLu63qrUWeuRHgqgwdh5BHuTMpjZM18WsKJzoj3aPiQzkUDe" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "unstaked", - "stake": 0, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 44061, - "amount": 0 - }, - { - "type": "performance", - "height": 44026, - "amount": 0.19720458984375 - }, - { - "type": "performance", - "height": 44043, - "amount": 2.2281646728515625 - }, - { - "type": "tenure", - "height": 44026, - "amount": 1 - }, - { - "type": "tenure", - "height": 44043, - "amount": 1 - }, - { - "type": "tenure", - "height": 44061, - "amount": 1 - } - ], - "owner": "1b2LMHZmhyqz18rGizsGbjyfZ8REjwsHvG3QhkHZdRjTbDmEgpf", - "name": "cuddly-seaweed-mallard", - "last_heartbeat": 44342, - "block_added": 43007, - "block": 57780, - "address": "1ZY9v4SrmxsMRGbf4JRrmHzSTAj4i8uajuJRRbCS3VyZTykWtnA" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.209.2.202/tcp/2154"], - "height": 57701 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.1018829345703125, - "penalties": [ - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "performance", - "height": 57633, - "amount": 0.39520263671875 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - } - ], - "owner": "1aJnWbphJGN9oQt9UCkdN9NxemuoRAz2nD4saSZaTotsttaF3Jf", - "name": "modern-rosewood-orangutan", - "last_heartbeat": 57771, - "block_added": 42577, - "block": 57780, - "address": "1YXzfYnMtFJzXfjyG2QRoBF3uPY7R16pGDGW3AZoUnJxVB1yvU3" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/85.8.21.230/tcp/2154"], - "height": 57633 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57147, - "amount": 0 - }, - { - "type": "performance", - "height": 57158, - "amount": 0 - }, - { - "type": "performance", - "height": 57171, - "amount": 0 - }, - { - "type": "performance", - "height": 57199, - "amount": 0 - }, - { - "type": "performance", - "height": 57213, - "amount": 0 - }, - { - "type": "performance", - "height": 57185, - "amount": 0.0995941162109375 - }, - { - "type": "tenure", - "height": 57147, - "amount": 1 - }, - { - "type": "tenure", - "height": 57158, - "amount": 1 - }, - { - "type": "tenure", - "height": 57171, - "amount": 1 - }, - { - "type": "tenure", - "height": 57185, - "amount": 1 - }, - { - "type": "tenure", - "height": 57199, - "amount": 1 - }, - { - "type": "tenure", - "height": 57213, - "amount": 1 - } - ], - "owner": "1aWQdDjkTF5Cz7LxYrGkpgSojUNqMLwaFRsxBviUjds1ZV3MmVr", - "name": "mini-quartz-cuckoo", - "last_heartbeat": 57769, - "block_added": 41856, - "block": 57780, - "address": "1ZKNnjxcqTQebySg9nRj6WM7ndp2y4rB5BK4SbL8sdxZPyRVd8J" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/106.13.78.161/tcp/2154"], - "height": 57627 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57483, - "amount": 0 - }, - { - "type": "performance", - "height": 57498, - "amount": 0 - }, - { - "type": "performance", - "height": 57455, - "amount": 0.0955963134765625 - }, - { - "type": "performance", - "height": 57441, - "amount": 0.100006103515625 - }, - { - "type": "tenure", - "height": 57441, - "amount": 1 - }, - { - "type": "tenure", - "height": 57455, - "amount": 1 - }, - { - "type": "tenure", - "height": 57483, - "amount": 1 - }, - { - "type": "tenure", - "height": 57498, - "amount": 1 - } - ], - "owner": "1a4QwKWfKpB6XnEMcpt2Hty8JVLJ5WEm53eZj56nFeG3nLkXsxM", - "name": "obedient-licorice-camel", - "last_heartbeat": 57773, - "block_added": 41814, - "block": 57780, - "address": "1Zpy7FoMr77QL2ussk2VfkvN6TicdvpPwAeWyfDZXyYDcxpDMkZ" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1bKaiz8RA4WHfzos6xugoQbT4d2oTjz4fNeawnHk64X1F2BPKdh", - "name": "short-umber-bull", - "last_heartbeat": 1, - "block_added": 41699, - "block": 57780, - "address": "1YwLbGTCEhVbwKEehRVQRC8N3q35ydXTH1B6BQys5FB1paHssdR" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/34.220.160.81/tcp/2154"], - "height": 57655 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 2.09344482421875, - "penalties": [ - { - "type": "performance", - "height": 57412, - "amount": 1.009918212890625 - }, - { - "type": "performance", - "height": 57619, - "amount": 1.0941162109375 - }, - { - "type": "performance", - "height": 57426, - "amount": 1.4146728515625 - }, - { - "type": "performance", - "height": 57441, - "amount": 1.4228363037109375 - }, - { - "type": "performance", - "height": 57633, - "amount": 2.0711212158203125 - }, - { - "type": "tenure", - "height": 57412, - "amount": 1 - }, - { - "type": "tenure", - "height": 57426, - "amount": 1 - }, - { - "type": "tenure", - "height": 57441, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - } - ], - "owner": "1aU8m21HigRtdaKt3Ay7hNDrEdrfQQAfbY9ckYPHWcnFeSgw3Eh", - "name": "handsome-crepe-cat", - "last_heartbeat": 57774, - "block_added": 41669, - "block": 57780, - "address": "1Ztcua8FWRvjjMTbVpANzSwmGUaULpPbQheABFb3pJ7QU2rkAWs" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": ["/ip4/34.214.138.167/tcp/2154"], - "height": 17454 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1aX3BNk3JAa7mHnGUXmUN8MkvapjzSN7fv1ajq7G8Z9egA3iPUT", - "name": "recumbent-stone-spider", - "last_heartbeat": 1, - "block_added": 41666, - "block": 57780, - "address": "1Yi7XRq7kteD48SYYRWJ2jHbELK9qdf74wVYyFH6TbCvCEe31Nj" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1aAU1Uu8cX7C8dx7Si271avKJjjzkuXHmSxPr4CXTakawAzjKBJ", - "name": "high-cinnabar-rhino", - "last_heartbeat": 1, - "block_added": 41666, - "block": 57780, - "address": "1ZVTwjcGhEojV1wAhQmHHj4wWCRkcyCvNKiPtdyEyjyanakM3Lf" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1aYEcRYzwXLqcpXZWtFL8VRdJca7Ab2xS3oiFhsvub357cYwRou", - "name": "silly-seaweed-capybara", - "last_heartbeat": 1, - "block_added": 41438, - "block": 57780, - "address": "1Z2ZfnQb4TfNmFC6iXSpYASCv1yg9WNYquqgrsnkoasZghVhid5" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/34.196.149.109/tcp/2154"], - "height": 57633 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0.05999755859375, - "penalties": [ - { - "type": "performance", - "height": 57516, - "amount": 0 - }, - { - "type": "performance", - "height": 57530, - "amount": 0 - }, - { - "type": "performance", - "height": 57545, - "amount": 0 - }, - { - "type": "tenure", - "height": 57516, - "amount": 1 - }, - { - "type": "tenure", - "height": 57530, - "amount": 1 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - } - ], - "owner": "1bbGCPVmUWzm7tJm6eZ7MBeRMaksH7YLH6sNRK582i7AEqXJ27K", - "name": "rapid-sandstone-panda", - "last_heartbeat": 57778, - "block_added": 41366, - "block": 57780, - "address": "1YkR2UkW1oraygxend18eihQPaeS3NiDJ4AbpteBrtdyJCEWNMk" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.212.127.221/tcp/2154"], - "height": 57693 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.3397979736328125, - "penalties": [ - { - "type": "performance", - "height": 57441, - "amount": 0.0984039306640625 - }, - { - "type": "performance", - "height": 57645, - "amount": 0.100006103515625 - }, - { - "type": "performance", - "height": 57455, - "amount": 0.29400634765625 - }, - { - "type": "performance", - "height": 57516, - "amount": 0.2967987060546875 - }, - { - "type": "performance", - "height": 57665, - "amount": 0.3787994384765625 - }, - { - "type": "performance", - "height": 57498, - "amount": 0.3892059326171875 - }, - { - "type": "performance", - "height": 57483, - "amount": 0.764801025390625 - }, - { - "type": "tenure", - "height": 57441, - "amount": 1 - }, - { - "type": "tenure", - "height": 57455, - "amount": 1 - }, - { - "type": "tenure", - "height": 57483, - "amount": 1 - }, - { - "type": "tenure", - "height": 57498, - "amount": 1 - }, - { - "type": "tenure", - "height": 57516, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - }, - { - "type": "tenure", - "height": 57665, - "amount": 1 - } - ], - "owner": "1btmSxwAML8LoBxizJtnQ22p93qdCF1xvaT8zkc1iVkweEWrx2h", - "name": "nutty-tin-seahorse", - "last_heartbeat": 57769, - "block_added": 41036, - "block": 57780, - "address": "1ZCTs5js8Cc2JVT29VRfmwhs8UXHGuzWEoqdAs7bAa6YBU59bpu" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/157.230.179.75/tcp/2154", - "/ip4/206.189.176.222/tcp/2154" - ], - "height": 57721 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.9955291748046875, - "penalties": [ - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "performance", - "height": 57738, - "amount": 0 - }, - { - "type": "performance", - "height": 57665, - "amount": 0.096405029296875 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - }, - { - "type": "tenure", - "height": 57665, - "amount": 1 - }, - { - "type": "tenure", - "height": 57738, - "amount": 1 - } - ], - "owner": "1bRgMcoYdL5c7upN1Xb3hNepGQncKgXe33gBs1xEwB2eZD6WQfV", - "name": "soft-azure-haddock", - "last_heartbeat": 57769, - "block_added": 41004, - "block": 57780, - "address": "1ZbRYtpawdjQSQmGSnEDgXUBWvLeZtFwBLQRURiuzp7h7f9kXSR" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.208.246.36/tcp/2154"], - "height": 57622 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 1.641845703125, - "penalties": [ - { - "type": "performance", - "height": 57633, - "amount": 0.100006103515625 - }, - { - "type": "performance", - "height": 57601, - "amount": 0.5915985107421875 - }, - { - "type": "performance", - "height": 57619, - "amount": 1.0691986083984375 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - } - ], - "owner": "1b5pvD66YPw6kNngQYzL9AybKp6cRwZSttwJxRXJtFKf5jE6UCA", - "name": "salty-ivory-blackbird", - "last_heartbeat": 57778, - "block_added": 40749, - "block": 57780, - "address": "1YPrQ852SSfmvZEE1xfVSrUYt2deshAhApcDYbxtaKy5guf6PcX" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.81.3.160/tcp/2154"], - "height": 57702 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 2.23199462890625, - "penalties": [ - { - "type": "performance", - "height": 57601, - "amount": 0 - }, - { - "type": "performance", - "height": 57619, - "amount": 0 - }, - { - "type": "performance", - "height": 57633, - "amount": 0 - }, - { - "type": "performance", - "height": 57645, - "amount": 0 - }, - { - "type": "performance", - "height": 57665, - "amount": 0 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - }, - { - "type": "tenure", - "height": 57633, - "amount": 1 - }, - { - "type": "tenure", - "height": 57645, - "amount": 1 - }, - { - "type": "tenure", - "height": 57665, - "amount": 1 - } - ], - "owner": "1bnSU6XW71sZ93trfyaseqwFpmakqJNbWFyxQQFpJsBKz4ttqDc", - "name": "polite-grape-narwhal", - "last_heartbeat": 57769, - "block_added": 40472, - "block": 57780, - "address": "1YgCMWPCiR1rfXNXLggW21evTnVb6BJYDdXTjAZyXiWhYNfSvJM" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/143.198.104.240/tcp/2154", - "/ip4/35.167.70.214/tcp/2154" - ], - "height": 57690 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57265, - "amount": 0 - }, - { - "type": "performance", - "height": 57280, - "amount": 0 - }, - { - "type": "performance", - "height": 57321, - "amount": 0 - }, - { - "type": "performance", - "height": 57334, - "amount": 0 - }, - { - "type": "performance", - "height": 57346, - "amount": 0 - }, - { - "type": "performance", - "height": 57360, - "amount": 0 - }, - { - "type": "performance", - "height": 57305, - "amount": 0.097198486328125 - }, - { - "type": "tenure", - "height": 57265, - "amount": 1 - }, - { - "type": "tenure", - "height": 57280, - "amount": 1 - }, - { - "type": "tenure", - "height": 57305, - "amount": 1 - }, - { - "type": "tenure", - "height": 57321, - "amount": 1 - }, - { - "type": "tenure", - "height": 57334, - "amount": 1 - }, - { - "type": "tenure", - "height": 57346, - "amount": 1 - }, - { - "type": "tenure", - "height": 57360, - "amount": 1 - } - ], - "owner": "1a8Aq2Vbeuc5gji3W6NoJrAoNB8RfJWomncZnphBqJih9SnK2NP", - "name": "ambitious-peanut-mink", - "last_heartbeat": 57771, - "block_added": 40302, - "block": 57780, - "address": "1YfDytuvfTkmukgsnwR8ZLXWu7a8eGzNjFAMFRo4jm5SPTVWR7z" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/54.191.170.248/tcp/2154"], - "height": 57710 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [ - { - "type": "performance", - "height": 57185, - "amount": 0.6876068115234375 - }, - { - "type": "performance", - "height": 56957, - "amount": 1.1897125244140625 - }, - { - "type": "performance", - "height": 56969, - "amount": 1.325164794921875 - }, - { - "type": "performance", - "height": 57199, - "amount": 1.4130859375 - }, - { - "type": "tenure", - "height": 56957, - "amount": 1 - }, - { - "type": "tenure", - "height": 56969, - "amount": 1 - }, - { - "type": "tenure", - "height": 57185, - "amount": 1 - }, - { - "type": "tenure", - "height": 57199, - "amount": 1 - } - ], - "owner": "1bQ7xRSF5FrAsDWaUmZVqziaFjeu2VVu8CnXfSXCWViJKNuse5u", - "name": "flaky-admiral-chicken", - "last_heartbeat": 57775, - "block_added": 40201, - "block": 57780, - "address": "1ZsKNDEax89bjXQkS2J8sJSU68z6APBJN7u4BdGWJAM7xLvkFUK" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/35.199.181.8/tcp/2154"], - "height": 57670 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0.2573394775390625, - "penalties": [ - { - "type": "performance", - "height": 57483, - "amount": 0 - }, - { - "type": "performance", - "height": 57498, - "amount": 0 - }, - { - "type": "performance", - "height": 57516, - "amount": 0 - }, - { - "type": "performance", - "height": 57530, - "amount": 0 - }, - { - "type": "performance", - "height": 57559, - "amount": 0 - }, - { - "type": "performance", - "height": 57545, - "amount": 0.629638671875 - }, - { - "type": "tenure", - "height": 57483, - "amount": 1 - }, - { - "type": "tenure", - "height": 57498, - "amount": 1 - }, - { - "type": "tenure", - "height": 57516, - "amount": 1 - }, - { - "type": "tenure", - "height": 57530, - "amount": 1 - }, - { - "type": "tenure", - "height": 57545, - "amount": 1 - }, - { - "type": "tenure", - "height": 57559, - "amount": 1 - } - ], - "owner": "1agicQbv7jmG6fJr5txyPEWLtRcmwcohbQDVKoWdbdqAP2nH2p2", - "name": "teeny-tartan-frog", - "last_heartbeat": 57775, - "block_added": 39780, - "block": 57780, - "address": "1ZCVxQ8B2nQVDtd7EDxGuVsPwxTNMrjGjn4CUNeBKUw8kYcFMiE" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1bE7bL77st6n6gway77C9AtPUpZgXkk5t87XjBSAmmLvLeQwngc", - "name": "bubbly-aquamarine-woodpecker", - "last_heartbeat": 39815, - "block_added": 39641, - "block": 57780, - "address": "1ZKX9M21pxRfJfqSdTXmNMHgMoh3wob4YV82u5NDYFAdKPQh2pN" - }, - { - "version_heartbeat": 10048, - "status": { - "online": "online", - "listen_addrs": ["/ip4/157.131.101.181/tcp/2154"], - "height": 57588 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 3.1520233154296875, - "penalties": [ - { - "type": "performance", - "height": 57585, - "amount": 1.5709228515625 - }, - { - "type": "performance", - "height": 57601, - "amount": 2.266448974609375 - }, - { - "type": "performance", - "height": 57619, - "amount": 2.7936859130859375 - }, - { - "type": "tenure", - "height": 57585, - "amount": 1 - }, - { - "type": "tenure", - "height": 57601, - "amount": 1 - }, - { - "type": "tenure", - "height": 57619, - "amount": 1 - } - ], - "owner": "1bHtA48KfuxYUXz5gpxY4oSqCK9mGEzsnSaVC3QKkVNYsSCBjzt", - "name": "rich-beige-dove", - "last_heartbeat": 57770, - "block_added": 38599, - "block": 57780, - "address": "1Z3DPRpmEfTL5f528CF5xjpPDUhZY9TErB3tgnhqCtMM6nnw38L" - }, - { - "version_heartbeat": 10051, - "status": { - "online": "online", - "listen_addrs": ["/ip4/3.143.229.44/tcp/2154"], - "height": 57736 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 2.82000732421875, - "penalties": [ - { - "type": "performance", - "height": 57753, - "amount": 0 - }, - { - "type": "performance", - "height": 57765, - "amount": 0 - }, - { - "type": "performance", - "height": 57777, - "amount": 0 - }, - { - "type": "tenure", - "height": 57753, - "amount": 1 - }, - { - "type": "tenure", - "height": 57765, - "amount": 1 - }, - { - "type": "tenure", - "height": 57777, - "amount": 1 - } - ], - "owner": "1aScVVYDTW2BCqyDF4BLsXytjwPGqJ7ZjqCAezoDuwH8XvWE7zA", - "name": "proper-blue-cheetah", - "last_heartbeat": 57778, - "block_added": 38176, - "block": 57780, - "address": "1ZEVn1EeJxTtRY5dFrkkGyeKRuNGA6aYKFLqtwRXvrmgCFJSFwb" - }, - { - "version_heartbeat": 1, - "status": { - "online": "offline", - "listen_addrs": null, - "height": null - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 0, - "penalties": [], - "owner": "1b91SNH75kgPxjEGtkVpyRKHkwZWw43WczYyUGyXEEPAXB11J4u", - "name": "skinny-velvet-swift", - "last_heartbeat": 1, - "block_added": 37848, - "block": 57780, - "address": "1bHL1nQP5gRHqJESvTRWXp3e89FuX5vpZqAtiu6U1iVeHDqzu8N" - } - ], - "cursor": "eyJoZWlnaHQiOjU3NzgwLCJiZWZvcmVfYmxvY2siOjM3ODQ4LCJiZWZvcmVfYWRkcmVzcyI6IjFiSEwxblFQNWdSSHFKRVN2VFJXWHAzZTg5RnVYNXZwWnFBdGl1NlUxaVZlSERxenU4TiJ9" -} -``` - - - - ---- - -## Validator for Address - -``` -GET https://api.helium.io/v1/validators/:address -``` - -Fetch a validator with a given address. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------- | -------- | ----------------------------- | -| address | _string_ | Address of validator to fetch | - - - - -200: OK - -```json -{ - "data": { - "version_heartbeat": 10010004, - "status": { - "timestamp": "2021-09-02T15:00:45.005000Z", - "online": "online", - "listen_addrs": [ - "/ip4/690.0.0.180/tcp/2154", - "/ip4/340.210.76.150/tcp/2154" - ], - "height": 993737 - }, - "stake_status": "staked", - "stake": 1000000000000, - "penalty": 8.113204956054688, - "penalties": [ - { - "type": "performance", - "height": 992513, - "amount": 0.099853515625 - }, - { - "type": "performance", - "height": 992677, - "amount": 0.099853515625 - }, - { - "type": "performance", - "height": 992610, - "amount": 0.659027099609375 - }, - { - "type": "performance", - "height": 992643, - "amount": 0.659027099609375 - }, - { - "type": "performance", - "height": 992710, - "amount": 0.758880615234375 - }, - { - "type": "performance", - "height": 992545, - "amount": 1.1883544921875 - }, - { - "type": "performance", - "height": 992577, - "amount": 1.2882080078125 - }, - { - "type": "tenure", - "height": 992480, - "amount": 0.5 - }, - { - "type": "tenure", - "height": 992513, - "amount": 0.5 - }, - { - "type": "tenure", - "height": 992545, - "amount": 0.5 - }, - { - "type": "tenure", - "height": 992577, - "amount": 0.5 - }, - { - "type": "tenure", - "height": 992610, - "amount": 0.5 - }, - { - "type": "tenure", - "height": 992643, - "amount": 0.5 - }, - { - "type": "tenure", - "height": 992677, - "amount": 0.5 - }, - { - "type": "tenure", - "height": 992710, - "amount": 0.5 - } - ], - "owner": "14apkx9H3pkkfZWXXVCsjdPbKKdXxS5LrA4PF9v2iZUFMunbRog", - "name": "fat-thanksgiving-turkey", - "last_heartbeat": 994072, - "consensus_groups": 8, - "block_added": 983774, - "block": 994078, - "address": "112VtykzPvavfjrT9QwEyvhFMxzxCBUaYmKByYjpLFvxM5qHzw5" - } -} -``` - - - - ---- - -## Validators for Name - -``` -GET https://api.helium.io/v1/validators/name/:name -``` - -Fetch the validators which map to the given 3-word animal name. The name must be -all lower-case with dashes between the words, e.g. tall-plum-griffin. Because -of collisions in the Angry Purple Tiger algorithm, the given name might map to -**more than one validator**. - - - - -_Path Parameters_ - -| param | Type | Note | -| ----- | -------- | ----------------------------- | -| name | _string_ | Name of validator(s) to fetch | - - - - -200: OK - -```json -{ - "data": [ - { - "address": "1bHL1nQP5gRHqJESvTRWXp3e89FuX5vpZqAtiu6U1iVeHDqzu8N", - "block": 57766, - "block_added": 37848, - "last_heartbeat": 1, - "name": "skinny-velvet-swift", - "owner": "1b91SNH75kgPxjEGtkVpyRKHkwZWw43WczYyUGyXEEPAXB11J4u", - "penalties": [], - "penalty": 0.0, - "stake": 1000000000000, - "stake_status": "staked", - "status": { - "height": null, - "listen_addrs": null, - "online": "offline" - }, - "version_heartbeat": 1 - } - ] -} -``` - - - - ---- - -## Validator Name Search - -``` -GET https://api.helium.io/v1/validators/name?search= -``` - -Fetch the validators which match a search term in the given `search` term query -parameter. The search parameter needs to be at least one character, with 3 or -more recommended. - - - - -_Query Parameters_ - -| param | Type | Note | -| ------ | -------- | ------------------------------- | -| search | _string_ | The name fragment to search for | - - - - -200: OK - -Search results for `search=skinny-iron` - -```json -{ - "data": [ - { - "address": "1YwjDSMjfuk2SNbV7UFRjdRsJCGaz17Nj136315bdjEM8RfNg5j", - "block": 57771, - "block_added": 1610, - "last_heartbeat": 57765, - "name": "skinny-iron-copperhead", - "owner": "1at2MZk8Cdv15ApcCeLGSm3N5NVng4JJWa9PKkWLxfJC4F2D1Hk", - "penalties": [ - { - "amount": 0.0, - "height": 57280, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57321, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57360, - "type": "performance" - }, - { - "amount": 0.0959930419921875, - "height": 57334, - "type": "performance" - }, - { - "amount": 0.096405029296875, - "height": 57346, - "type": "performance" - }, - { - "amount": 0.097198486328125, - "height": 57305, - "type": "performance" - }, - { - "amount": 1.0, - "height": 57280, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57305, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57321, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57334, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57346, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57360, - "type": "tenure" - } - ], - "penalty": 0.0, - "stake": 1000000000000, - "stake_status": "staked", - "status": { - "height": 57699, - "listen_addrs": ["/ip4/18.193.146.142/tcp/2154"], - "online": "online" - }, - "version_heartbeat": 10051 - }, - { - "address": "1Yte3yMu8k4t7NXwNBmeG57iayPpBfmHG8BteFqhQjE84RKG6Pk", - "block": 57771, - "block_added": 2977, - "last_heartbeat": 57762, - "name": "skinny-indigo-owl", - "owner": "1bW7KhrM9dUUm3aP3Skj8YC3S3NfEk5TuBL85gFazkyuF5RDvCL", - "penalties": [ - { - "amount": 0.0, - "height": 57441, - "type": "performance" - }, - { - "amount": 0.0955963134765625, - "height": 57573, - "type": "performance" - }, - { - "amount": 0.0980072021484375, - "height": 57530, - "type": "performance" - }, - { - "amount": 0.0991973876953125, - "height": 57559, - "type": "performance" - }, - { - "amount": 0.100006103515625, - "height": 57455, - "type": "performance" - }, - { - "amount": 0.3892059326171875, - "height": 57545, - "type": "performance" - }, - { - "amount": 1.0, - "height": 57441, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57455, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57530, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57545, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57559, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57573, - "type": "tenure" - } - ], - "penalty": 0.698944091796875, - "stake": 1000000000000, - "stake_status": "staked", - "status": { - "height": 57693, - "listen_addrs": ["/ip4/35.226.133.108/tcp/2154"], - "online": "online" - }, - "version_heartbeat": 10051 - } - ] -} -``` - - - - ---- - -## Validator Activity - -``` -GET https://api.helium.io/v1/validators/:address/activity -``` - -:::caution -The `/activity` route will be deprecated on May 1, 2022 and will be replaced by [`/roles`, described below](#validator-roles) -::: - -Lists all blockchain transactions that the given validator was involved in. This -route is paged using a `cursor`. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------- | -| address (optional) | _string_ | B58 address of the validator | - -_Query Parameters_ - -| param | Type | Note | -| ----------------------- | -------- | ----------------------------------------- | -| cursor (optional) | _string_ | Cursor for page of results to fetch | -| filter_types (optional) | _string_ | Comma separated list of transaction types | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -This lists the activity for a validator that recently came online. - -```json -{ - "cursor": "eyJtaW5fYmxvY2siOjEzNTYsImJsb2NrIjo1NzgwMCwiYW5jaG9yX2Jsb2NrIjo1NzgwMH0", - "data": [ - { - "address": "1Z7GHfLgGUfnKCnEfZEUUqaPSo4674XyX6SA3ZY93rkSTzm9ALK", - "hash": "KhQxLTEOr932fAIQcqA6pw_lq5PWJJfh4GGeHA3Di8k", - "height": 57851, - "signature": "MEQCIAOhjw8ty-IOVJBhwULHZb0Z5Gf61idn8GCGNcwtPAARAiASX56H6WUzrW767qsfQKuuk7KvnXq8eveXIFmNFy1t_g", - "time": 1620766822, - "type": "validator_heartbeat_v1", - "version": 10051 - }, - { - "address": "1Z7GHfLgGUfnKCnEfZEUUqaPSo4674XyX6SA3ZY93rkSTzm9ALK", - "hash": "hGLd-f6Y3TZa09QZzdAAu7ZnOBhyN6TTulSwB4bpZyY", - "height": 57841, - "signature": "MEUCIFjWlCejrwNfWOjD9-r_GxRxqfcs1PlsJ9sNluceH9RMAiEA-aoaLF8nSi3RcWxpkncKyrJ2JyyECy_3rbsyOBP1RnI", - "time": 1620766521, - "type": "validator_heartbeat_v1", - "version": 10051 - }, - { - "address": "1Z7GHfLgGUfnKCnEfZEUUqaPSo4674XyX6SA3ZY93rkSTzm9ALK", - "hash": "6EkmS-Yzv9x9YMLQsMzJStUzO_I47f_jOvzODeQe4JQ", - "height": 57830, - "signature": "MEUCIBkerT71jAXtq3p7tVL6MTJKe2SSnXhiIPm-fdcLXX6fAiEAvgiFHf0vMqTOPob08D4btXTzyMK6d6m3W5ZlskY0ATw", - "time": 1620766191, - "type": "validator_heartbeat_v1", - "version": 10051 - }, - { - "address": "1Z7GHfLgGUfnKCnEfZEUUqaPSo4674XyX6SA3ZY93rkSTzm9ALK", - "hash": "-M5roJvgoJdeWiXgDhqDNDcEuSbV-ZQ7Lc4Efpvtvz0", - "height": 57820, - "signature": "MEQCIAGa2Q2QQIKXQ5WIvGk0g_Rnu4Tnm2fLludQ8S7K9tmuAiByVpJvAtMnHLAu_SQWnkNljV0YNM8Qin4yMmuLyJzDFg", - "time": 1620765891, - "type": "validator_heartbeat_v1", - "version": 10051 - }, - { - "address": "1Z7GHfLgGUfnKCnEfZEUUqaPSo4674XyX6SA3ZY93rkSTzm9ALK", - "hash": "iN2Os7q6W6ZFmkTqLMxKeJmkDLsWB5smBl4_sOPfF7A", - "height": 57810, - "signature": "MEQCIEwZR2GRd4ari2dK4lm4hGcD9JCtZqYSM92ABLZHmgqqAiBozLre8oabOlEXBK-pgGdATcjlZKe3plE4V_lhm6mamw", - "time": 1620765591, - "type": "validator_heartbeat_v1", - "version": 10051 - }, - { - "address": "1Z7GHfLgGUfnKCnEfZEUUqaPSo4674XyX6SA3ZY93rkSTzm9ALK", - "hash": "eKCTTKOqSmmBvxKa1LXr4p439m2uO6r6bOPszDQCFCc", - "height": 57800, - "signature": "MEQCIEk1_wz5vyIXpqaOD3Vv0LffwwFd-hNfsCQD88QpcAsvAiAVSFqSw8lkXnn_gbZd5GePgFM_LNpbOyOXSgPfJMPW1g", - "time": 1620765291, - "type": "validator_heartbeat_v1", - "version": 10051 - } - ] -} -``` - - - - ---- - -## Validator Roles - -``` -GET https://api.helium.io/v1/validators/:address/roles -``` - -Lists all blockchain transactions that the given validator was involved in. This -route is paged using a `cursor`. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------- | -| address (optional) | _string_ | B58 address of the validator | - -_Query Parameters_ - -| param | Type | Note | -| ----------------------- | -------- | ----------------------------------------- | -| cursor (optional) | _string_ | Cursor for page of results to fetch | -| filter_types (optional) | _string_ | Comma separated list of transaction types | -| min_time (optional) | _string_ | First time to include data for | -| max_time (optional) | _string_ | Last time to include data for | -| limit (optional) | _number_ | Maximum number of items to return | - - - - -200: OK - -This lists the activity for a validator that recently came online. - -```json -{ - "data": [ - { - "type": "validator_heartbeat_v1", - "time": 1644017331, - "role": "validator", - "height": 1212246, - "hash": "Xz7zM9mN4ZA_4uSj-SVjeiXHlTdJO8vB0yBSVDkgNBA" - }, - { - "type": "validator_heartbeat_v1", - "time": 1644010677, - "role": "validator", - "height": 1212144, - "hash": "UwTuX7FxEzhuH_zu3rRBA_yXf7UFUTJwivQLm-rR_ps" - }, - { - "type": "stake_validator_v1", - "time": 1644010555, - "role": "validator", - "height": 1212142, - "hash": "8wOjSODY4M_U8M_Eb2SBm1lqJyncf3RItXZtG4oZQJ8" - } - ] -} -``` - - - - ---- - -## Validator Roles Counts - -``` -GET https://api.helium.io/v1/validators/:address/roles/count -``` - -Count transactions that indicate activity for a validator. - -The results are a map keyed by the given `filter_types` and the count of -transaction of that type. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | --------------------------------------- | -| address (required) | _string_ | Hotspot B58 address to fetch counts for | - -_Query Parameters_ - -| param | Type | Note | -| ------------ | -------- | ----------------------------------------- | -| filter_types | _string_ | Comma separated list of transaction types | - - - - -200: OK - -Fetch counts for validator `1Z7GHfLgGUfnKCnEfZEUUqaPSo4674XyX6SA3ZY93rkSTzm9ALK` - -```json -{ - "data": { - "vars_v1": 0, - "validator_heartbeat_v1": 812, - "unstake_validator_v1": 0, - "transfer_validator_stake_v1": 0, - "transfer_hotspot_v1": 0, - "token_burn_v1": 0, - "token_burn_exchange_rate_v1": 0, - "state_channel_open_v1": 0, - "state_channel_close_v1": 0, - "stake_validator_v1": 1, - "security_exchange_v1": 0, - "security_coinbase_v1": 0, - "routing_v1": 0, - "rewards_v2": 51, - "rewards_v1": 0, - "redeem_htlc_v1": 0, - "price_oracle_v1": 0, - "poc_request_v1": 0, - "poc_receipts_v1": 0, - "payment_v2": 0, - "payment_v1": 0, - "oui_v1": 0, - "gen_gateway_v1": 0, - "dc_coinbase_v1": 0, - "create_htlc_v1": 0, - "consensus_group_v1": 0, - "consensus_group_failure_v1": 0, - "coinbase_v1": 0, - "assert_location_v2": 0, - "assert_location_v1": 0, - "add_gateway_v1": 0 - } -} -``` - - - - ---- - -## Stats for Validators - -``` - -GET https://api.helium.io/v1/validators/stats - -``` - -Returns stats for validators - - - - - - - -200: OK - -```json -{ - "data": { - "active": 194, - "cooldown": { - "amount": 0, - "count": 0 - }, - "staked": { - "amount": 2120000.0, - "count": 212 - }, - "unstaked": { - "amount": 0.0, - "count": 2 - } - } -} -``` - - - - ---- - -## Currently Elected Validators - -``` -GET https://api.helium.io/v1/validators/elected -``` - -Returns the list of validators that are currently elected to the consensus group. - - - - -_No Parameters_ - - - - -200: OK - -```json -{ -{ - "data": [ - { - "version_heartbeat": 2, - "status": "staked", - "stake": 1000000000000, - "owner": "1aPh5LpH9AFMV3gHALYEZyZfiXvktnqADV6fKMkrgh37u5oZUnC", - "last_heartbeat": 427, - "block": 466, - "address": "1ZJmbSPJeGt9QHikNUGCd5qorvBxtGK5qc18sXRiQKcSyETFMVm" - }, - { - "version_heartbeat": 2, - "status": "staked", - "stake": 1000000000000, - "owner": "1bBTWn843DwTXTyH3hbSMmDoJXHCU1D1U8cAYRdVE5rDnaS7fLb", - "last_heartbeat": 447, - "block": 466, - "address": "1YeCAsuBq3fDTv8x4iB1fJn9zBbopHhjhXGpvVwN43JDptqMT11" - }, - { - "version_heartbeat": 2, - "status": "staked", - "stake": 1000000000000, - "owner": "1ZLXHYHZY36wKZDBfjjo8ERgio8wenhCTtJGw9tNSQeAwPEMSMG", - "last_heartbeat": 451, - "block": 466, - "address": "1ZAxCrEsigGVbLUM37Jki6p88kyZ5NVqjVC6oHSbqu49t7bQDym" - }, - { - "version_heartbeat": 2, - "status": "staked", - "stake": 1000000000000, - "owner": "1ZLXHYHZY36wKZDBfjjo8ERgio8wenhCTtJGw9tNSQeAwPEMSMG", - "last_heartbeat": 455, - "block": 466, - "address": "1YqV6er1KDWBR9zRcXm3ktqY2Gi3r7QZRD8mDPq6yz5JNxt2zxy" - } - ] -} -``` - - - - -## Elected Validators at a Block - -``` -GET https://api.helium.io/v1/validators/elected/:height -``` - -Returns the list of validators that were in the consensus group at a given block height - - - - -_Path Parameters_ - -| param | Type | Note | -| ----------------- | -------- | ----------------- | -| height (required) | _number_ | Blockchain Height | - - - - -200: OK - -```json -{ - "data": [ - { - "address": "1ZYe21WzqJGkWjXvyEt2c8ALSrufPfjzqfQP2SGy61UJd2h9EbL", - "block": 57775, - "block_added": 1, - "last_heartbeat": 57765, - "name": "eager-watermelon-rabbit", - "owner": "1YoBQ8mm2s3G56Yq9YmZ1ZrhDwKruwYwKBVzUSppj8jujX1WT2v", - "penalties": [ - { - "amount": 0.0, - "height": 56704, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56716, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56732, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56751, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56768, - "type": "performance" - }, - { - "amount": 1.0, - "height": 56704, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56716, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56732, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56751, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56768, - "type": "tenure" - } - ], - "penalty": 0.0, - "stake": 1000000000000, - "stake_status": "staked", - "status": { - "height": 57671, - "listen_addrs": ["/ip4/3.17.164.253/tcp/2154"], - "online": "online" - }, - "version_heartbeat": 10051 - }, - { - "address": "1ZPNnNd9k5qiQXXigKifQpCPiy5HTbszQDSyLM56ywk7ihNRvt6", - "block": 57775, - "block_added": 1, - "last_heartbeat": 57768, - "name": "delightful-mahogany-kitten", - "owner": "1YoBQ8mm2s3G56Yq9YmZ1ZrhDwKruwYwKBVzUSppj8jujX1WT2v", - "penalties": [ - { - "amount": 0.0, - "height": 57426, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57441, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57455, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57483, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57498, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57516, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57633, - "type": "performance" - }, - { - "amount": 1.0, - "height": 57426, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57441, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57455, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57483, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57498, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57516, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57633, - "type": "tenure" - } - ], - "penalty": 0.451995849609375, - "stake": 1000000000000, - "stake_status": "staked", - "status": { - "height": 57591, - "listen_addrs": ["/ip4/18.223.171.149/tcp/2154"], - "online": "online" - }, - "version_heartbeat": 10051 - }, - { - "address": "1YdBWwpRimEoPZ5WDxgv9ZBUfxhXyVFTkpX1oRLwmncWRvqj7Vh", - "block": 57775, - "block_added": 1, - "last_heartbeat": 57748, - "name": "refined-vanilla-goldfish", - "owner": "1YoBQ8mm2s3G56Yq9YmZ1ZrhDwKruwYwKBVzUSppj8jujX1WT2v", - "penalties": [ - { - "amount": 0.0, - "height": 56573, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56589, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56704, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56732, - "type": "performance" - }, - { - "amount": 1.0, - "height": 56573, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56589, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56704, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56732, - "type": "tenure" - } - ], - "penalty": 0.0, - "stake": 1000000000000, - "stake_status": "staked", - "status": { - "height": 57705, - "listen_addrs": ["/ip4/3.137.173.26/tcp/2154"], - "online": "online" - }, - "version_heartbeat": 10051 - }, - { - "address": "1Zmw2S5ksj4oxDMYFz3vQxFNnQsE7Sc3Mv9YrkiWktLznwng935", - "block": 57775, - "block_added": 1, - "last_heartbeat": 57767, - "name": "chilly-cloth-bison", - "owner": "1YoBQ8mm2s3G56Yq9YmZ1ZrhDwKruwYwKBVzUSppj8jujX1WT2v", - "penalties": [ - { - "amount": 0.0, - "height": 57199, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57213, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57225, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57254, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57265, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57280, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57321, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57334, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57346, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57360, - "type": "performance" - }, - { - "amount": 0.097198486328125, - "height": 57305, - "type": "performance" - }, - { - "amount": 0.09759521484375, - "height": 57239, - "type": "performance" - }, - { - "amount": 1.0, - "height": 57199, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57213, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57225, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57239, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57254, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57265, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57280, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57305, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57321, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57334, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57346, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57360, - "type": "tenure" - } - ], - "penalty": 0.0, - "stake": 1000000000000, - "stake_status": "staked", - "status": { - "height": 57471, - "listen_addrs": ["/ip4/3.135.195.98/tcp/2154"], - "online": "online" - }, - "version_heartbeat": 10051 - } - ] -} -``` - - - - -## Elected Validators in an Election - -``` - -GET https://api.helium.io/v1/validators/elected/hash/:hash - -``` - -Returns the list of validators that were elected in the consensus group -transcation indicated by the given transaction hash. - - - - -_Path Parameters_ - -| param | Type | Note | -| --------------- | -------- | ---------------- | -| hash (required) | _number_ | Transaction Hash | - - - - -200: OK - -```json -{ - "data": [ - { - "address": "1ZYe21WzqJGkWjXvyEt2c8ALSrufPfjzqfQP2SGy61UJd2h9EbL", - "block": 57775, - "block_added": 1, - "last_heartbeat": 57765, - "name": "eager-watermelon-rabbit", - "owner": "1YoBQ8mm2s3G56Yq9YmZ1ZrhDwKruwYwKBVzUSppj8jujX1WT2v", - "penalties": [ - { - "amount": 0.0, - "height": 56704, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56716, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56732, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56751, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56768, - "type": "performance" - }, - { - "amount": 1.0, - "height": 56704, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56716, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56732, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56751, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56768, - "type": "tenure" - } - ], - "penalty": 0.0, - "stake": 1000000000000, - "stake_status": "staked", - "status": { - "height": 57671, - "listen_addrs": ["/ip4/3.17.164.253/tcp/2154"], - "online": "online" - }, - "version_heartbeat": 10051 - }, - { - "address": "1ZPNnNd9k5qiQXXigKifQpCPiy5HTbszQDSyLM56ywk7ihNRvt6", - "block": 57775, - "block_added": 1, - "last_heartbeat": 57768, - "name": "delightful-mahogany-kitten", - "owner": "1YoBQ8mm2s3G56Yq9YmZ1ZrhDwKruwYwKBVzUSppj8jujX1WT2v", - "penalties": [ - { - "amount": 0.0, - "height": 57426, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57441, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57455, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57483, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57498, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57516, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57633, - "type": "performance" - }, - { - "amount": 1.0, - "height": 57426, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57441, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57455, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57483, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57498, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57516, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57633, - "type": "tenure" - } - ], - "penalty": 0.451995849609375, - "stake": 1000000000000, - "stake_status": "staked", - "status": { - "height": 57591, - "listen_addrs": ["/ip4/18.223.171.149/tcp/2154"], - "online": "online" - }, - "version_heartbeat": 10051 - }, - { - "address": "1YdBWwpRimEoPZ5WDxgv9ZBUfxhXyVFTkpX1oRLwmncWRvqj7Vh", - "block": 57775, - "block_added": 1, - "last_heartbeat": 57748, - "name": "refined-vanilla-goldfish", - "owner": "1YoBQ8mm2s3G56Yq9YmZ1ZrhDwKruwYwKBVzUSppj8jujX1WT2v", - "penalties": [ - { - "amount": 0.0, - "height": 56573, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56589, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56704, - "type": "performance" - }, - { - "amount": 0.0, - "height": 56732, - "type": "performance" - }, - { - "amount": 1.0, - "height": 56573, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56589, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56704, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 56732, - "type": "tenure" - } - ], - "penalty": 0.0, - "stake": 1000000000000, - "stake_status": "staked", - "status": { - "height": 57705, - "listen_addrs": ["/ip4/3.137.173.26/tcp/2154"], - "online": "online" - }, - "version_heartbeat": 10051 - }, - { - "address": "1Zmw2S5ksj4oxDMYFz3vQxFNnQsE7Sc3Mv9YrkiWktLznwng935", - "block": 57775, - "block_added": 1, - "last_heartbeat": 57767, - "name": "chilly-cloth-bison", - "owner": "1YoBQ8mm2s3G56Yq9YmZ1ZrhDwKruwYwKBVzUSppj8jujX1WT2v", - "penalties": [ - { - "amount": 0.0, - "height": 57199, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57213, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57225, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57254, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57265, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57280, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57321, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57334, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57346, - "type": "performance" - }, - { - "amount": 0.0, - "height": 57360, - "type": "performance" - }, - { - "amount": 0.097198486328125, - "height": 57305, - "type": "performance" - }, - { - "amount": 0.09759521484375, - "height": 57239, - "type": "performance" - }, - { - "amount": 1.0, - "height": 57199, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57213, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57225, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57239, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57254, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57265, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57280, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57305, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57321, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57334, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57346, - "type": "tenure" - }, - { - "amount": 1.0, - "height": 57360, - "type": "tenure" - } - ], - "penalty": 0.0, - "stake": 1000000000000, - "stake_status": "staked", - "status": { - "height": 57471, - "listen_addrs": ["/ip4/3.135.195.98/tcp/2154"], - "online": "online" - }, - "version_heartbeat": 10051 - } - ] -} -``` - - - - ---- - -## Rewards for a Validator - -``` -GET https://api.helium.io/v1/validators/:address/rewards -``` - -Returns rewards for a given validator per reward block the validator is in, for -a given timeframe. Timestamps are given in ISO 8601 format, or in relative time. -The block that contains the `max_time` timestamp is **excluded** from the -result. - -This route is paged using a `cursor`. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------- | -| address (required) | _string_ | B58 address of the validator | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | -------------------------------------- | -| cursor (optional) | _string_ | Cursor for page of rewards to fetch | -| max_time (required) | _string_ | Last timestamp to include rewards for | -| min_time (required) | _string_ | First timestamp to include rewards for | - - - - -200: OK - -Rewards for a validator in the last 3 hours: `min_time=-3%20hour` - -```json -{ - "data": [ - { - "account": "1bLkeh9G2c85CvvCdV3LPe94im8VTQ6Byq71u6KbfLjeQ5GBUqR", - "amount": 526094276, - "block": 7649, - "gateway": "1Z7GHfLgGUfnKCnEfZEUUqaPSo4674XyX6SA3ZY93rkSTzm9ALK", - "hash": "jJ92KTtaRyMXKUdK3R5J7tfztMrOO0ozyAC7xHu_Tgk", - "timestamp": "2021-04-24T10:38:03.000000Z" - } - ] -} -``` - - - - ---- - -## Reward Total for a Validator - -``` -GET https://api.helium.io/v1/validators/:address/rewards/sum -``` - -Returns the total rewards earned for a given validator over a given time range. -Timestamps are given in ISO 8601 format or in relative time. The block that includes the `max_time` -timestamp is **excluded** from the result. - -The optional `bucket` parameter buckets the results in the given bucket size -(`hour`, `day`, `week`). - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------- | -| address (required) | _string_ | B58 address of the validator | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | -------------------------------------- | -| max_time (required) | _string_ | Last timestamp to include rewards for | -| min_time (required) | _string_ | First timestamp to include rewards for | -| bucket (optional) | _string_ | Bucket size (defaults to entire range) | - - - - -Rewards for a validator in the last 24 hours: `min_time=-24%20hour` - -200: OK - -```json -{ - "data": { - "avg": 5.26094276, - "max": 5.0, - "median": 5.26094276, - "min": 5.0, - "stddev": 0.0, - "sum": 4208754208, - "total": 42.08754208 - }, - "meta": { - "max_time": "2021-04-24T13:28:38Z", - "min_time": "2021-04-23T13:28:38Z" - } -} -``` - - - - ---- - -## Reward Total for all Validators - -``` -GET https://api.helium.io/v1/validators/:rewards/sum -``` - -Returns the total rewards earned for all validators over a given time range. -Timestamps are given in ISO 8601 format or in relative time. The block that -includes the `max_time` timestamp is **excluded** from the result. - - - - -_Path Parameters_ - -| param | Type | Note | -| ------------------ | -------- | ---------------------------- | -| address (required) | _string_ | B58 address of the validator | - -_Query Parameters_ - -| param | Type | Note | -| ------------------- | -------- | -------------------------------------- | -| max_time (required) | _string_ | Last timestamp to include rewards for | -| min_time (required) | _string_ | First timestamp to include rewards for | - - - - -Rewards for valdiators in the last 24 hours: `min_time=-24%20hour` - -200: OK - -```json -{ - "data": { - "avg": 128.4722221992, - "max": 252.52525248, - "median": 126.26262624, - "min": 21.04377104, - "stddev": 49.47687432, - "sum": 2569444443984, - "total": 25694.44443984 - }, - "meta": { - "max_time": "2021-04-24T13:36:48Z", - "min_time": "2021-04-23T13:36:48Z" - } -} -``` - - - - ---- diff --git a/docs/api/console.mdx b/docs/api/console.mdx deleted file mode 100644 index 0e1e125db..000000000 --- a/docs/api/console.mdx +++ /dev/null @@ -1,1307 +0,0 @@ ---- -id: console -hide_title: true -sidebar_label: Console -slug: /api/console ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## Console API - -The Console API is a set of HTTP Request that allows you to programatically -interact with Console. It's the lowest level building block and is ideal for -integrating with back-end services, for example. - -### Base URL - -``` -https://console.helium.com/ -``` - -### Authentication - -All Console API requests require an API Key which provides access to devices -owned by the **organization** which owns the device. Devices are never -associated to a single user, but instead to an organization. - -To create an account key, go to your -[profile](https://console.helium.com/profile) on Helium Console. From the top -right corner, click: `Account -> Profile`. - -From there, you may generate a key for your organization. _The key will only -display once._ - -**You must confirm the API key** creation by clicking a link that is emailed to -the account that created the API key. - -From then on, you will want to include the API key in all of your API requests. -You do this by placing your API key in an HTTP header field called "key. - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - ---- - -### Data Credit Balance - -``` -GET https://console.helium.com/api/v1/organization -``` - -##### Response - -200: OK - -```json -[ - { - "dc_balance": 731686 - "id": "07273bc4-4bc9-44ec-b4d5-ad320f162e15", - "name": "Acme", - }, -] -``` - ---- - -### Devices List - -``` -GET https://console.helium.com/api/v1/devices -``` - -##### Response - -200: OK - -```json -[ - Device { - "active": false, - "adr_allowed": null, - "app_eui": "70B3D57ED0008E64", - "app_key": "30EACA8A2CAF0C5315D0E4A1B7F7B55B", - "dev_eui": "008000000401261D", - "cf_list_enabled": null, - "config_profile_id": null, - "dc_usage": 606837, - "id": "747246dd-d9b6-4e68-96c1-2c489ab33280", - "in_xor_filter": true, - "labels": [], - "last_connected": "2022-03-03T22:37:33", - "name": "Basement Temp", - "organization_id": "07273bc4-4bc9-44ec-b4d5-ad320f162e15", - "oui": 1, - "rx_delay": 1, - "total_packets": 303442 - }, - Device { - "active": true, - "adr_allowed": null, - "app_eui": "CE1BAF8A8824FD1D", - "app_key": "2A37E7FACF2F0B7833413E9F8988C4EF", - "dev_eui": "008000000401261D", - "cf_list_enabled": null, - "config_profile_id": null, - "dc_usage": 606925, - "id": "916fc471-87f1-43a8-939e-c36589f33232", - "in_xor_filter": true, - "labels": [ - { - "adr_allowed": null, - "cf_list_enabled": null, - "config_profile_id": null, - "id": "20865d14-bd90-4cbb-80e5-401c2c71fdab", - "name": "Device group", - "rx_delay": null - "last_connected": "2022-03-03T22:37:33", - "name": "Water Level North", - "organization_id": "07273bc4-4bc9-44ec-b4d5-ad320f162e15", - "oui": 1, - "rx_delay": 1, - "total_packets": 303486 - }, -] -``` - ---- - -### Devices by AppEui, AppKey, DevEui - -``` -GET https://console.helium.com/api/v1/devices?app_eui={app_eui}&app_key={app_key}&dev_eui={dev_eui} -``` - -Returns a device descriptor if device is found. - - - - -_Path Parameters_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ----------------------------------------------------------------------------------------------------- | -| dev_eui (required) | _string_ | LoRaWAN Device EUI uniquely identifies a device | -| app_eui (required) | _string_ | LoRaWAN App EUI uniquely identifies the application of the device | -| app_key (required) | _string_ | LoRaWAN App Key is a shared secret key which is used to derive secure sessions via the Join mechanism | - - - - -```json -Device { - app_eui: "70B3D57ED0008E64", - app_key: "30EACA8A2CAF0C5315D0E4A1B7F7B55B", - dev_eui: "008000000401261D", - id: "747246dd-d9b6-4e68-96c1-2c489ab33280", - name: "Basement Temp", - organization_id: "07273bc4-4bc9-44ec-b4d5-ad320f162e15", - oui: 1, -} -``` - - - - ---- - -### Device by UUID - -``` -GET https://console.helium.com/api/v1/devices/:device_id -``` - -Returns a device descriptor if device is found. - - - - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------- | -------- | ------------------ | -| device_id (required) | _string_ | UUID of the device | - - - - -```json -Device { - "adr_allowed":(true/false), - "app_eui": (app_eui), - "app_key": (app_key), - "cf_list_enabled":(true/false), - "dc_usage": (dc_amount_used), - "dev_eui": (dev_eui), - "id": (device_id), - "in_xor_filter":(true/false) - "labels": (labels) - "last_connected": (time_UTC) - "name": (device_name) - "organization_id": (org_id) - "oui": (oui_number) - "total_packets":(packets_sent) -} -``` - - - - ---- - -### Device Events - -``` -GET https://console.helium.com/api/v1/devices/:device_id/events -``` - -Returns the previous 100 events for the device if found. - - - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------- | -------- | ------------------ | -| device_id (required) | _string_ | UUID of the device | - - - - -```json -Device { -"category": "uplink", - "data": { - "dc": { - "balance": 7944423, - "nonce": 2, - "used": 2 - }, - "devaddr": (devaddr), - "fcnt": 33032, - "hold_time": 30, - "hotspot": { - "channel": 15, - "frequency": 905.2999877929688, - "id": ("hotspot_id"), - "lat": (lat), - "long": (long), - "name": ("hotspot_name"), - "rssi": -57.0, - "snr": 12.800000190734863, - "spreading": "SF9BW125" - }, - "mac": [], - "payload": ("payload"), - "payload_size": 27, - "port": 1 - }, - "description": "Confirmed data up received", - "device_id": ("device_id"), - "frame_down": null, - "frame_up": 33032, - "organization_id": ("org_id"), - "reported_at": "1632352528562", - "router_uuid": ("router_id"), - "sub_category": "uplink_confirmed" -} -``` - - - ---- - -### Device Integration Events - -``` -GET https://console.helium.com/api/v1/devices/:device_id/events?sub_category=uplink_integration_req -``` - -Returns the previous 10 Integration events for the device if found. - - - - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------- | -------- | ------------------ | -| device_id (required) | _string_ | UUID of the device | - - - - -```json -Device { - "category": "uplink", - "data": { - "integration": { - "id": ("integration_id"), - "name": "azure-int", - "status": "success" - }, - "req": { - "body": { - "app_eui": ("app_eui)", - "dev_eui": ("dev_eui", - "devaddr": ("devaddr"), - "fcnt": 33072, - "hotspots": [ - { - "channel": 12, - "frequency": 904.7000122070313, - "hold_time": 31, - "id": ("hotspot_id)", - "lat": ("lat"), - "long": ("long", - "name": ("hotspot_name"), - "reported_at": 1632353389723, - "rssi": -57.0, - "snr": 12.5, - "spreading": "SF9BW125", - "status": "success" - }, - ], - "id": ("device_id"), - "metadata": { - "adr_allowed": false, - "cf_list_enabled": false, - "multi_buy": 1, - "organization_id": ("org_id") - }, - "name": ("device_name"), - "payload": ("device_payload"), - "payload_size": 27, - "port": 1, - "reported_at": 1632353389723, - "uuid": ("device_id") - }, - "qos": 0 - } - }, - "description": "Request sent to <<\"azure-int\">>", - "device_id": ("device_id"), - "frame_down": null, - "frame_up": null, - "organization_id": ("org_id"), - "reported_at": "1632353390125", - "router_uuid": ("router_id"), - "sub_category": "uplink_integration_req" - }, -} -``` - - - - ---- - -### Create Device - -``` -POST https://console.helium.com/api/v1/devices -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | -| content-type (required) | _string_ | application/json | - -_Body Parameters_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| name (required) | _string_ | A human-friendly name for the device | -| app_eui (required) | _string_ | LoRaWAN Application EUI | -| app_key (required) | _string_ | LoRaWAN Application Key | -| dev_eui (required) | _string_ | LoRaWAN Device EUI | -| config_profile_id (optional) | _string_ | Config profile uuid to attach | -| label_ids (optional) | Array of strings | Array of label uuids to attach to device | - - - - - -201: created - - - - ---- - -### Delete Device by UUID - -``` -DELETE https://console.helium.com/api/v1/devices/:id -``` - -Deletes device record by UUID. - - - - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------- | -------- | -------------------------------- | -| id (required) | _string_ | UUID of the device to be deleted | - - - - -200: OK - -``` -Device deleted -``` - - - - ---- - -### Labels - -``` -GET https://console.helium.com/api/v1/labels -``` - -Returns a list of label descriptors associated with the organization. - -##### Response - -200: OK - -```json -[ - Label { - id: "20515fce-2f7c-4025-8841-4be47cb9ec3c", - name: "Test LoRaWAN", - }, - Label { - id: "d20d5d32-f699-40a7-a5a7-b9a49dfe2b4a", - name: "AWS", - }, - Label { - id: "a332bb1e-888e-43d9-ad38-f4043fff791f", - name: "RequestBinDownlink", - }, - Label { - id: "19bee2e7-b222-461f-a271-15b3c52d5532", - name: "MQTT-Test", - }, -] -``` - ---- - -### Create Label - -``` -POST https://console.helium.com/api/v1/labels -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | -| content-type (required) | _string_ | application/json | - -_Body Parameters_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| name (required) | _string_ | A human-friendly name for the device | -| config_profile_id (optional) | _string_ | Config profile uuid to attach | - - - - -201: created - - - - ---- - -### Delete Label - -``` -DELETE https://console.helium.com/api/v1/labels/:label_id -``` - -Delete a device label, along with all of its device links. - - - - -_Body Parameters_ - -| Parameter Name | Type | Description | -| ------------------- | -------- | ---------------------------------------- | -| label_id (required) | _string_ | The UUID of the label being searched for | - - - - -200: OK - -```json -Label { - id: "868ea783-f252-4fc4-b724-a155680c0bc9", - name: "Blue Label", -} -``` - -404: Not Found - -```json -{ "errors": { "error": ["Label not found"] } } -``` - - - - ---- - -### Search for Label - -``` -GET https://console.helium.com/api/v1/labels/:label_id -``` - -Search for a label by UUID. - - - - -_Path Parameters_ - -| Parameter Name | Type | Description | -| ------------------- | -------- | ------------- | -| label_id (required) | _string_ | UUID of label | - - - - -200: OK - -```json -{ - "id": "868ea783-f252-4fc4-b724-a155680c0bc9", - "multi_buy": 1, - "name": "Blue Label" -} -``` - -404: Not Found - -```json -{ "errors": { "error": ["Label not found"] } } -``` - - - - -``` -GET https://console.helium.com/api/v1/labels -``` - -Search for label by name. - - - - -_Path Parameters_ - -| Parameter Name | Type | Description | -| --------------- | -------- | ------------- | -| name (required) | _string_ | name of label | - - - - -200: OK - -```json -{ - "id": "868ea783-f252-4fc4-b724-a155680c0bc9", - "multi_buy": 1, - "name": "Blue Label" -} -``` - -404: Not Found - -```json -{ "errors": { "error": ["Label not found"] } } -``` - - - - ---- - -### Add Device Label - -``` -POST https://console.helium.com/api/v1/devices/:device_id/labels -``` - -Add Device to Label - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | -| content-type (required) | _string_ | application/json | - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------------- | -------- | -------------- | -| device_id (required) | _string_ | UUID of device | - -_Body Parameters_ - -| Parameter Name | Type | Description | -| ---------------- | -------- | ------------- | -| label (required) | _string_ | UUID of label | - - - - -200: OK - -```json -Device added to label successfully -``` - - - - ---- - -### Remove Device Label - -``` -DELETE https://console.helium.com/api/v1/devices/:device_id/labels/:label_id -``` - -Remove Device Label - - - - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------------- | -------- | -------------- | -| device_id (required) | _string_ | UUID of device | -| label_id (required) | _string_ | UUID of label | - - - - -200: OK - -```json -Device removed from label successfully -``` - - - - ---- - -### Create an Integration -Create prebuilt integration for integration providers planning to offer connectivity as a service. - -``` -POST https://console.helium.com/api/v1/integrations/prebuilt -``` - -Creates a device with corresponding name, Application EUI, Application Key, and -Device EUI. - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | -| content-type (required) | _string_ | application/json | - -_Body Parameters_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| token (required) | _string_ | Your token, authorization key, uplink secret depending on pre-built integration.| -| name (required) | _string_ | A unique name for the Integration | -| type (required) | _string_ | “akenza” “ubidots” “tago” “datacake” | - - - - -201: Created - -``` -{ - "devices": [], - "id": "8bcf235a-0ee7-4e74-9856-e07c13a863b6", - "labels": [], - "name": "name" -} -``` - - - - ---- - -### Delete an Integration - -``` -DELETE https://console.helium.com/api/v1/integrations/:integration_id -``` - -Delete an Integration along with any links to labels. - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------- | -------- | -------------------------------- | -| integration_id (required) | _string_ | UUID for removed integration | - - - - -200: OK - -``` -Integration { - id: "868ea783-f252-4fc4-b724-a155680c0bc9", - name: "Terry Fox", - } -``` - -404: Not Found -``` -{ "errors": { "error": ["Integration not found"] } } -``` - - - - - ---- -### List Integrations - -``` -GET https://console.helium.com/api/v1/integrations/ -``` - -Returns a list of integrations associated with the organization. - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - - - - -200: OK - -``` - Integration { - id: "20515fce-2f7c-4025-8841-4be47cb9ec3c", - name: "Terry Fox" - labels: [], - devices: [], - }, - Integration { - id: "d20d5d32-f699-40a7-a5a7-b9a49dfe2b4a", - name: "Tommy Douglas", - labels: [], - devices: [], - }, -``` - - - - ---- - -### Search for an Integration by UUID - -``` -GET https://console.helium.com/api/v1/integrations/:integration_id -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------- | -------- | -------------------------------- | -| integration_id (required) | _string_ | UUID of integration | - - - - -200: OK - -``` -Integration { - id: "868ea783-f252-4fc4-b724-a155680c0bc9", - name: "Terry Fox", - labels: [], - devices: [], -}, -``` - -404: Not Found -``` -{ "errors": { "error": ["Integration not found"] } } -``` - - - - - ---- - -### Search for an Integration by Name - -``` -GET https://console.helium.com/api/v1/integrations?name=your_integration_name -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - -_Query Parameters_ - -| Parameter Name | Type | Description | -| -------------- | -------- | -------------------------------- | -| name (required) | _string_ | name of integration | - - - - -200: OK - -``` -Integration { - id: "868ea783-f252-4fc4-b724-a155680c0bc9", - name: "Terry Fox", - labels: [], - devices: [], -}, -``` - -404: Not Found -``` -{ "errors": { "error": ["Integration not found"] } } -``` - - - - ---- - -### View all flows for integration - -``` -GET https://console.helium.com/api/v1/flows?integration_id=your_integration_id -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - -_Query Parameters_ - -| Parameter Name | Type | Description | -| -------------- | -------- | -------------------------------- | -| integration_id (required) | _string_ | UUID of integration | - - - - -200: OK - -``` -[ -{ - "device_id": null, - "function_id": "7591901a-1299-4893-b0b5-65786c481bcc", - "id": "1f99c35c-20c5-42f6-b3e4-984bba68ade1", - "integration_id": "c23f1419-47af-4673-931a-7acdae1ddee5", - "label_id": "d7c095cb-4923-42c1-967a-5574eedc2dc4", - "organization_id": "e9ea354a-cf4d-492a-b332-3d2ee4fe177e" - }, -{ - "device_id": null, - "function_id": "7591901a-1299-4893-b0b5-65786c481bcc", - "id": "1f99c35c-20c5-42f6-b3e4-984bba68ade1", - "integration_id": "c23f1419-47af-4673-931a-7acdae1ddee5", - "label_id": "d7c095cb-4923-42c1-967a-5574eedc2dc4", - "organization_id": "e9ea354a-cf4d-492a-b332-3d2ee4fe177e" - } - -] -``` - - - ---- - -### Create flow for integration -Creating a prebuilt integration for CaaS providers. - -``` -POST https://console.helium.com/api/v1/flows -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | -| content-type (required) | _string_ | application/json | - -_Body Parameters_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| integration_id (required) | _string_ | UUID of integration| -| label_id / device_id (required) | _string_ | UUID | -| function_id (optional) | _string_ | UUID | - - - - -200: OK - -Flow with integration created successfully - -``` -{ - "devices": [], - "id": "8bcf235a-0ee7-4e74-9856-e07c13a863b6", - "labels": [], - "name": "name" -} - -``` - - - - ---- - -### Delete flow - -``` -DELETE https://console.helium.com/api/v1/flows/:flow_id -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------- | -------- | -------------------------------- | -| flow_id (required) | _string_ | UUID of flow | - - - - -200: OK - -``` -Flow deleted successfully -``` - - - - ---- -### Update Device Config Profile -``` -PUT https://console.helium.com/api/v1/devices/:device_id -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------------- | -------- | -------------- | -| device_id (required) | _string_ | UUID of device | - -_Body Parameters_ - -| Parameter Name | Type | Description | -| ---------------- | -------- | ------------- | -| config_profile_id (required) | _string / null_ | Config profile uuid to attach or set to null to remove | - - - - -200: OK - - - - ---- - -### Update Label Config Profile -``` -PUT https://console.helium.com/api/v1/labels/:label_id -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------------- | -------- | -------------- | -| label_id (required) | _string_ | UUID of label | - -_Body Parameters_ - -| Parameter Name | Type | Description | -| ---------------- | -------- | ------------- | -| config_profile_id (required) | _string_ | Config profile uuid to attach or set to null to remove | - - - - -200: OK - - - - ---- - -### Update Device Active Status -``` -PUT https://console.helium.com/api/v1/devices/:device_id -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------------- | -------- | -------------- | -| device_id (required) | _string_ | UUID of device | - -_Body Parameters_ - -| Parameter Name | Type | Description | -| ---------------- | -------- | ------------- | -| active (required) | _string_ | boolean | - - - - -200: OK - - - - ---- - -### Update Devices Active Status -``` -PUT https://console.helium.com/api/v1/devices/active?dev_eui=your_dev_eui -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - -_Query Parameters_ - -| Parameter Name | Type | Description | -| -------------------- | -------- | -------------- | -| dev_eui (required) | _string_ | Device dev_eui | -| app_eui (optional) | _string_ | Device app_eui | -| app key (optional) | _string_ | Device app_key | - -_Body Parameters_ - -| Parameter Name | Type | Description | -| ---------------- | -------- | ------------- | -| active (required) | _string_ | boolean | - - - - -200: OK - - - - ---- - -### Update Devices attached to label Active Status - -``` -PUT https://console.helium.com/api/v1/labels/:label_id/active -``` - - - - -_Headers_ - -| Parameter Name | Type | Description | -| ------------------ | -------- | ------------------------------------ | -| key (required) | _string_ | your API key | - -_Path Parameters_ - -| Parameter Name | Type | Description | -| -------------------- | -------- | -------------- | -| label_id (required) (required) | _string_ | Label uuid | - -_Body Parameters_ - -| Parameter Name | Type | Description | -| ---------------- | -------- | ------------- | -| active (required) | _string_ | boolean | - - - - -200: OK - - - \ No newline at end of file diff --git a/docs/api/home.mdx b/docs/api/home.mdx deleted file mode 100644 index c28496447..000000000 --- a/docs/api/home.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -id: home -sidebar_label: Home -slug: /api ---- - -# Helium APIs - -The Helium Network currently exposes the following APIs: - -* [Blockchain API](/api/blockchain/introduction) - Access real-time and historical data from the helium blockchain. -* [Console API](/api/console) - Provides programatic access to your organization's sensor data on [console.helium.com](https://console.helium.com) diff --git a/docs/blockchain/blockchain-primitives/blockchain-primitives.mdx b/docs/blockchain/blockchain-primitives/blockchain-primitives.mdx deleted file mode 100644 index 29d1ef918..000000000 --- a/docs/blockchain/blockchain-primitives/blockchain-primitives.mdx +++ /dev/null @@ -1,163 +0,0 @@ ---- -id: blockchain-primitives -hide_title: true -sidebar_label: Blockchain Primitives -slug: /blockchain/blockchain-primitives ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -# Helium Blockchain Primitives - -Below are some of the larger components and concepts of the Helium blockchain. - -### Blocks - -Blocks are used to record the most recent set of transactions in the Helium -blockchain. Blocks are mined based on time, as defined in the `block_time` chain -variable. The current target block time is `60000` milliseconds (or 60 seconds). -During any given epoch, the most recent block consists of: - -- Block Version -- Block Height -- Previous Block Hash -- Transactions (stored as a Merkle hash) -- Threshold signature from the current consensus group - -The easiest way to see the blocks being mined is with the -[Helium Blockchain Explorer](https://explorer.helium.com/). The -[Helium Mobile App](https://helium.com/app) also shows block details. Developers -can also use the Helium blockchain API to access all blockchain transactions and -metadata. - -### Epochs - -An `epoch` is the target time period for which a given group of Validators is -elected to serve as the consensus group. The target time for an epoch is -currently `30 blocks`, as defined in the `election_interval` chain variable. -Approximately every 30 blocks mined marks the passing of an epoch, after which a -new group of Validators is elected to form the next consensus group. Mining rewards -are distributed per epoch (as opposed to per block in most blockchain-based -systems). At the conclusion of each epoch, the consensus group will distribute -all the $HNT produced in that block via the `rewards` transaction. - -### Transactions - -The Helium blockchain currently has 36 native transaction types. Some appear in -nearly every block mined while others were created to be used only once and will -never be heard from again. - -You can see various transaction types in action using the -[Helium Blockchain Explorer](https://explorer.helium.com/). At a low level, -transactions are represented as -[Protocol Buffers](https://developers.google.com/protocol-buffers), aka -"protobuf". To sign a transaction, other signature fields (if present) are -cleared and the serialized protobuf is signed by the actor. -[The protobuf definitions are available here](https://github.com/helium/proto). - -All transactions occur on-chain, and all transactions require Helium Data -Credits to be submitted and confirmed. The following is a list of the supported -transactions: - -- `add gateway` - Add a new gateway to the Helium Network. For the purposes of - transactions, a “gateway” is the term for a Helium-compliant Miner that is - mining and providing coverage. -- `assert location` - Assert a gateway’s location on the Helium Network. This - happens after a gateway has been added via the add gateway transaction. Once - asserted, this location is then used as part of Proof of Coverage challenges. - A Miner’s location can be asserted more than once but each subsequent - assertion will a) cost a fee and b) reset that Miner’s score to neutral (.15) -- `chain vars` - Change a chain variable. -- `coinbase` - Similar to the bitcoin blockchain’s coinbase transaction but used - only during testnet phases of the Helium blockchain. The `rewards` transaction - has taken its place. -- `coinbase data credits` - Created the initial 10,000 Data Credits required to - bring the first group of Miners online. -- `consensus group` - Marks the election of a new consensus group, responsible - for mining during the next epoch. -- `create hashed timelock` - Creates a transaction that can only be redeemed by - providing the correct pre-image to the hashlock within the specified timelock. -- `create proof of coverage request` - Submitted by a Miner wishing to initiate - a challenge. -- `data credits` - Burn HNT for DCs at the current oracle price and deliver them - to the target wallet address. -- `genesis gateway` - Used to define the initial group of Miners that - bootstrapped the blockchain. -- `multi-payment` - Used to send $HNT from one wallet to multiple wallets. -- `OUI` - Create a OUI for a new router on the Helium network. In the Helium - blockchain, Miners forward packets to Routers that own them based on their OUI - as stored in the blockchain. -- `payment` - Used to send $HNT from one wallet to another. -- `proof of coverage receipts` - The result of a POC submitted to the network - upon completion. -- `redeem hashed timelock` - Redeem the transaction created using the create - hashed timelock transaction. -- `reward` - A token payout for a specific event on the network such as - submitting a valid proof of coverage request, participating in a consensus - group, etc. -- `rewards` - Bundles multiple reward transactions at the end of each epoch and - distributes all $HNT produced in that block to wallets that have earned them. -- `routing` - Update the routing information associated with an OUI. -- `security coinbase` - Distribution of security tokens in the genesis block. -- `security exchange` - The transfer of security tokens from one address to - another. -- `state channel open` - Opens a new state channel on a Helium Router -- `state channel close` - Closes a specific state channel on a Helium Router -- `token burn exchange rate` - Change the exchange rate for burning $HNT to DCs. -- `stake validator` - Stake a new Validator on the Helium Network. -- `transfer validator` - Transfer a staked Validator to a new owner or a new Validator. -- `unstake validator` - Unstake a previously staked Validator. - -**Extended Reading on Transactions** - -- [Helium Blockchain Core on GitHub](https://github.com/helium/blockchain-core) -- [Transaction protobuf definitions on GitHub](https://github.com/helium/proto) - -### Chain Variables - -Chain Variables, often referred to as `chain vars`, are a series of -configuration settings for the Helium blockchain. Chain Variables can be used to -change things like target block time, target epoch time, the minimum number of -targets in a POC Challenge, and much more. Chain Variables can be altered by -submitting a transaction containing the chain variable to be changed, its new -value, and a signature of the chain variable master key. - -A full list of chain vars and their current values -[can be found here](https://helium.plus/chain-vars). - -### Accounts, Wallets, and Keys - -The Helium blockchain uses an account-based system for wallets and balances -(similar to Ethereum and others) as opposed to a UTXO-based ledger like Bitcoin -blockchain. Users have several options for creating Helium wallets and managing -their private keys: - -- If you’re using the [Helium Mobile Wallet](https://helium.com/app) (iOS, - Android), your private key is encrypted locally (and can be recreated on - another mobile device using the 12 word passphrase generated when your wallet - was first created); -- Using the [Helium CLI Wallet](https://github.com/helium/helium-wallet-rs), - users are responsible for creating, storing, and securing a wallet’s private - key and associated passphrase; - -Both the Helium Mobile Wallet and the CLI Wallet create and use keys based on -the [ed25519 public key signature system](https://ed25519.cr.yp.to/). The CLI -can also support NIST p-256 keys. And the Helium blockchain supports both key -types. - -To learn more about existing wallet solutions, check out our -[section on wallets](/wallets). - -### Validators - -Introduced in [HIP25](https://github.com/helium/HIP/blob/master/0025-validators.md), and officially [deployed to Mainnet on July 7, 2021](https://dewialliance.medium.com/validators-are-live-on-the-helium-network-fcf549a5e182), Validators are cloud-based nodes responsible -for processing blocks and managing the blockchain consensus group. In return for securing the blockchain, Validators earn the 6% of HNT allocated -to the consensus group reward. To operate a Validator, one must stake 10,000 HNT. - -* [Validators on the Helium Blockchain Explorer](https://explorer.helium.com/validators) -* [Deploy a Validator](/mine-hnt/validators) - - - diff --git a/docs/blockchain/blockchain.mdx b/docs/blockchain/blockchain.mdx deleted file mode 100644 index 21efa3fae..000000000 --- a/docs/blockchain/blockchain.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: blockchain -hide_title: true -sidebar_label: Introduction -slug: /blockchain -hide_table_of_contents: true ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -
-
-
-
- -
-

The Helium Blockchain

-

The Helium Blockchain is a new blockchain built from the ground up to incentivize the creation of decentralized, public wireless networks.

- -
-
-
-
-
- - -
-
-
-

Introduction

-
-
-

The Helium Blockchain is based on a new, novel work algorithm called Proof of Coverage (PoC), and rewards miners in $HNT, the native token of the Helium blockchain. Officially launched on July 29, 2019, the Helium Blockchain powers the largest, public, decentralized LoRaWAN Network in the world.

-

If you are a developer and interested in contributing, or simply just interested in learning more, join us in the #blockchain-development channel on our Discord.

-
- -
-
- diff --git a/docs/blockchain/consensus-protocol/consensus-protocol.mdx b/docs/blockchain/consensus-protocol/consensus-protocol.mdx deleted file mode 100644 index 4743a5fbf..000000000 --- a/docs/blockchain/consensus-protocol/consensus-protocol.mdx +++ /dev/null @@ -1,91 +0,0 @@ ---- -id: consensus-protocol -hide_title: true -sidebar_label: Consensus Protocol -slug: /blockchain/consensus-protocol ---- -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -# The Helium Consensus Protocol - -The Helium blockchain uses a new consensus protocol, called simply the **Helium -Consensus Protocol**. - -## Consensus Protocol Design Goals - -In designing the protocol, we wanted to emphasize the following characteristics: - -- **Permissionless** - Any Hotspot operating in accordance with the consensus - rules and network specifications should be able to participate freely in the - Helium Network. -- **Truly decentralized by design** - No incentive should be available for - taking advantage of factors like inexpensive energy cost or deploying more - hardware in the same location. -- **Byzantine Fault Tolerant** - The protocol should be tolerant of Byzantine - failures such that consensus can still be reached as long as a threshold of - participants are acting honestly. For this, we selected a variant known as - `HoneyBadgerBFT` detailed below. -- **Based on useful work** - Achieving network consensus should be useful and - reusable to the network. In Nakamoto Consensus-based systems like the bitcoin - blockchain, work performed to achieve consensus is only valid for a specific - block. By comparison, Helium’s consensus system should perform work that is - both useful and reusable to the network beyond simply securing the blockchain. -- **High rate of confirmed transactions** - The protocol should be able to - achieve a high number of transactions per second, and once the transaction is - seen by the blockchain it should be assumed confirmed. Users sending device - data through the Helium Network cannot tolerate long block settlement times - typical of other blockchains. -- **Censorship-resistant transactions** - Hotspots should not be able to censor or - otherwise select / deselect transactions to be included in a block. - -## HoneyBadger BFT - -The Helium Consensus Protocol is based on a variant of the HoneyBadgerBFT -(HBBFT) protocol. HBBFT is based on a body of research originally kicked off by -Andrew Miller and the team at the University of Illinois, Urbana-Champaign. - -HBBFT is an asynchronous atomic broadcast protocol designed to enable a group of -known nodes to achieve consensus over unreliable links. In Helium’s -implementation, a consensus group of [elected Validators](https://explorer-beta.helium.com/validators) receives encrypted -transactions as inputs and proceeds to reach common agreement on the ordering of -these transactions before forming a block and adding it to the blockchain. - -HBBFT relies on a scheme known as threshold encryption. Using this scheme, -transactions are encrypted using a shared public key, and are only decryptable -when the elected consensus group works together to decrypt them. The usage of -threshold encryption enables the Helium Consensus Protocol to achieve -censorship-resistant transactions. - -### Extended Reading - -- [HoneyBadger BFT (PDF)](https://eprint.iacr.org/2016/199.pdf) -- [Introducing the Helium blockchain](https://blog.helium.com/introducing-the-helium-blockchain-dc2f8997083c) - -## The Consensus Group Election - -A new Consensus Group \(CG\) is elected once per epoch. Currently there are `40` members elected to each consensus group, as defined in the `num_consensus_members` chain variable. - -:::info - -For a more complete overview of how Validators are elected to the consensus group, see the [Election Process Documentation](/mine-hnt/validators/penalties/#the-election-process) - -::: - - -## Rewarding Hotspots - -At the end of each epoch, mining rewards are distributed by the consensus group to the wallet addresses that have earned them. Currently `65%` of all mining rewards go to the hotspot infrastructure \(with the remaining `35%` being distributed to Helium, Inc and other network investors\). A graphical overview of token reward system can be [viewed here](https://www.helium.com/tokens). - -During the course of any epoch, Hotspots are rewarded for the following list of activities: - -* Submitting valid proof of coverage challenges \(as a “challenger”\) -* Successful participation in proof of coverage as a target \(as a “challengee”\) -* Witnessing a proof of coverage challenge -* Transferring device data over the network -* Serving as consensus group member - -The Consensus Group then splits `6%` of all HNT mined, as well as any transaction fees collected during the epoch. - -Each one of the above activities is recorded in a block using the `reward` transaction. At the completion of each epoch, all the individual `reward` transactions are grouped in a `rewards` transaction at which point all $HNT mined in that epoch are distributed. \ No newline at end of file diff --git a/docs/blockchain/helium-token/helium-token.mdx b/docs/blockchain/helium-token/helium-token.mdx deleted file mode 100644 index 6426308fe..000000000 --- a/docs/blockchain/helium-token/helium-token.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -id: helium-token -hide_title: true -sidebar_label: Helium Token -slug: /blockchain/helium-token ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -# The Helium Token - -The Helium Token is the native cryptocurrency and protocol token of the Helium -blockchain. Its symbol is `HNT`. Prior to the launch of the Helium blockchain, there was no premine of `HNT`. -The first `HNT` was produced on July 29th, 2019 [as part of the block 93](https://explorer.helium.com/txns/sEP-cbb2tvSrfbBleT21yGDNM8FIjNr3UT3k3BeZELw). - - -:::info -For statistics on HNT, [see the Market section on the Helium Explorer](https://explorer.helium.com/market). -::: - -## Helium Token Usage - -The Helium Token is designed to serve the needs of the two primary parties in -the Helium blockchain ecosystem: - -1. **Hotspot Hosts and Network Operators**. Hosts - [mine HNT](/blockchain/mining) while deploying and maintaining network - coverage. -2. **Enterprises and developers using the Helium Network** to connect devices - and build IoT applications. Data Credits, which are a $USD-pegged utility token - derived from HNT in a burn transaction, - [are used to pay transaction fees](/blockchain/transaction-fees) for wireless - data transmissions on the network (in addition to things like adding Hotspots - and sending). - -## HNT Token Economic Concepts - -The Helium blockchain uses three distinct token economic concepts to ensure HNT -supply is both plentiful for network needs but also relatively scarce, with a -known maximum. Let's take a look at them in some detail. - -### Max Supply - -At launch [genesis block](https://explorer.helium.com/blocks/1), the -Helium Network targeted `5,000,000` HNT per month. And since the -[community approval of HIP 20](https://github.com/helium/HIP/issues/73), the -Helium blockchain uses a two year halving schedule, with a maximum supply of -`223,000,000` HNT. - -HNT halving happens every two years from the genesis block, on the following -schedule. - -:::info -In the below issuance schedule, year 1 starts on **August 1, 2019**. The first halving happened -on approximately day one of the beginning of year three, **August 1, 2021**. The network is -now producing `2,500,000` HNT until the next scheduled halving. -::: - -| Year | HNT at start of year | Total HNT Minted | -| :--- | :------------------- | :--------------- | -| 1 | 0 | 60,000,000.0 | -| 2 | 60,000,000 | 60,000,000.0 | -| 3 | 120,000,000 | 30,000,000.0 | -| 4 | 150,000,000 | 30,000,000.0 | -| 5 | 180,000,000 | 15,000,000.0 | -| 6 | 195,000,000 | 15,000,000.0 | -| 7 | 210,000,000 | 7,500,000.0 | -| 8 | 217,500,000 | 7,500,000.0 | -| 9 | 225,000,000 | 3,750,000.0 | -| 10 | 228,750,000 | 3,750,000.0 | -| 11 | 232,500,000 | 1,875,000.0 | -| 12 | 234,375,000 | 1,875,000.0 | -| 13 | 236,250,000 | 937,500.0 | -| 14 | 237,187,500 | 937,500.0 | -| 15 | 238,125,000 | 468,750.0 | -| 16 | 238,593,750 | 468,750.0 | -| 17 | 239,062,500 | 234,375.0 | -| 18 | 239,296,875 | 234,375.0 | -| 19 | 239,531,250 | 117,187.5 | -| 20 | 239,648,438 | 117,187.5 | -| 21 | 239,765,625 | 58,593.8 | -| 22 | 239,824,219 | 58,593.8 | -| 23 | 239,882,813 | 29,296.9 | -| 24 | 239,912,109 | 29,296.9 | -| 25 | 239,941,406 | 14,648.4 | -| 26 | 239,956,055 | 14,648.4 | -| 27 | 239,970,703 | 7,324.2 | -| 28 | 239,978,027 | 7,324.2 | -| 29 | 239,985,352 | 3,662.1 | -| 30 | 239,989,014 | 3,662.1 | -| 31 | 239,992,676 | 1,831.1 | -| 32 | 239,994,507 | 1,831.1 | -| 33 | 239,996,338 | 915.5 | -| 34 | 239,997,253 | 915.5 | -| 35 | 239,998,169 | 457.8 | -| 36 | 239,998,627 | 457.8 | -| 37 | 239,999,084 | 228.9 | -| 38 | 239,999,313 | 228.9 | -| 39 | 239,999,542 | 114.4 | -| 40 | 239,999,657 | 114.4 | -| 41 | 239,999,771 | 57.2 | -| 42 | 239,999,828 | 57.2 | -| 43 | 239,999,886 | 28.6 | -| 44 | 239,999,914 | 28.6 | -| 45 | 239,999,943 | 14.3 | -| 46 | 239,999,957 | 14.3 | -| 47 | 239,999,971 | 7.2 | -| 48 | 239,999,979 | 7.2 | -| 49 | 239,999,986 | 3.6 | -| 50 | 239,999,989 | 3.6 | - -:::important -While the above schedule states approximately `240,000,000` -HNT will be produced, year one of the blockchain only produced around -`43,000,000` of the target `60,000,000` due to some slow block times. So the -actual maximum supply is `223,000,000` HNT. -::: - -### Data Credits and Burn-and-Mint Economics - -As noted above, **Data Credits** are a $USD-pegged utility token derived from -HNT in a burn transaction and used to pay -[all transaction fees](/blockchain/transaction-fees) on the Helium Network. -One Data Credit will always cost `$0.00001`. Or, `$1.00` will always buy you -`100,000` Data Credits. But, as noted above, Data Credits are produced by -burning HNT. And the market price of HNT will of course fluctuate. - -This HNT to DC relationship is based on a design commonly called a -[burn and mint equilibrium](https://multicoin.capital/2018/02/13/new-models-utility-tokens/) -and is intended to allow for the supply of HNT to respond to network usage -trends such that, when equilibrium is found, the amount of HNT that exists -remains static month on month. (Helium borrowed heavily from Factom’s usage of -this design though other blockchains have also used it.) The amount of Data -Credits produced by burning HNT will move up and down based on the USD price -of HNT as reported by the [HNT Oracles](/blockchain/oracles). Let's look at -a few examples of how this works on-chain. - -**Example 1** - -- As always, the price of one DC is `$.00001` -- The current HNT Oracle price is `$1` -- Burning `1` HNT would produce `100,000` DCs - -**Example 2** - -A Helium Network user requires `50,000` DCs per month to send data for their -fleet of Helium-connected mouse traps. (Yes, these actually exist, and they are -glorious.) To acquire these 50,000 DCs per month, -they would burn .5 HNT using the following math: - -- Again, the price of DC is `$.00001` -- The current HNT Oracle price is `$1` -- Burning `.5` HNT would produce the needed `50,000` DCs - -:::important -Once burned, DCs are owned by the Helium wallet specified in the -burn transaction. They are non-transferrable and can only be used by the wallet -owner. -::: - -### Net Emissions - -:::info -Though Net Emissions was introduced as part of HIP 20, it has not yet been activated on chain. -::: - -At this point, the astute reader might be asking themselves the following -question: - -> If HNT supply is capped at 223,000,000 AND the Network is constantly burning -> HNT to mint Data Credits to enable transactions, won't we run out of HNT? - -**Yes.** This is where the idea of Net Emissions comes in. Along with Max -Supply, [HIP 20](https://github.com/helium/HIP/issues/73) also introduced the -idea of Net Emissions. Net Emissions give the protocol enough HNT to reward consensus -group members and Hotspots in perpetuity. - -The [complete Net Emissions discussion in the HIP](https://github.com/helium/HIP/blob/master/0020-hnt-max-supply.md#net-emissions) -is the best resource on this, but we'll provide a quick summary here: - -- Using Net Emissions, the blockchain would monitor how many HNT were - burnt for Data Credits in a given epoch and add them to the number of HNT to be - minted that epoch. For example, if 10 HNT were burned for - Data Credits in an epoch, the system would mint 10 more HNT than were expected in - that given epoch. -- Because HNT produced via Net Emissions do not add to the total outstanding, they - do not violate max supply. -- However, Net Emissions would counteract the desired, deflationary effect of Burn and - Mint. If the system replaces all the HNT that are burned to create Data Credits, there - is no resulting reduction of supply. -- Because of this, when implemented, there will be a cap on the number of HNT - that can be created via Net Emissions per epoch. When the HNT burned for DCs exceeds - this cap, there will be a reduction in supply. - diff --git a/docs/blockchain/mining/mining.mdx b/docs/blockchain/mining/mining.mdx deleted file mode 100644 index 04974ccf9..000000000 --- a/docs/blockchain/mining/mining.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -id: mining -hide_title: true -sidebar_label: Mining & Rewards -slug: /blockchain/mining ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -# Mining and Token Rewards - -While there's no exact formula for calculating how much `HNT` you'll earn -over a given period, there are some higher level concepts, design elements, and -rules to keep in mind that will help better explain what you might earn and why. -This section covers these, as well as some mining and token reward basics. - -## How Do Hotspots Earn Helium Tokens? - -The Helium blockchain rewards Hotspots for providing wireless coverage and -verifying the Helium Network. Hotspots are rewarded in Helium Token, $HNT. - -Every epoch, the current consensus group mines approximately 30 blocks on the -blockchain. In each block, Hotspots perform various types of work and are awarded -according to the following distribution: - -| Reward Type | Description | -| :-------------------- | :---------------------------------------------------------------------------------------------------------------- | -| PoC Challenger | Rewarded to any Hotspot that creates a valid PoC challenge and submits the corresponding receipt to the blockchain. | -| PoC Challengees | Awarded to any Hotspot that transmits a PoC packet after being targeted by the challenger. | -| Witnesses | Distributed to all Hotspots that witness a beacon packet as part of a PoC Challenge. | -| Consensus Group | Divided equally among the Validators that are part of the outgoing Consensus Group, responsible for mining blocks. | -| Security | Awarded to Helium, Inc and other Network investors who hold Security Tokens. | -| Network Data Transfer | Distributed each epoch to Hotspots that route LongFi sensor data for sensors on the Network during that epoch. | - -**_Do I Have To Actively Participate to Earn Rewards Once My Hotspot is -Deployed?_** - -No. Once your Hotspot is completely deployed and fully synced with the Helium -blockchain, you as the owner are not required to do anything else in order to -earn $HNT. Your Hotspot will perform all of the above activities on its own -while it runs. - -## Target $HNT Production Per Epoch - -As of August 1, 2021 (the most-recent halving), the target production rate for new $HNT minted per month is `2,500,000`. This -means that, if the blockchain performs as designed, it will produce `2,500,000` -HNT per month. This target rate is based on the following two parameters, as -defined in their specific chain variables: - -- Target **block time** is `60` seconds. -- Target **epoch size** is `30` blocks. - -Recall that, in the Helium blockchain, blocks contain some number of individual -transactions, and epochs are comprised of all the blocks mined by the current -Consensus Group since the last epoch. - -So, if the Network achieves its target block time of `60` seconds, and target -epoch of `30` blocks, the blockchain will produce `2,500,000` HNT per month. Per -epoch, this equals roughly `1712.704154343` HNT. The math for this is as follows: - -- `(43200 minutes per month / 30 minutes per epoch) = 1440 epochs per month` -- `(2500000 tokens minted per month / 1440 epochs per month) = 1736.1111 HNT per epoch` - -### What Are The Current Block and Epoch Times? - -At any point you can go to the -[Helium blockchain Explorer](http://explorer.helium.com/) to view recent block -and epoch statistics, past $HNT production numbers, and much more. - -## HNT Distributions Per Epoch - -As calculated above, the target `HNT` per epoch is approximately `1736.1111`. The -next logical question is, "Where does all this HNT go?" Let's take a look. - -Below are the mining rewards per epoch as of August 1, 2021. For every complete epoch, marked by the -election of a new Consensus Group, all the `HNT` produced are distributed over -the following reward types: - -| Reward Type | Percentage | HNT Earned by Reward Type | -| :-------------------- | :------------ | :------------------------ | -| PoC Challenger | 0.90% | 15.6250 | -| PoC Challengees | 5.02% | 87.1527 | -| Witnesses | 20.08% | 348.6111 | -| Consensus Group | 6% | 104.1666 | -| Security Tokens | 33% | 572.9166 | -| Network Data Transfer | _Up to 35%_ | _Up to 607.6389_ | -| **Total** | **100%** | **1736.1111** | - -**Rewards Change Over Time** - -In the above table you can see the maximum allotted rewards per reward type in -accordance with HIP 10 (described below). If you want to see the current reward -type percentage, you can always query the -[Chain Variables API](/api/blockchain/chain-variables). -The next maximum allotted rewards change is currently scheduled for **August -1, 2022.** - -## HIP10 and Variable HNT Rewards for Network Data Transfer - -As noted above, -[HIP10 was activated on August 24th, 2020](https://github.com/helium/HIP/blob/master/0010-usage-based-data-transfer-rewards.md). -HIP10 was introduced by Helium Community Member `hashc0de` and was adopted by -the Helium Community. It ensures that $HNT is rewarded at a rate of 1:1 to the -amount of Data Credits (DCs) routed by any given Hotspot per epoch. In doing so, -the Network Data Transfer reward is proportional to the DC spent that epoch. -This proportional relationship between Network Data Transfer reward type and DC -is capped at 35% (607.6389 HNT). Therefore, if the DC burned doesn't equal -the value of `607.6389` HNT, the remaining HNT is redistributed to the Proof of -Coverage (PoC) rewards groups pro-rata. - -Here are a few examples to illustrate how this works in practice: - -**Example 1: DC Burn does not exceed 35% HNT** - -- In a given epoch, `2,000,000` DCs are transferred across the network -- The HNT Oracle Price is `$2.00` -- In this scenario, total HNT value of DC transferred in this epoch is `10HNT`. - This calculation is:`(2,000,000 DC * $0.00001 / $2 HNT Oracle Price)` -- These `10 HNT` would be split proportionally to the Hotspots who did the work - routing packets at the 1:1 rate. -- The remaining `597.6389` from the Network Data Transfer reward would be - distributed ratably among the Challengers, Witnesses and Challengees. - - `20.6457` to the Challenger group - - `461.5945` to the Witness group - - `115.3986` to the Challengee group - -**Example 2: DC Burn exceeds 35% HNT** - -- In a given epoch, `500,000,000` DCs are spent on data transfer across the - network -- The HNT Oracle Price is `$2.00` - -In this scenario, total HNT value of DC transferred in this epoch is `2500HNT`. -This calculation is:`(500,000,000 DC * $0.00001 / $2 HNT Oracle Price)` - -- Because the Network DC burn exceeded the `607.6389` available to the - Network Data Transfer reward, all Hotspots who did the work over this epoch with - split the full `1113.0145HNT` proportionally. - -**Additional Notes on Reward Types and Payouts** - -- All Validators in the `Consensus` group will earn an equal reward. -- All Hotspots participating in PoC, including `Challengers`, `Challengees` and - `Witnesses` will earn rewards proportional to how many events they - participated in out of the total number of events per epoch. -- All Hotspots participating in `Network Data Transfer` will earn rewards - proportional to their share of the total data transfer in that epoch, as shown - above. -- Hotspots can earn one or more reward types during any given epoch. -- Hotspots are only eligible to submit one Proof of Coverage Challenge - which - results in them earning the `PoC Challenger` reward - **up to once per 360 blocks**. -- `PoC Challenger`, `PoC Challengee`, and `Witness` reward types get distributed - in the epoch that includes the corresponding PoC receipt. -- A Hotspots can earn more than one `PoC Challengee` and `Witness` rewards per - epoch. - -## HNT Proration and Slow Block Times - -The Helium blockchain is still new and growing quickly, so there are bugs to be -squashed and optimizations to be made. Target block and epoch times can be -difficult to attain consistently. To account for this, the Helium blockchain -uses something called `proration` to ensure that the target of `2,500,000` is -achieved even if block and epoch times aren't on target. - -**Target HNT Depends on Blocks, Not Clocks** - -It's easiest to think of target HNT production over the span of one month. If -the blockchain performs on target, resulting in roughly 1460 epochs per month, -then `2,500,000` new HNT will be produced. "One month" is a period of time -measured by a clock. However, under the hood, we use block time, and the -resulting epochs, to mark HNT production against our target. So when blocks are -slow, HNT production is reduced proportionally. - -### What Happens to HNT When Block Times are Slow? - -Occasionally, due to the rapid growth of the network, there can be -less-than-optimal block times. This results in slower epochs. When this happens -the blockchain will produce **less** HNT over the same period of time. This may -seem counterintuitive. _Shouldn't the blockchain produce more HNT when block -times are slower to ensure the `2,500,000` per month target is hit?_ No. Again, -think blocks, not clocks. Here's a step-by-step example to make it clearer: - -- Let's assume for a given `60` minute period, the average block time was `120` - seconds (which is double the target of `60` seconds). -- This would mark `30` blocks over the `60` minute period, conclude an epoch, - and result in HNT rewards being distributed. -- As with any epoch, we would distribute the target of (approximately) `1736.1111` - HNT. -- However, since this epoch took twice as long as normal - `60` minutes versus - `30` minute target - the blockchain essentially distributes HNT at **half the - normal rate**. - -### When Block Times Slow Down, Everyone Earns Less - -The most important take away here is that, when block times slow and HNT -production is reduced, everyone participating in the Network - Witnesses, -Challengers, Security Token Holders, etc. - **is impacted equally** (with the -exception of Consensus Group members; more on this below). So, although it's -annoying that the effective rate of HNT may have dropped over a given period of -time, know that you're not the only one earning less. And this is by design. - -### Consensus Groups and Slow Block Times - -The only group that doesn't see its HNT reduced per epoch when blocks are slow -is the Consensus Group. Currently there are 40 members of each Consensus Group, -sharing 6% of the HNT produced per epoch. - -This amount stays fixed while every other category of HNT payout is prorated so -that members of the Consensus Group are incentivized to keep elections fast. -Otherwise, a malicious Consensus Group member might be inclined to prolong -elections. This could be done, for example, to prevent a subsequent election, -thus ensuring current membership in the Consensus Group stays intact. By -distributing a fixed amount of HNT per `30` block epoch (as opposed to prorating -payouts), we remove the incentive to disrupt elections. diff --git a/docs/blockchain/oracles/oracles.mdx b/docs/blockchain/oracles/oracles.mdx deleted file mode 100644 index d27164e76..000000000 --- a/docs/blockchain/oracles/oracles.mdx +++ /dev/null @@ -1,145 +0,0 @@ ---- -id: oracles -hide_title: true -sidebar_label: Oracles -slug: /blockchain/oracles ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -# HNT Price Oracles - -HNT converts to Data Credits at a rate pegged to `$.00001` , and so the -blockchain requires a canonical HNT/$USD price for this conversion. Beginning in -June 2020, the Helium blockchain -[started using a system](https://engineering.helium.com/2020/05/29/HNT-Price-Oracles.html) -of decentralized price oracles to supply the $USD to HNT price used for on-chain -for burn transactions. (This system is inspired by -[the Maker Foundation's Oracle usage.](https://blog.makerdao.com/introducing-oracles-v2-and-defi-feeds/)) - -To find this price, nine oracles (this number may change in the future) -periodically submit -HNT/$USD prices. Once the blockchain has enough new price data, it will calculate a new HNT/$USD -price that will remain valid until enough new, valid oracle inputs are -submitted, triggering a new price revision. - -### Calculating the HNT Price - -Every `10` blocks (roughly every 10 minutes) the blockchain will attempt to -establish a new HNT/$USD price. To do this: - -1. The blockchain looks for recent price submissions from valid Oracles - (submitted using a transaction called `price_oracle_submission`). A valid - price submission is anything that was submitted within the last 25 hours but - is older than 1 hour. This enables the blockchain to calculate a trailing 24 - hour median while also having a buffer against outlier price inputs in the - most recent 60 minutes. -2. If there are enough new, valid price submissions in the 24 hour window, a new - price will be calculated. For this to happen, a majority of the price Oracles - need to have submitted a price in the window - `((N / 2) +1 )`. So, in our - system of `9` Oracles, we would need valid prices from at least `5`. (If - there aren’t `((N / 2) +1 )` new prices, no new HNT price is calculated.) -3. If there are at least `5` new prices, we then proceed to sort-order the list - low to high, and take the median. So, if we had `7` valid submissions of - `$.20,` `$.22`, `$.235`, `$.238`, `$.25`, `$.27`, `$.45`, the blockchain - would select `$.238`, and use this as the external price of HNT for all HNT / - DC burn transactions until a new price is established \(which could be as - soon as `10` blocks\). - -**What's the current HNT Oracle Price?** - -- [Click here.](https://api.helium.io/v1/oracle/prices/current) - -### Who are the HNT Price Oracles? - -The HNT Oracle price feeds are supplied by a group of eleven (11) Oracles, composed -of companies, organizations, and individuals. They are: - -- Helium, Inc -- Decentralized Wireless Alliance ([DEWI](https://www.dewi.org/)) -- Nine (9) Anonymous Individual Community Members - -We’ve chosen to keep the names of the individual feed contributors anonymous as -it’s essential to prevent any external attempts at extortion or blackmail. The -names of large companies and organizations that supply feeds, however, are -public and it’s easier for them to combat potential attacks and bad actors. - -The current set of public keys for the eleven HNT Price Oracles are (in no -particular order): - -```text -13CFFcmPtMvNQCpWQRXCTqXPnXtcsibDWVwiQRKpUCt4nqtF7RE -1431WVQvoV7RAJpoLCaBrTKner1Soed4bk69DddcrHUTCWHV6pj -136n9BEbreGUNgXJWtyzkBQcXiNzdMQ5GBoP8L2J6ZReFUAwUjy -14sqAYg1qxzjKTtyHLYZdH6yDtA3KgyoARhWN1cvLZ94dZw5vEc -145J6Aye86pKTJrUHREiXu7qqppZBcWY1bvWo8id7ZjxyuainYj -14EzXp4i1xYA7SNyim6R4J5aXN1yHYKNiPrrJ2WEvoDnxmLgaCg -147yRbowD1krUCC1DhhSMhpFEqnkwb26mHBow5nk9q43AakSHNA -13ZGgWX4Ajz9g9t3tM9ohDyso12o2E2CpYbMF2RBaT93rj7souE -1489qpKWAoLrURcaQEM1wJEViD4mk9WcqZMGhiTFfNGmaz8NFdX -14hntpRicek9pxzHBDPVWPwYHHmExrksaxzAsTjjstgLfnfG5Ve -14aQaRARuwLTLHLygiDNNapKZ7bcLSyXhHq9DeZ5kB2dnCxiiKv -``` - -You can [list activity for a specific Oracle](https://docs.helium.com/api/blockchain/oracle-prices/#list-activity-for-a-specific-oracle) at: -``` -https://api.helium.io/v1/oracle/:address/activity -``` - - -## Submitting an HNT Oracle Price - -An HNT price will only be accepted if the transaction is signed by the private -key associated with one of the known oracle public keys listed above. - -### Required Software - -Currently Oracles use the -[Helium Wallet CLI](https://github.com/helium/helium-wallet-rs) for submitting -prices to the blockchain. Download this and get comfortable with it on your -machine if you're not using it already. - -#### Submitting HNT Prices - -We've added a new transaction to the blockchain for Oracle price submissions - -`price_oracle_submission`, and a corresponding CLI command - `oracle report`. - -When you download the CLI and run `helium-wallet oracle report --help`, you'll -see something like this: - -```text -helium-wallet-oracle-report -Construct an oracle price report and optionally commit it to the Helium Blockchain - -USAGE: - helium-wallet oracle report [FLAGS] --block --price - -FLAGS: - --commit Commit the oracle price report to the API - -h, --help Prints help information - -V, --version Prints version information - -OPTIONS: - --block Block height to report the price at. Use "auto" to pick the latest known block height from - the API - --price The oracle price to report. Specify in USD or supply one of the supported price lookup - services ("coingecko", "bilaxy") -``` - -#### Example Command - -Here's a full command to submit a price (with the leading `$` the command line -will supply). **Note the required `--commit` flag. This transaction will fail -without this.** - -```text -$ helium-wallet oracle report --price 1.1 --block auto --commit -``` - -This is telling the blockchain you are reporting a price of `$1.1` and the -current block height and that you're ready to commit it. - -Once you hit `Return`, you'll be asked to input your wallet key passphrase. -Supply this, submit it, and you're done. diff --git a/docs/blockchain/packet-purchasing/packet-purchasing.mdx b/docs/blockchain/packet-purchasing/packet-purchasing.mdx deleted file mode 100644 index 6d2d123e5..000000000 --- a/docs/blockchain/packet-purchasing/packet-purchasing.mdx +++ /dev/null @@ -1,88 +0,0 @@ ---- -id: packet-purchasing -hide_title: true -sidebar_label: Packet Purchasing -slug: /blockchain/packet-purchasing ---- -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -# Packet Purchasing - -A trustless and decentralized way to allow coverage providers and coverage users -to exchange value is core to the Helium Network. - -Packet purchasing is implemented on the Helium Blockchain with two specific -primitives: - -- Organizationally Unique Identifiers -- State Channels - -## Organizationally Unique Identifier - -Organizationally Unique Identifiers (OUIs) are registered identities on the -Helium Blockchain. To send and receive packets to an end-device, a network user -needs to be serviced an OUI. This can be their own OUI or one operated by a -third party, such as [Console](/use-the-network/console) operated by Helium, -Inc. - -An OUI has some specificities related to LoRaWAN and packet routing, -[documented here](/lorawan-on-helium#the-oui), but with respect to the -blockchain, what's important is that -[only libp2p addresses registered as endpoints for the OUI](https://github.com/helium/proto/blob/master/src/blockchain_txn_oui_v1.proto#L6) -may open and close state channels on behalf of an OUI. - -For example, -[this account](https://explorer.helium.com/accounts/13tyMLKRFYURNBQqLSqNJg9k41maP1A7Bh8QYxR13oWv7EnFooc) -[purchased the first OUI](https://explorer.helium.com/txns/6ACW9A5Hj3KDnOJELWAvAVG3yM71OpNAYpdAPM3ti1A) -on the Helium Blockchain. The address -`112qB3YaH5bZkCnKA5uRH7tBtGNv2Y5B4smv1jsmvGUzgKT71QpE` operates the OUI on -behalf of the owner. You can monitor its activity -[here](https://explorer.helium.com/accounts/14oSuAgRmAFPFPZRY1MUwir5AJSLGkaXHzuSZJ92BuYCfLMN1Et). - -OUIs are purchased (see current -[fee schedule](/blockchain/transaction-fees#transaction-fee-schedule)) and -numbered in incrementing order. You can query the API for a list of existing -OUIs using [the following endpoint](/api/blockchain/ouis#list-ouis). - -## State Channels - -State channels are side-chains opened by OUI operators (any of the libp2p -addresses registered to the OUI). With an -[`state_channel_open`](https://github.com/helium/proto/blob/master/src/blockchain_txn_state_channel_open_v1.proto) -transaction, the operator stakes two times the amount of Data Credits (DC) -available to be spent in the channel. In addition, the amount of blocks until -channel expiration is configured. - -Once a state channel is opened, hotspots and OUIs operators are able to transact -within the channel. Generally, the flow is as follows: - -- a packet is offered by a hotspot to the OUI operator, with some metadata but - without the actual payload -- the OUI operator decides whether to purchase the packet; if it decides to - purchase, the offer is signed -- the packet is delivered by the hotspot to the OUI operator - -These signed offers are added to the state channel "banner", which allows the -device to confirm that it is being given credit for its work during the lifetime -of the state channel. This is possible even as many other hotspots have their -own transactions added to the same banner. - -Sometime before the expiration block, the OUI operator will submit a -[`state_channel_close`](https://github.com/helium/proto/blob/master/src/blockchain_txn_state_channel_close_v1.proto) -transaction channel, a transaction which also shows how many data credits -are being burned in the name of which hotspots. Should a hotspot not be credited -the appropriate amount, it has recourse during a "grace period" the ten blocks -after the closure to file a dispute, using the signed offers as evidence. This -is done in the form of alternate state channel close transactions. - -If there is no overspend or disputes, the second half of the stake and any -remaining credit is returned to the OUI operator. Otherwise, the entire stake is -kept and, in the event of a dispute, the appropriate amount of data credit burns -are attributed to the hotspots with valid disputes. - -Should the operator neglect to close the state channel before the expiration -block, closes by all parties are still accepted during the ten block grace -period. Should the OUI operator still neglect to close the channel, they will -lose their whole stake. diff --git a/docs/blockchain/proof-of-coverage/proof-of-coverage.mdx b/docs/blockchain/proof-of-coverage/proof-of-coverage.mdx deleted file mode 100644 index db41da67e..000000000 --- a/docs/blockchain/proof-of-coverage/proof-of-coverage.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -id: proof-of-coverage -hide_title: true -sidebar_label: Proof of Coverage -slug: /blockchain/proof-of-coverage ---- -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -# Proof of Coverage - -The Helium blockchain uses a novel work algorithm called “Proof of Coverage” -(PoC) to verify that Hotspots are located where they claim. Put another way, PoC -tries to verify, on an ongoing basis, that Hotspots are honestly representing -their location and the wireless network coverage they are creating from that -location. - -**See Proof of Coverage in Action** - -The [Helium Network Explorer](https://network.helium.com) is the best resources for viewing POC-related data. -Before you dive into the POC internals, here are a few POC Challenges to help -you visualize how this works: - -- [Cheesy Brick Mustang from block 641265](https://explorer.helium.com/txns/qmJF48v8ZlEfsPg_7jc2CrsLlOvgC7w-pvB_BWQAoOk) -- [Plain Mocha Mouse from block 643923](https://explorer.helium.com/txns/kQVfUV88j3s1Glj4fRXFb5MqBeFdTq8ILK2RlaFTnvQ) - -## Why Proof of Coverage? - -The Helium Network is a [physical wireless network](https://explorer.helium.com) -that succeeds based on the amount of reliable coverage it can create for users -deploying connected devices on it. As such, it required a work algorithm that -was built for this use case. Proof-of-Coverage takes advantage of the unique, -undeniable properties of radio frequency (RF) to produce proofs that are -meaningful to the Helium Network and its participants. Specifically, PoC relies -on the following characteristics: - -- RF has limited physical propagation and, therefore, distance; -- The strength of a received RF signal is inversely proportional to the square - of the distance from the transmitter; and -- RF travels at the speed of light with (effectively) no latency; - -Using these properties, the blockchain is constantly interrogating Hotspots -using a mechanism known as a “PoC Challenge”. The ultimate power of -Proof-of-Coverage lies in the fact that the data generated by the ongoing proofs -and stored in the Helium blockchain is definitive verification of the wireless -coverage provided by Hotspots on the Network. - -## Proof of Coverage Challenges - -The "challenge" is the discrete unit of work for Proof of Coverage. To date, there -have been 10s of millions of challenges issued and processed by the Helium blockchain. -With each new challenge, the blockchain records more data about the quality of the network. -Let's take a look at how challenges actually happen. - -### Hotspot Roles - -POC Challenges involve three distinct roles: - -1. **Challenger** - The Hotspot that constructs and issues the POC Challenge. Hotspots issue -challenges approximately once per every 360 blocks. (See note below) -2. **Transmitter** - Sometimes called "Challengee". This Hotspot is the target of the POC -challenge and is responsible for transmitting (or "beaconing") challenge packets to potentially be witnessed by -geographically proximate Hotspots. -3. ** Witness** - Hotspots that are geographically proximate to the Transmitter and report the existence of the -challenge packet after it has been transmitted. - -(Note: The goal is to reduce the PoC Interval to 200 blocks or lower) - - -### Challenge Proof Construction and Target Selection - -As noted above, Hotspots are currently allowed to submit a challenge proof roughly once per -360 blocks. They do this reliably [to earn the portion of HNT rewards allocated to challengers](/blockchain/mining). -The Challenger first generates an ephemeral public/private key pair to be used in the challenge. -A SHA256 digest of the public key and the SHA256 digest of the private key are both submitted, -along with the current block hash, as a PoC request. If the request is valid and accepted by the -blockchain, the hash of the block that the receipt appears in is combined with the hash of the -ephemeral public key and the challenger's identity to generate verifiable entropy. A uniform random -number generated via this entropy is then used to select the target from all Hotspots on the Network. - -After the the challenge packet is created, it is then delivered to the transmitter via the Helium Peer-to-Peer Network. -The target receives the challenge packet, decrypts the outermost layer using its private key and the ephemeral public -key for this challenge (this ephemeral public key appears in the PoC packet and the receiving Hotspot can inspect -the blockchain for an active PoC receipt with the corresponding SHA256 of the ephemeral key), and immediately -transmits the resultant packet to the Helium Network. Any number of proximate geographic Hotspots will hear it and will Witness the packet. - -### Witnesses - -As of [HIP 15](https://github.com/helium/HIP/blob/master/0015-beaconing-rewards.md), Proof of Coverage -relies entirely on beaconing. A beacon is a single transmission witnessed by any Hotspot. Previous -versions used multi-hop challenge paths that didn't accurately test Hotspots on what they are built to do: -capture RF packets. - -After a Transmitter receives the challenge, it will beacon the challenge packet. There is no -intended recipient of this packet, and any Hotspot that is geographically proximate to the transmitter -is eligible to witness it and report back to the blockchain. After a Hotspots witnesses a beacon from a -transmitter, it will submit this as part of the POC Challenge receipt that gets assembled and submitted -to the blockchain by the POC Challenger. - -### POC Reward Scaling - -For every epoch, each [reward type](/blockchain/mining) is split amongst Hotspots who had a role in that reward pool. -For example, if your Hotspot was challenged during an epoch, it will be eligible to a portion of the 5.31% of rewards that -go to PoC Transmitters. A practical way of thinking about this is that a Hotspot might earn a "reward unit" for succeeding at a challenge. -If five additional Hotspots succeeded at a challenge during the epoch and each of them also earned a "reward unit", -then each Hotspot gets 1/6th of the 5.31% of rewards in that epoch. - -With the activation of [HIP15](https://github.com/helium/HIP/blob/master/0015-beaconing-rewards.md) and -[HIP17](https://github.com/helium/HIP/blob/master/0017-hex-density-based-transmit-reward-scaling.md), we introduced -the idea of scaling these "reward units", so the units earned when being witnessed or witnessing a packet scale -depending on two things: - -1. The number of witnesses, detailed in HIP15 -2. The number of Hotspots in the hex tile of the transmitter, detailed in HIP17 - -The HIPs themselves provide a rich explanation of these mechanisms, so you're encouraged to read those, but they can be summarized as follows: - -**From HIP15** -* For the Transmitters, the more witnesses, the more the Transmitter earns; -* For the Witness, each additional witness past a total of four reduces what -is earned by each witness in that challenge. -* A change made with the 2021.09.14.0 release randomly shuffles the valid received witness receipts, and selects (up to) 25 of those valid to write to the chain. - -**From HIP17** -* The Witness earns less if the number of Hotspots in the area of the Transmitter exceeds the "target density". -Target density varies by hex resolution, as detailed in the HIP and defined in several chain variables. - - - -### Verifying the Proof - -Once the Challenger has the complete set of receipts from the POC Witnesses and Transmitter, or the elapsed time since -the challenge was issued has passed the upper time bound, the POC Challenge is considered complete. At this point, the -Challenger then submits the proof receipt as a transaction to the blockchain to be verified by the current consensus group. -Because the steps taken by the Challenger to construct and complete the proof are deterministic and easily reproduced, -members of the consensus group can verify the legitimacy of the proof. Specifically the Challenger reveals the secret -ephemeral key it used for both obtaining the original PoC request and for encrypting each layer of the challenge packet. -This crucial information, which has been hidden until the receipt is published, allows the re-creation of the deterministic entropy. - - - diff --git a/docs/blockchain/transaction-fees/transaction-fees.mdx b/docs/blockchain/transaction-fees/transaction-fees.mdx deleted file mode 100644 index 04f7c8b5f..000000000 --- a/docs/blockchain/transaction-fees/transaction-fees.mdx +++ /dev/null @@ -1,100 +0,0 @@ ---- -id: transaction-fees -hide_title: true -sidebar_label: Transaction Fees -slug: /blockchain/transaction-fees ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -# Transaction Fees - -Like most blockchains, Helium has a system of transaction fees. All transactions -in the Helium blockchain are paid in Data Credits (DCs). Data Credits are -produced via burning some amount of `HNT` using an on-chain transaction. And -thanks to a system called "Implicit Burn", users (typically) don't need to -manually supply `DCs` to pay fees. As long as the Helium wallet being used to -submit the transaction contains enough `HNT` to burn to `DCs` to fund the -transaction, the burn will happen implicitly, requiring no user intervention. - -### Transaction Fee Schedule - -The following is a list of the current set of fees required for various -transactions, along with their details. Transaction fees are paid in Data -Credits. (Note that the cost is not shown in `HNT` as this number is variable -based on the current $USD/HNT price as defined by the HNT Price Oracle.) - -| Fee Type | Fee Description | **Cost (DC)** | Cost ($USD) | -| :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------- | :------------ | :---------- | -| Send HNT | Transferring HNT from wallet to wallet | `Variable` | `Variable` | -| Transferring Device Packet Data | Fee paid by device owner when sending or receiving sensor data. Metered per 24 bytes. | `1` | `$.00001` | -| Add Full Hotspot | Fee paid to add full Hotspot to the blockchain. **Fee is generally covered by Hotspot maker**. | `4000000` | `$40` | -| Add Data Only Hotspot | Fee paid to add a Data Only Hotspot to the blockchain. | `500000` | `$5` | -| Assert Hotspot Location | Required when asserting a Hotspot's location. \(The **first assertions** is generaly covered by Hotspot maker\) | `1000000` | `$10` | -| Purchasing a blockchain OUI | Buy an OUI from the Helium blockchain | `10000000` | `$100` | -| Purchasing a blockchain Subnet | Buy a Subnet from the Helium blockchain | `10000000` | `$100` | - -### Calculating the DC cost for Sending HNT - -As noted above, the `DC` cost of a `Send` transaction is variable. The precise -cost is based on the size of the transaction, in bytes. Once the size is -calculated, we apply a `5000x` multiplier. For a typical send transaction, where -one wallet is sending to one wallet -([like this one here](https://explorer.helium.com/txns/RP8xdjuYsvIAaEuyNvMmlBF7Kc8ShNoURtA1ccgMGpk)), -the complete transaction is made up of the following: - -| Transaction Component | Component Size (Bytes) | -| :-------------------- | :------------------------------- | -| Payer Wallet Key | 33 | -| Payee Wallet Key | 33 | -| Payer Signature | 64 | -| Nonce | 3 (approximate; ranges from 2-4) | -| Payment Amount | 6 (approximate; ranges from 4-8) | - -- In total, this is `139` bytes. -- Each `24` bytes requires one Data Credit (as is the case when you're - transferring device packet data). -- `139` / `24` results in `6` Data Credits. -- We then apply our 5000x multiplier, and the result is a transaction fee -- This results in a `30000 Data Credit` cost for the above transaction. - -### Transaction Fees and Implicit Burn - -The Helium blockchain uses something called `implicit burn` when paying fees. - -**Implicit Burn™** - -The term `implicit burn` was coined by Helium PM Coco "cokes" Tang, a recognized -innovator in the blockchain technology and terminology space. - -Thanks to Implicit Burn™, if you have enough HNT in your wallet to pay the -transaction fee, the Helium Mobile Wallet (or the Helium Wallet CLI) will -calculate the DC cost of your transaction and the blockchain will automatically -burn the precise amount of HNT to supply the required DCs for the transaction. -For example: - -- You need to send `10 HNT` from a Helium Wallet that contains `11 HNT` -- The cost for this `send` transaction is `35000 DCs` -- Let's assume the `HNT/$USD` Oracle Price is `$.35` at the time you send the - `HNT`. This means that you'll need to supply a `1HNT` to fund the `35000 DCs` - for this transaction. -- When you send the `10 HNT`, the Helium Wallet automatically supplies the - `1 HNT` to be burned into `DCs`. -- After the transaction is submitted and processed, your resulting Helium Wallet - balance will be `0 HNT`. - -In the above example, had you attempted to send `10.0001HNT` with only `11 HNT` -in your wallet, this transaction would have failed as burning `.999 HNT` would -only result in `34965 DCs`, a mere 35 DCs short of the `35000` required for a -`send` transaction. - -### Failed Transactions Result in No DCs Being Spent - -Transactions in the Helium blockchain are `atomic`. In short, this means that -they either succeed entirely or they don't. So, if you attempt to send HNT from -a Helium Wallet without enough HNT to supply the required Data Credits, the -transaction will fail after being submitted to the blockchain API by your -wallet. And your `HNT` balance will be the same. No `DCs` were burned (or -harmed) in this failed transaction. diff --git a/docs/community-governance/community-governance.mdx b/docs/community-governance/community-governance.mdx deleted file mode 100644 index cad8ff2ce..000000000 --- a/docs/community-governance/community-governance.mdx +++ /dev/null @@ -1,92 +0,0 @@ ---- -id: community-governance -hide_title: true -sidebar_label: Community -slug: /community-governance ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -# Community and Governance - -The Helium Community is the home to over tens of thousands developers and network operators who collaborate every day across the world to build the Helium Network. Any and all are welcome to take part. Join us! - -### Discord - -The [Helium Discord](https://discord.gg/helium) is the primary communication channel for the Helium Network Community. Here you'll find real-time, in-depth discussion on all parts of the Helium Network. It is also the primary venue to get support for using the Network. - -- [Join the Helium Community Discord](https://discord.gg/helium) - -#### Discord Roles - -- @admin -- @Helium Team 👑 -- @Wick -- @Moderator -- @DeWi -- @chaingang -- @carl-bot -- @Vendor -- @Helium Contributor -- @Community Developer -- @Community Designer -- @Patron -- @Insiders -- @Validator -- @Hotspot Owner -- @Server Booster -- @Helium Hacks Hardware Winner -- @troll 💩 -- @Discord.RSS -- @bot -- @Zapier -- @FF -- @verified -- @ProBot ✨ -- @Muted -- @Quarantine -- @Docs Contributor -- @@everyone - -### Helium Improvement Proposals - -The Helium Community uses a governance mechanism called **Helium Improvement Proposals** (known as "HIPs"). Modeled on BIPs from the Bitcoin community, HIPs are used to introduce, debate, and approve/reject new changes to major elements of the Network like the core blockchain, $HNT token economics, and Network governance itself. - -HIPs are managed entirely from the [HIP GitHub repository](https://github.com/helium/HIP). HIP discussion also happens in the `Improvement Proposal` section of [Helium Discord](https://discord.gg/helium). Any and all members of the Helium Community are encouraged to create HIPs, and participate in the governance process. - -- [HIP Repo on GitHub](https://github.com/helium/HIP) - -### Regularly Community Events - -#### Monthly Community Calls - -The Helium Community holds monthly video calls (led by the [DEWI](https://www.dewi.org/)). These typically happen on the the **4th Wednesday of each month at 12PM ET**. Each call has an open agenda, and any community member can join and add items to the agenda to be discussed. - -- [Community Call Notes and Agenda](https://docs.google.com/document/d/1bMm2alBigBj3detA775Dn0Gz9UM5XczAeK9vnjBB3l0/edit#) -- [Video recordings of all previous community calls](https://vimeo.com/dewialliance) - -#### Helium Hacks Happy Hour - -Held every Wednesday at 2PM Pacific on Zoom, Helium Hacks Happy Hour (4H) covers all things hardware, sensors, and connectivity. If you're building something on the Network and want to share, or simply want to learn, 4H is for you. - -* [Register for Helium Hacks Happy Hour](https://tinyurl.com/3kjrv9z5) -* [Selected highlights of previous Happy Hours](https://www.youtube.com/playlist?list=PLtKQNefsR5zMDgluPZtPL3wwFBG7e_FHl) - -### Community Programs - -#### Patrons - -For anyone who has deployed `15` or more Hotspots, you can receive the `Patron` Discord status, Patron-exclusive Newsletter content, and custom Patron swag. To join the program, please email patron@helium.com with proof of purchase for `15` or more of any [community-approved Hotspot options](https://helium.com/mine). - -### Social Media - -Helium is everywhere. Here's the full list: - -- [Twitter](https://twitter.com/helium) -- [Telegram](https://t.me/helium_network) -- [Reddit](https://www.reddit.com/r/HeliumNetwork/) -- [LinkedIn](https://www.linkedin.com/company/heliuminc/) -- [Facebook](https://www.facebook.com/heliumsystems) -- [Instagram](https://www.instagram.com/helium/) diff --git a/docs/community-governance/community-voting.mdx b/docs/community-governance/community-voting.mdx deleted file mode 100644 index 05ad55234..000000000 --- a/docs/community-governance/community-voting.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: community-voting -sidebar_label: HIP Voting -slug: /community-voting ---- - - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - -# Voting on Helium -In order to approve or deny changes to the blockchain, economics, or governance of the Helium Network; Helium and DeWi leverage on-chain voting which is open to the entire community. This on-chain voting is currently facilited through the website [helium.vote](https://helium.vote). - -For most votes, voting power is currently determined by the HNT balance of the voting wallets at a rate of one vote per HNT. However, voting power may change vote-to-vote, depending on what the community is reaching consensus on. As example, a vote on on frequency plan for a region would only concern Hotspots in the region and one would use number Hotspots in the region as votes. Proposals to implement more involved voting mechanisms have been presented, but have not been voted on or implemented yet. See: [HIP41](https://github.com/helium/HIP/blob/master/0041-governance-by-token-lock-v2.md) - -HNT holders are able to vote by issuing a small token burn transaction from their wallet to a wallet associated with a particular ballot option, typically `For` or `Against`. Voting just a portion of a wallet's balance is not supported. - - - -## Helium Vote Configuration -This information is offered for the sake of transparency to the Helium Community and for the documentation of DeWi practices. Vote configuration is handled by DeWi to ensure that the accrued DC from a vote are burned from existance at the end of the voting period. - -### How a HIP Becomes a Vote -A vote can be created by opening a PR against the [Helium Vote repository](https://github.com/helium/helium-vote/). Templates are provided within the repo. Authors are encouraged to write their HIP description in a nonbiased manner, and are subject to review. -In partnership with DeWi and Helium, a block height deadline, vote ID, and voting addresses will be provided. - -**Create Vote ID** - -The vote ID has no direct ties to the blockchain, but must be unique. The simplest way to generate a unique value is to create a quick Helium wallet. -```shell -helium-wallet create basic -``` -The returned address can be used as the vote ID. -``` -+-----------------------------------------------------+---------+--------+------------+ -| Address | Sharded | Verify | PwHash | -+-----------------------------------------------------+---------+--------+------------+ -| 13fDZC6rCtZKebjNigeJP3HNMJTBrxJVLjV8JdoPMkyNS9aCHSJ | false | true | Argon2id13 | -+-----------------------------------------------------+---------+--------+------------+ -``` -This wallet does not need to be retained, as it will not be used for any on-chain transactions. - -**Create Each Vote Option** - -Most votes will be binary, only needing one address `for` and `against`. The wallet generation process is the same. A wallet is be created for each vote option. These wallet keys should be retained by DeWi for the sake of burning accrued DC at the end of the vote. - -**Post Vote Cleanup** - -In order to burn the accrued DC, we leverage a neat feature of the HNT pay transaction. We transfer 1 HNT into a wallet needing to be cleared, then transfer it back out. On the outbound transaction we can specify an arbitrary DC fee. Any fee specified that is at least enough to cover the transaction will be accepted by the blockchain. -```shell -helium-wallet pay one --fee -``` -The result should be a wallet with zero HNT or DC balance. \ No newline at end of file diff --git a/docs/faq/build-on-network.mdx b/docs/faq/build-on-network.mdx deleted file mode 100644 index 6c45ddc49..000000000 --- a/docs/faq/build-on-network.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -id: build-on-network -title: Build On Network FAQ -sidebar_label: Build On Network -slug: /faq/build-on-network ---- - -# FAQ - Build On Network - -### I want to use the Helium Network for my IoT project. How do I learn more? -Thanks for your interest! Join the [community Discord server](https://discord.gg/helium) as there are several channels dedicated to development. There’s also [extensive documentation on using the Network](https://docs.helium.com/use-the-network). - -### Can end devices communicate directly with each other or do they have to hop over the Helium Hotspot? -All compatible devices communicate via Hotspots. There is no direct communication or meshing in the Helium Network. - -### Will Helium be proprietary? -We believe proprietary protocols and technologies stifle innovation. This is why we use commodity, open-standard hardware, and modules available from dozens of vendors. And all software used is [open source under friendly licenses](https://docs.helium.com/open-source/open-source/#helium-is-open-source). - -### Which frequencies does the Helium Hotspot use? Are you evaluating other frequencies in different countries? -Hotspots create LoRaWAN coverage with sub-GHz unlicensed spectrum that varies country by country. You can [view the frequency used per country here](https://docs.helium.com/lorawan-on-helium/frequency-plans). - -### What kind of data rates do you anticipate going from device to the hotspot? -Applications that are suitable for the Helium Network send small amounts of data. The maximum amount possible is around 5kbits per second. But this is rarely seen in production. Typically sensors are sending 10-1000 bytes at a time. diff --git a/docs/faq/data-credits.mdx b/docs/faq/data-credits.mdx deleted file mode 100644 index 0f1e00a6e..000000000 --- a/docs/faq/data-credits.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: data-credits -title: Data Credits FAQ -sidebar_label: Data Credits -slug: /faq/data-credits ---- - -# FAQ - Data Credits - -### What are Data Credits? Do I need them? - -If you’re a Hotspot owner, you generally do not need to worry about [Data Credits](/blockchain/helium-token/#data-credits-and-burn-and-mint-economics) unless you also plan to build sensors and devices to transmit data. Data Credits are [used to pay all transaction fees](/blockchain/transaction-fees/#transaction-fees) such as adding Hotspots, sending HNT, and asserting location. When needed, they are burned automatically through the app from the available HNT in your wallet and can also be burned via the CLI. - -One Data Credit pays for 24 bytes of LoRaWAN payload. Any number that exceeds 24 bytes is rounded up, so a packet with a 25-byte payload would cost the same as one with 47 bytes - two Data Credits. - -Although Data Credits are produced by burning HNT, the price of Data Credits is fixed in USD. Data Credits are non-transferrable, and can only be used by their original owner. Data Credits cannot be re-sold or traded. Data Credits are similar to pre-paid cellphone minutes or airline miles. - \ No newline at end of file diff --git a/docs/faq/helium-network.mdx b/docs/faq/helium-network.mdx deleted file mode 100644 index 2f96efee6..000000000 --- a/docs/faq/helium-network.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: helium-network -title: Helium Network FAQ -sidebar_label: Helium Network (New!) -slug: /faq/helium-network ---- - -# FAQ - Helium Network - -### What is the Helium Network? -Helium is a global, distributed network of Hotspots that create public, long-range wireless coverage for Internet of Things (IoT) devices. Hotspots mine and are rewarded in HNT, the native cryptocurrency of the Helium blockchain. The Helium blockchain is an open source, public blockchain that incentivizes the creation of physical, decentralized wireless networks. - -Today, the Helium blockchain, and its hundreds of thousands of Hotspots deployed by a global community, provide access to the largest decentralized wireless network in the world. [Here’s a helpful introduction video](https://youtu.be/Vx9YyS7-d3g). - -### How does the Hotspot work and what does it power? -Hotspots enable people to own and operate a wireless network that supports a wide range of Internet of Things (IoT) devices, from smart pet collars and home delivery systems, to smart bikes and scooters, medical transport and tracking devices, cooling systems, smart lighting systems, and more. [Here’s a helpful video about how Helium works](https://www.youtube.com/watch?v=67aQeZTaqNY). - -### Can I connect my phone or computer to Hotspots? -Yes. As of early 2022 the community has started to roll out [4G/LTE and 5G coverage on the Helium blockchain](https://www.helium.com/5G). - -### If I connect the Hotspot to my Wifi, am I breaking the terms of service with my Internet provider? -The Helium Network is not in the position or business of giving legal advice. In general, users should check the terms with individual providers and comply with applicable law. - -### Does Helium partner with Internet providers? -Yes. In fact, Helium recently partnered with DISH, a nationwide provider of internet connectivity, to expand 5G coverage. [You can learn more about this news here](https://ir.dish.com/news-releases/news-release-details/dish-partners-helium-leverage-helium-networks-blockchain-model). - -### Does Helium replace the Wi-Fi in my house? -No. Hotspots create a Long-Fi radio signal and routes packets from low-power devices in your area that use LoRaWAN, a wireless protocol, and have been deployed to the Helium Network. Typically these are devices such as GPS trackers, environmental sensors, weather meters, etc., that only need to transmit and share small bits of information. The Hotspot uses your existing Internet (via WiFi or Ethernet) to deliver the data packets sent by devices. It does not replace internet or cellular service for regular devices like computers and smartphones. - -### Why is the Helium Network called The People’s Network? -We call it The People’s Network because the people who deploy Hotspots build and operate the network. It’s powered by them and owned by them. - -### How far does the Helium Network reach and does it use radio frequency? -Helium’s LongFi technology, the combination of the Helium blockchain and LoRaWAN wireless protocol, uses sub-GHz radio frequency. Depending on conditions, Helium LongFi can reach miles and even connect devices that are inside buildings unlike GPS and cellular signals. - -### What kind of cryptocurrency do I earn? -Hotspot owners earn HNT tokens that are unique to the Helium blockchain. - -### How do Hotspots earn HNT? -Hotspots earn HNT by providing wireless coverage and transferring data from nearby devices. The more data transferred the larger the reward. [Here’s a helpful video about how HNT works](https://www.youtube.com/watch?v=B0JOB88MHSI). - - -### How much HNT will I earn? -Hotspot owners earn HNT depending on how frequently their devices do two things: -* Validate the Network - Hotspots transmit data to each other to confirm that the Network is secure and owners receive rewards when their Hotspot participates in a process called Proof of Coverage. You can learn more about Proof of Coverage [here](https://docs.helium.com/blockchain/proof-of-coverage). -* Move Data for Device Users - If an e-scooter, pet tracker, air quality sensor or other device uses a Hotspot to transmit data, the owner of the Hotspot receives rewards based on how much data is transferred. - -[Here’s a helpful video about how to mine HNT](https://www.youtube.com/watch?v=kmsk8lTrrts). - -### What if I'm in a rural area, or the only Hotspot in my area? Can I still earn rewards? -It's best to have at least one or two other Hotspots within radio range of you so that you can participate in Proof of Coverage Challenges to earn HNT rewards at a higher rate. If you are the only Hotspot in your area, you can still earn HNT if a device uses your Hotspots and by initiating the Challenges. HNT is distributed based on these economics. Read more about token economics [here](https://www.helium.com/token). - -### Who governs the Helium Network and what is DeWi? -The Decentralized Wireless Alliance (DeWi) is a global not-for-profit dedicated to the proliferation of secure, cost-effective connectivity and it manages and maintains the open technologies that support the Helium Network. You can read more about governance from DeWi [here](http://dewi.org). - -### Does the Helium community have a Discord? -The Helium Discord is the primary communication channel for the Helium Network Community and it is the primary venue to get support for using the Network. The Helium Discord is moderated by independent members of the Helium community. - -Here’s a [helpful blog about the Helium Community](https://docs.helium.com/community-governance/) and how you can join [the Helium Discord](https://discord.gg/helium). diff --git a/docs/faq/hotspot-manufacturers.mdx b/docs/faq/hotspot-manufacturers.mdx deleted file mode 100644 index 468171a2c..000000000 --- a/docs/faq/hotspot-manufacturers.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -id: hotspot-manufacturers -title: Approved Hotspot Manufacturers FAQ -sidebar_label: Approved Hotspot Manufacturers -slug: /faq/hotspot-manufacturers ---- - -# FAQ - Approved Hotspot Manufacturers - -Helium, Inc. manufactured the first set of Hotspots on the Network. (These are often referred to as "OGs."). Helium, Inc. is no longer manufacturing Hotspots, but there is now an extensive list of approved manufactures (known in the community as "Makers") - -* [All approved Hotspots can be found here](https://helium.com/mine) -* [All approved Makers can be found here](/mine-hnt/full-hotspots). - -- Please be very careful if purchasing a Helium Hotspot from a non-authorized seller. Hotspots can be transferred from one Helium wallet to another. Once they are added to the blockchain, only the owning wallet can transfer it to another. Any transfers are solely between the two entities ("Buyer" and "Seller"), and Helium is not involved. -- Also note that the Helium Hotspot limited warranty is only valid for the original sale to the original owner. Resold Helium Hotspots from anyone other than Helium directly are not under any warranty whatsoever. Please refer to their documentation for any authorized reseller policy. diff --git a/docs/faq/security.mdx b/docs/faq/security.mdx deleted file mode 100644 index 2d86f2a66..000000000 --- a/docs/faq/security.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -id: security -title: Security FAQ -sidebar_label: Security -slug: /faq/security ---- - -# FAQ - Security - -The security of the network and Hotspot owners is of the utmost importance to us. While the Internet connection is necessary, it is only used to provide backhaul to the Hotspot for blockchain peer-to-peer and LongFi networking. As security concerns are ever present, here is what we have done, and are doing, to combat potential risks: - -- The most common attack vector to get into a device like the Hotspot is inbound ports. The Helium Hotspot only requires one port open in both directions - **TCP Port 44158**. All other inbound ports can be secured behind a firewall per your personal security needs. -- Helium-enabled LoRaWAN devices are hardware-secured to protect the traffic from the utilized spectrum. This means the security is built-in since devices using the network have AES private key encryption at the chip level. -- All approved Helium Hotspots comply with the relevant radio and wireless regulations in the country or region where they are deployed. For example, Hotspots in the US comply with FCC regulations for operating in the unlicensed 902-928MHz spectrum, the CE mark for the European 868MHz spectrum, etc. -- Expected bandwidth utilized by devices is 1-5kb/s (about the size of a long text message) and devices communicate with the Hotspot over LongFi, not IP (Internet Protocol). -- While very inexpensive to use, the Helium network is not free. Any transaction requires data credits. This is inherently a deterrent for potential scammers. -- Helium wallets (included within the Helium App) use asymmetric keys to keep your private key secure. - -We will be diligent in our approach to maintaining and improving all aspects of the network’s security to help ensure that you, The People who constitute The People’s Network, can continue to help define a new era of IoT. diff --git a/docs/home.mdx b/docs/home.mdx deleted file mode 100644 index 3c5f136bc..000000000 --- a/docs/home.mdx +++ /dev/null @@ -1,159 +0,0 @@ ---- -id: home -hide_title: true -sidebar_label: Home -slug: / -hide_table_of_contents: true - ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -
-
-
- -
-
-

Get Started
with Helium

-

Build amazing connected solutions on the world’s largest decentralized wireless network.

- -
- -
-
-
- -
-
-
-
-
-

Introduction

-
-
-

Helium is a global, distributed network of Hotspots that create public, long-range wireless coverage for LoRaWAN-enabled IoT devices. Hotspots produce and are compensated in HNT, the native cryptocurrency of the Helium blockchain. The Helium blockchain is a new, open source, public blockchain created entirely to incentivize the creation of physical, decentralized wireless networks. Today, the Helium blockchain, and its hundreds of thousands of Hotspots, provide access to the largest LoRaWAN Network in the world.

-
-
-

This documentation provides details on the technology that underpins Helium, as well as how to mine HNT, and how to deploy IoT devices that use the Helium Network. Start your journey below.

-

If, at any time, you don't find what you need, join us in our Discord.

-

Thanks for being a part of Helium.

-
-
-
- -
-
-
- -

Helium Blockchain

-

The Helium Blockchain is a new blockchain built from the ground up to incentivize the creation of decentralized, public wireless networks.

- Learn More -
Quick Links
- Blockchain Primitives - Mining HNT - Proof of Coverage - Consensus Protocol - Helium Token - Transaction Fees -
-
- -

Mine $HNT

-

Hotspots create The People’s Network, a long-range wireless coverage for very low power and inexpensive IoT devices and are rewarded $HNT for doing so.

- Learn More -
Quick Links
- What is a Helium Miner? - Approved Hotspots - Run an HNT Validator - Hotspot Makers - Build a Packet Forwarder -
-
- -

Use the Helium Network

-

The Helium Ecosystem includes thousands of ready-to-use devices, powerful integrations, and robust developer tools.

- Learn More -
Quick Links
- Devices - Helium Console - LoRaWAN on Helium -
-
- -

Community, Governance, & Open Source

-

Helium’s decentralized ‘People’s Network’ relies on a community of supporters, developers and advisors.

- Learn More -
Quick Links
- Discord Community Chat - Helium Improvement Proposals - Open Source Software - -
-
-
-
-
-
-
-
-
-

Tools, Technologies & Initatives

-
-
-
- -
-

Console

-

Provision and Manage Devices

-
-
-
- -
-

Explorer

-

Helium Blockchain Block Explorer

-
-
-
- -
-

Mappers

-

Community-driven Coverage Mapping

-
-
-
- -
-

Wallet App

-

iOS & Android Helium Wallet

-
-
-
-
-
- -
-

Helium Wallet CLI

-

Interact with Blockchain via Command Line

-
-
-
- -
-

Helium Light Hotspots

-

Packet forwarder for the Helium-enabled Gateways.

-
-
-
-
-
- - - - diff --git a/docs/home/home.mdx b/docs/home/home.mdx new file mode 100644 index 000000000..6b000b7c5 --- /dev/null +++ b/docs/home/home.mdx @@ -0,0 +1,23 @@ +--- +id: home +hide_title: true +title: Home +pagination_label: Home +sidebar_label: Introduction +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: / +hide_table_of_contents: true +pagination_next: null +pagination_prev: null +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + + + +The Helium Network powers two distinct wireless networks; a global LoRaWAN™ network for IoT +devices, and a cellular offload Wi-Fi network for mobile connectivity. Wireless gateways called +"Hotspots", operated by the Helium community, provide the coverage for these networks. Hotspot +owners are incentivized with the Helium HNT token for providing coverage and handling wireless +traffic. diff --git a/docs/home/style-guide.mdx b/docs/home/style-guide.mdx new file mode 100644 index 000000000..c7b8b7e5a --- /dev/null +++ b/docs/home/style-guide.mdx @@ -0,0 +1,208 @@ +--- +id: style-guide +title: Style Guide +sidebar_label: Style Guide +--- + +You can write content using [GitHub-flavored Markdown syntax](https://github.github.com/gfm/). + +## Markdown Syntax + +To serve as an example page when styling markdown based Docusaurus sites. + +## Headers + +# H1 - Create the best documentation + +## H2 - Create the best documentation + +### H3 - Create the best documentation + +#### H4 - Create the best documentation + +##### H5 - Create the best documentation + +###### H6 - Create the best documentation + +--- + +## Emphasis + +Emphasis, aka italics, with _asterisks_ or _underscores_. + +Strong emphasis, aka bold, with **asterisks** or **underscores**. + +Combined emphasis with **asterisks and _underscores_**. + +Strikethrough uses two tildes. ~~Scratch this.~~ + +--- + +## Lists + +1. First ordered list item +1. Another item + - Unordered sub-list. +1. Actual numbers don't matter, just that it's a number + 1. Ordered sub-list +1. And another item. + +- Unordered list can use asterisks + +* Or minuses + +- Or pluses + +--- + +## Links + +[I'm an inline-style link](https://www.google.com/) + +[I'm an inline-style link with title](https://www.google.com/ "Google's Homepage") + +[I'm a reference-style link][arbitrary case-insensitive reference text] + +[You can use numbers for reference-style link definitions][1] + +Or leave it empty and use the [link text itself]. + +Some text to show that the reference links can follow later. + +[arbitrary case-insensitive reference text]: https://www.mozilla.org/ +[1]: http://slashdot.org/ +[link text itself]: http://www.reddit.com/ + +--- + +## Images + +Here's our logo (hover to see the title text): + +Inline-style: +![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png 'Logo Title Text 1') + +Reference-style: ![alt text][logo] + +[logo]: + https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png + 'Logo Title Text 2' + +Images from any folder can be used by providing path to file. Path should be relative to markdown +file. + +![img](../../static/img/icons/logo.svg) + +--- + +## Code + +```javascript +var s = 'JavaScript syntax highlighting' +alert(s) +``` + +```python +s = "Python syntax highlighting" +print(s) +``` + +``` +No language indicated, so no syntax highlighting. +But let's throw in a tag. +``` + +```js {2} +function highlightMe() { + console.log('This line can be highlighted!') +} +``` + +--- + +## Tables + +Colons can be used to align columns. + +| Tables | Are | Cool | +| ------------- | :-----------: | -----: | +| col 3 is | right-aligned | \$1600 | +| col 2 is | centered | \$12 | +| zebra stripes | are neat | \$1 | + +There must be at least 3 dashes separating each header cell. The outer pipes (|) are optional, and +you don't need to make the raw Markdown line up prettily. You can also use inline Markdown. + +| Markdown | Less | Pretty | +| -------- | --------- | ---------- | +| _Still_ | `renders` | **nicely** | +| 1 | 2 | 3 | + +--- + +## Blockquotes + +> Blockquotes are very handy in email to emulate reply text. This line is part of the same quote. + +Quote break. + +> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep +> writing to make sure this is long enough to actually wrap for everyone. Oh, you can _put_ > +> **Markdown** into a blockquote. + +--- + +## Inline HTML + +
+
Definition list
+
Is something people use sometimes.
+ +
Markdown in HTML
+
Does *not* work **very** well. Use HTML tags.
+
+ +--- + +## Line Breaks + +Here's a line for us to start with. + +This line is separated from the one above by two newlines, so it will be a _separate paragraph_. + +This line is also a separate paragraph, but... This line is only separated by a single newline, so +it's a separate line in the _same paragraph_. + +--- + +## Admonitions + +:::note + +This is a note + +::: + +:::tip + +This is a tip + +::: + +:::important + +This is important + +::: + +:::caution + +This is a caution + +::: + +:::warning + +This is a warning + +::: diff --git a/docs/lorawan-on-helium/frequency-plans/frequency-plans.mdx b/docs/lorawan-on-helium/frequency-plans/frequency-plans.mdx deleted file mode 100644 index 155c9a1ab..000000000 --- a/docs/lorawan-on-helium/frequency-plans/frequency-plans.mdx +++ /dev/null @@ -1,500 +0,0 @@ ---- -id: frequency-plans -sidebar_label: Frequency Plans -slug: /lorawan-on-helium/frequency-plans ---- - -# Frequencies on the Helium Network - -Helium's LoRaWAN Network is built upon 8-channel gateways. This page will help -you confirm the appropriate frequencies for gateway configuration for each -country. - -Feel free to use -[our packet forwarder configuration examples](https://github.com/helium/sx1302_hal/tree/helium/hotspot/packet_forwarder) -here. - -:::warning - -LoRa gateways on the Helium Network must transmit on uplink frequencies. Some -gateways limit their transmit range to downlink frequencies and special -configuration may be necessary. - -::: - -## Frequency Plans - -### US915 - -Also known as **US902-928** - -#### Uplink - -| Frequency (MHZ) | Spreading Factor | -| :-------------- | :-------------------- | -| 903.9 | SF7BW125 to SF10BW125 | -| 904.1 | SF7BW125 to SF10BW125 | -| 904.3 | SF7BW125 to SF10BW125 | -| 904.5 | SF7BW125 to SF10BW125 | -| 904.7 | SF7BW125 to SF10BW125 | -| 904.9 | SF7BW125 to SF10BW125 | -| 905.1 | SF7BW125 to SF10BW125 | -| 905.3 | SF7BW125 to SF10BW125 | -| 904.6 | SF8BW500 | - -#### Downlink - -| Frequency (MHZ) | Spreading Factor | -| :-------------- | :-------------------------- | -| 923.3 | SF7BW500 to SF12BW500 (RX1) | -| 923.9 | SF7BW500 to SF12BW500 (RX1) | -| 924.5 | SF7BW500 to SF12BW500 (RX1) | -| 925.1 | SF7BW500 to SF12BW500 (RX1) | -| 925.7 | SF7BW500 to SF12BW500 (RX1) | -| 926.3 | SF7BW500 to SF12BW500 (RX1) | -| 926.9 | SF7BW500 to SF12BW500 (RX1) | -| 927.5 | SF7BW500 to SF12BW500 (RX1) | -| 923.3 | SF12BW500 (RX2) | - -### EU868 - -#### Uplink - -| Frequency (MHZ) | Spreading Factor | -| :-------------- | :--------------------------------- | -| 868.1 | SF7BW125 to SF12BW125 | -| 868.3 | SF7BW125 to SF12BW125 and SF7BW250 | -| 868.5 | SF7BW125 to SF12BW125 | -| 867.1 | SF7BW125 to SF12BW125 | -| 867.3 | SF7BW125 to SF12BW125 | -| 867.5 | SF7BW125 to SF12BW125 | -| 867.7 | SF7BW125 to SF12BW125 | -| 867.9 | SF7BW125 to SF12BW125 | -| 868.8 | FSK | - -#### Downlink - -- Uplink channels 1-9 (RX1) -- We use the default parameters: 869.525 MHz / DR0 (SF12, 125 kHz) - -### CN470 - -#### Uplink - -| Frequency (MHZ) | Spreading Factor | -| :-------------- | :-------------------- | -| 486.3 | SF7BW125 to SF12BW125 | -| 486.5 | SF7BW125 to SF12BW125 | -| 486.7 | SF7BW125 to SF12BW125 | -| 486.9 | SF7BW125 to SF12BW125 | -| 487.1 | SF7BW125 to SF12BW125 | -| 487.3 | SF7BW125 to SF12BW125 | -| 487.5 | SF7BW125 to SF12BW125 | -| 487.7 | SF7BW125 to SF12BW125 | - -#### Downlink - -| Frequency (MHZ) | Spreading Factor | -| :-------------- | :-------------------------- | -| 506.7 | SF7BW125 to SF12BW125 (RX1) | -| 506.9 | SF7BW125 to SF12BW125 (RX1) | -| 507.1 | SF7BW125 to SF12BW125 (RX1) | -| 507.3 | SF7BW125 to SF12BW125 (RX1) | -| 507.5 | SF7BW125 to SF12BW125 (RX1) | -| 507.7 | SF7BW125 to SF12BW125 (RX1) | -| 507.9 | SF7BW125 to SF12BW125 (RX1) | -| 508.1 | SF7BW125 to SF12BW125 (RX1) | -| 505.3 | SF12BW125 (RX2) | - -### AU915 - -#### Uplink - -| Frequency (MHZ) | Spreading Factor | -| :-------------- | :-------------------- | -| 916.8 | SF7BW125 to SF12BW125 | -| 917.0 | SF7BW125 to SF12BW125 | -| 917.2 | SF7BW125 to SF12BW125 | -| 917.4 | SF7BW125 to SF12BW125 | -| 917.6 | SF7BW125 to SF12BW125 | -| 917.8 | SF7BW125 to SF12BW125 | -| 918.0 | SF7BW125 to SF12BW125 | -| 918.2 | SF7BW125 to SF12BW125 | -| 917.5 | SF8BW500 | - -#### Downlink - -| Frequency (MHZ) | Spreading Factor | -| :-------------- | :-------------------------- | -| 923.3 | SF7BW500 to SF12BW500 (RX1) | -| 923.9 | SF7BW500 to SF12BW500 (RX1) | -| 924.5 | SF7BW500 to SF12BW500 (RX1) | -| 925.1 | SF7BW500 to SF12BW500 (RX1) | -| 925.7 | SF7BW500 to SF12BW500 (RX1) | -| 926.3 | SF7BW500 to SF12BW500 (RX1) | -| 926.9 | SF7BW500 to SF12BW500 (RX1) | -| 927.5 | SF7BW500 to SF12BW500 (RX1) | -| 923.3 | SF12BW500 (RX2) | - - - -## Frequency Plans by Country - -Where a frequency plan is "Unknown" it means that non of the above Frequency Plans has been known to be assigned by the local telecommnications or radio authority in that country for use by LoraWAN. People in those countries are enouraged to contact the DeWi LoRaWAN Committee via #dewi in the Helium Discord, to help initiate the LoraWAN Alliance define a frequency plan for use in your country. - -#### A -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Afghanistan |Unknown | -|Aland Islands |EU868 | -|Albania |EU868 | -|Algeria |AS923_3 | -|American Samoa |US915 | -|Andorra |EU868 | -|Angola |Unknown | -|Anguilla |AU915 | -|Antarctica - Chilean |AU915 | -|Antarctica - Australian |AU915 | -|Antarctica - British |EU868 | -|Antarctica - Argentine |AU915 | -|Antigua and Barbuda |Unknown | -|Argentina |AU915 | -|Armenia |EU868 | -|Aruba |Unknown | -|Australia |AU915 | -|Austria |EU868 | -|Azerbaijan |EU433 | - -#### B -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Bahamas |US915 | -|Bahrain |EU868 | -|Bangladesh |AS923_1 | -|Barbados |AU915 | -|Belarus |EU868 | -|Belgium |EU868 | -|Belize |AU915 | -|Benin |EU868 | -|Bermuda |US915 | -|Bhutan |EU868 | -|Bolivia |AU915 | -|Bonaire Sint Eustatius and Saba |EU868 | -|Bosnia and Herzegovina |EU868 | -|Botswana |EU868 | -|Bouvet Island |EU868 | -|Brazil |AU915 | -|British Indian Ocean Territory |Unknown | -|British Virgin Islands |AU915 | -|Brunei |AS923_1 | -|Bulgaria |EU868 | -|Burkina Faso |Unknown | -|Burundi |EU868 | - -#### C -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Cambodia |AS923_1 | -|Cameroon |EU433 | -|Canada |US915 | -|Cape Verde |EU868 | -|Cayman Islands |US915 | -|Central African Republic |Unknown | -|Chad |Unknown | -|Chile |AU915 | -|China |CN470 | -|Christmas Island |AU915 | -|Cocos [Keeling] Islands |AU915 | -|Colombia |AU915 | -|Comoros |EU868 | -|Congo [DRC] |Unknown | -|Congo [Republic] |Unknown | -|Cook Islands |AU915 | -|Costa Rica |AS923_1 | -|Côte d'Ivoire |EU868 | -|Croatia |EU868 | -|Cuba |AS923_3 | -|Curaçao |AS923_1 | -|Cyprus |EU868 | -|Czech Republic |EU868 | - -#### D -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Denmark |EU868 | -|Djibouti |Unknown | -|Dominica |AU915 | -|Dominican Republic |AU915 | - -#### E -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Ecuador |AU915 | -|Egypt |EU868 | -|El Salvador |AU915 | -|Equatorial Guinea |EU868 | -|Eritrea |Unknown | -|Estonia |EU868 | -|Eswatini [Swaziland] |Unknown | -|Ethiopia |Unknown | - -#### F -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Falkland Islands [Islas Malvinas] |EU868 | -|Faroe Islands |EU868 | -|Fiji |Unknown | -|Finland |EU868 | -|France |EU868 | -|French Guiana |EU868 | -|French Polynesia |EU868 | -|French Southern Territories |EU868 | - -#### G -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Gabon |Unknown | -|Gambia |EU433 | -|Gaza Strip |Unknown | -|Georgia |EU868 | -|Germany |EU868 | -|Ghana |EU433 | -|Gibraltar |EU868 | -|Greece |EU868 | -|Greenland |EU868 | -|Grenada |AU915 | -|Guadeloupe |EU868 | -|Guam |US915 | -|Guatemala |AU915 | -|Guernsey |EU868 | -|Guinea |EU433 | -|Guinea-Bissau |Unknown | -|Guyana |US915 | - -#### H -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Haiti |Unknown | -|Heard Island and McDonald Islands |AU915 | -|Honduras |AU915 | -|Hong Kong |AS923_1 | -|Hungary |EU868 | - -#### I -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Iceland |EU868 | -|India |IN865 | -|Indonesia |AS923_2 | -|Iran |EU868 | -|Iraq |Unknown | -|Ireland |EU868 | -|Isle of Man |EU868 | -|Israel |AS923_4 | -|Italy |EU868 | - -#### J -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Jamaica |AU915 | -|Japan |AS923_1 | -|Jersey |EU868 | -|Jordan |IN865 | - -#### K -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Kazakhstan |EU433 | -|Kenya |EU868 | -|Kiribati |Unknown | -|Kosovo |EU868 | -|Kuwait |EU868 | -|Kyrgyzstan |Unknown | - -#### L -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Laos |AS923_1 | -|Latvia |EU868 | -|Lebanon |EU868 | -|Lesotho |EU433 | -|Liberia |Unknown | -|Libya |Unknown | -|Liechtenstein |EU868 | -|Lithuania |EU868 | -|Luxembourg |EU868 | - -#### M -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Macau |AS923_1 | -|North Macedonia |EU868 | -|Madagascar |EU868 | -|Malawi |Unknown | -|Malaysia |AS923_1 | -|Maldives |Unknown | -|Mali |EU433 | -|Malta |EU868 | -|Marshall Islands |Unknown | -|Martinique |EU868 | -|Mauritania |EU868 | -|Mauritius |EU433 | -|Mayotte |EU868 | -|Mexico |US915 | -|Micronesia |Unknown | -|Moldova |EU868 | -|Monaco |EU868 | -|Mongolia |Unknown | -|Montenegro |EU868 | -|Montserrat |AU915 | -|Morocco |EU433 | -|Mozambique |Unknown | -|Myanmar [Burma] |AS923_1 | - -#### N -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Namibia |EU868 | -|Nauru |Unknown | -|Nepal |Unknown | -|Netherlands |EU868 | -|Netherlands Antilles |EU868 | -|New Caledonia |EU868 | -|New Zealand |AU915 | -|Nicaragua |AU915 | -|Niger |IN865 | -|Nigeria |EU868 | -|Niue |AU915 | -|Norfolk Island |AU915 | -|North Korea |Unknown | -|Northern Mariana Islands |US915 | -|Norway |EU868 | - -#### O -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Oman |EU868 | - -#### P -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Pakistan |IN865 | -|Palau |Unknown | -|Palestinian Territories |Unknown | -|Panama |AU915 | -|Papua New Guinea |AU915 | -|Paraguay |AU915 | -|Peru |AU915 | -|Philippines |AS923_3 | -|Pitcairn Islands |Unknown | -|Poland |EU868 | -|Portugal |EU868 | -|Puerto Rico |US915 | - -#### Q -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Qatar |EU868 | - -#### R -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Réunion |EU868 | -|Romania |EU868 | -|Russia |RU864 | -|Rwanda |EU868 | - -#### S -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Sahrawi Arab Democratic Republic |Unknown | -|Saint Barthelemy |EU868 | -|Saint Helena |Unknown | -|Saint Kitts and Nevis |AU915 | -|Saint Lucia |AU915 | -|Saint Martin |EU868 | -|Saint Pierre and Miquelon |EU868 | -|Saint Vincent and the Grenadines |AU915 | -|Samoa |EU868 | -|San Marino |EU868 | -|São Tomé and Príncipe |Unknown | -|Saudi Arabia |EU868 | -|Senegal |EU868 | -|Serbia |EU868 | -|Seychelles |EU433 | -|Sierra Leone |Unknown | -|Singapore |AS923_1 | -|Slovakia |EU868 | -|Slovenia |EU868 | -|Solomon Islands |AS923_1 | -|Somalia |EU868 | -|South Africa |EU868 | -|South Georgia and the South Sandwich Islands|EU868 | -|South Korea |KR920 | -|South Sudan |Unknown | -|Spain |EU868 | -|Sri Lanka |AS923_1 | -|Sudan |Unknown | -|Suriname |AU915 | -|Svalbard and Jan Mayen |EU868 | -|Swaziland see Eswatini |- | -|Sweden |EU868 | -|Switzerland |EU868 | -|Syria |EU868 | - -#### T -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Taiwan |AS923_1 | -|Tajikistan |Unknown | -|Tanzania |AS923_1 | -|Thailand |AS923_1 | -|Timor-Leste |Unknown | -|Togo |EU433 | -|Tokelau |AU915 | -|Tonga |AU915 | -|Trinidad and Tobago |AU915 | -|Tunisia |EU868 | -|Turkey |EU868 | -|Turkmenistan |Unknown | -|Turks and Caicos Islands |AU915 | -|Tuvalu |Unknown | - -#### U -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|U.S. Minor Outlying Islands |US915 | -|U.S. Virgin Islands |US915 | -|Uganda |AS923-1 | -|Ukraine |EU868 | -|United Arab Emirates |EU868 | -|United Kingdom |EU868 | -|United States |US915 | -|Uruguay |AU915 | -|Uzbekistan |EU433 | - -#### V -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Vanuatu |AS923_3 | -|Vatican City (Holy See) |EU868 | -|Venezuela |AS923_1 | -|Vietnam |AS923_2 | -|Virgin Islands (UK) |AU915 | - -#### W -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Wallis and Futuna |EU868 | -|Western Sahara |Unknown | - -#### Y -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Yemen |Unknown | - -#### Z -|Country |Frequency Plan| -|--------------------------------------------|--------------| -|Zambia |EU868 | -|Zimbabwe |EU433 | diff --git a/docs/lorawan-on-helium/lorawan-on-helium.mdx b/docs/lorawan-on-helium/lorawan-on-helium.mdx deleted file mode 100644 index 556f9c513..000000000 --- a/docs/lorawan-on-helium/lorawan-on-helium.mdx +++ /dev/null @@ -1,104 +0,0 @@ ---- -id: lorawan-on-helium -hide_title: true -sidebar_label: Introduction -slug: /lorawan-on-helium ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -# LoRaWAN On Helium - -The LoRaWAN Network on Helium is **compatible with all LoRaWAN devices**. -However, Helium distinguishes itself in how it treats the LoRaWAN Network Server -(LNS). - -In typical LoRaWAN Networks, a central or regional LNS is managed by a single -entity. Helium’s design for a decentralized network, however, means not only do -we want gateways (or what we sometimes call Hotspots) to be independently owned -and operated, but we want to enable the independent operation of the LNS. -Without this, access to the network would require permission from a single -central entity, the LNS operator of the network. - -Therefore, we want to enable the _multi-tenancy_ of LNS’s on the same Public -LoRaWAN Network. Achieving this distinguishes Helium’s LoRaWAN Network from any -other: public wireless infrastructure is now compatible with privately-run -network servers. - -The rest of this article will discuss the networking primitives. If you want to -go ahead and run a network server, please checkout our article about [running -a network server](/use-the-network/run-a-network-server). - -## The OUI - -Each LoRaWAN Network Server (LNS) on the Helium Network acquires an -Organizationally Unique Identifier (OUI). This registers the LNS with the -blockchain and allocates two very important routing objects owned and maintained -by the OUI operator: - -- up to five **filters**, describing the sets (AppEUI, DevEUI) expected by the - LNS -- one or more **slabs** of DevAddrs, reserving NwkAddr space for the OUI's - devices on the Helium Network - -A device defined by (AppEui, DevEui) can be allocated any of the DevAddrs owned -by the OUI. It is even possible to multiplex many devices on the same DevAddr -at the same time, using the Message Integrity Check (MIC) to disambiguate. - -### Join Request Frames and Filters - -A Join Request frame has the following unencrypted header: - -```bash -+---------------------------------------------------------+ -| Size (octets) | 8 | 8 | 8 | -+------------------+------------+------------+------------+ -| Join Request | AppEUI | DevEUI | DevNonce | -+---------------------------------------------------------+ -``` - -From the gateways perspective, the (AppEUI, DevEUI) may be used to figure out if -one or more OUI's are interested in the Join Request. - -This is done by querying every filter maintained and written to the blockchain -by every OUI. The filters themselves are _xorhash_ tables, thus the AppEui and -DevEui cannot be extracted. Only with the AppEui and DevEui in-hand can the -gateway run it through the table and to see if it's there. - -In response to the Join Request, a Join Accept is sent down, assigning the -NwkAddr. Due to the multi-tenancy on the Helium Network, the LNS may only assign -NwkAddrs within its DevAddr slab(s). - -### Data Frames and DevAddr Slabs - -Data packets have the followed unencrypted header (FHDR): - -```bash -+----------------------------------------------------------------------+ -| Size (octets) | 4 | 1 | 2 | 0..15 | -+------------------+------------+------------+------------+------------+ -| FHDR | DevAddr | FCtrl | FCnt | FOpts | -+----------------------------------------------------------------------+ -``` - -Within DevAddr, there is the NwkAddr of a device: - -```bash -+------------------------------------------------+ -| DevAddr | -+------------------------+-----------------------+ -| NwkID (bits 31–25) | NwkAddr (bits 24–0) | -+-----------+--------------------+---------------+ -| Helium Network | allocated by slab | -|(‘H’ / 0b1001000 / 0x48)| to OUIs | -+-----------+--------------------+---------------+ -``` - - -From the gateways perspective, it is able to use DevAddr to determine the OUI of -Data frames. A quick query can say which OUI owns this DevAddr slab. This look-up and routing by DevAddr instead of by \(AppEUI, DevEUI\) via _xorhash_ -filters is generally much quicker. - - diff --git a/docs/lorawan-on-helium/lorawan-roaming/lorawan-roaming-on-helium.mdx b/docs/lorawan-on-helium/lorawan-roaming/lorawan-roaming-on-helium.mdx deleted file mode 100644 index 98f70a01a..000000000 --- a/docs/lorawan-on-helium/lorawan-roaming/lorawan-roaming-on-helium.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -id: lorawan-roaming-on-helium -sidebar_label: LoRaWAN Roaming on Helium -slug: /lorawan-on-helium/lorawan-roaming-on-helium ---- - - -# LoRaWAN Roaming on Helium - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -The Helium Network is the [world's largest LoRaWAN Network](https://explorer.helium.com) - and continues to grow at a staggering pace. Because of this, it becomes a very attractive network to other public and private LoRaWAN Network Server providers (LNSes) who want to extend their coverage without deploying their own infrastructure and capital. And thanks the the Helium blockchain, direct roaming integrations are very simple. Most importantly, major LNSes are already roaming with the Helium Network today, which means the public coverage the community is building is now being used by LoRa devices onboarded to other networks, and Hotspot operators get compensated in $HNT for routing these packets. - - -## Helium Roaming Architecture - -Helium Network roaming most closely resembles the LoRa Alliance's idea of "Passive Roaming". The Helium community operates a dedicated Roaming Server (the "Helium Roaming Server") that is distinct from our core LNS for native Helium Devices. The Helium Roaming Server purchases all packets for a target LoRaWAN `NetID` and forwards them to an endpoint ready to accept them on behalf of a Roaming Partner's LNS. Specifically the Helium Roaming Server connects any Helium gateway that captures target `NetID` packets via the Semtech GWMP UDP client. - - - - -## Actual Roaming Integration - -To ingest packets as a roaming partner, you need to accept Semtech GWMP client connections for the amount of Helium Hotspots that are receiving and routing your packets. Currently,[ this could be a lot](https://explorer.helium.com/hotspots) - assuming you are considering the entire global network. If we consider the United States only, for example, it's about 95,000 total potential gateways. In practice, only a small percentage of Helium gateways will be routing packets for a roaming partner NetID simultaneously. - -When the roaming POC is initiated, Helium provide one or more IPs from where the connections will originate. You will need to supply the IP and port for the host listening for Semtech GWMP connections over UDP. Once provided, packets will start arriving at the specified host. - -## Supported Device Functionality - -Helium Roaming supports the following actions for devices: - -* **Joining**: a new device provisioned to a roaming partner's LNS can join via the Helium Network. For new devices, `join_requests` and `join_accepts` are routed via Helium Hotspots. -* **Uplinking**: Once a device has joined, all device payloads are routed via Helium. -* **Downlinking**: All standard device downlinking is supported. - -## Extended Reading - -* [LoRaWAN on Helium](/lorawan-on-helium) - The Helium Network's approach to LoRaWAN -* [Helium LoRaWAN: Public Infrastructure with Private Network Servers](https://blog.helium.com/helium-lorawan-public-infrastructure-with-ultimate-privacy-9132560e4ae6) -* [Helium Network Data Credits](/use-the-network/console/data-credits/) - The mechanism for purchasing packets from the Helium Network -* [Packet Purchasing](/blockchain/packet-purchasing) - How packet purchasing is actually implemented - diff --git a/docs/mdx.md b/docs/mdx.md deleted file mode 100644 index 77b6d5d31..000000000 --- a/docs/mdx.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -id: mdx -title: Using MDX ---- - -You can write JSX and use React components within your Markdown thanks to -[MDX](https://mdxjs.com/). - -export const Highlight = ({children, color}) => ( {children} ); - -Docusaurus green and -Facebook blue are my favorite colors. - -I can write **Markdown** alongside my _JSX_! diff --git a/docs/mine-hnt/data-only-guides/balena-data-only-hotspot.mdx b/docs/mine-hnt/data-only-guides/balena-data-only-hotspot.mdx deleted file mode 100644 index 8140a51f4..000000000 --- a/docs/mine-hnt/data-only-guides/balena-data-only-hotspot.mdx +++ /dev/null @@ -1,133 +0,0 @@ ---- -id: balena-data-only-hotspot -title: Data Only Hotspot with balena + Raspberry Pi + RAK Concentrator RAK2287 -sidebar_label: balena.io + Raspberry Pi + RAK Concentrators (RAK2287) -slug: /mine-hnt/data-only-guides/balena-data-only-hotspot ---- -# Data Only Hotspot Setup with balena + Raspberry Pi + RAK2287 - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -A Data Only Hotspot is a type of Hotspot that participates on the -Helium Network by transferring data from the end devices (LoRaWAN nodes). The -Data Only Hotspots are eligible for Network Data Transfer Rewards but not Proof -of Coverage Rewards. - -This guide covers all the steps needed to set up a Data Only Hotspot using a -Raspberry Pi and a RAK concentrator (RAK2287) and the Pi Hat running on balena. -This configuration can be achieved by installing the ***gatewayrs*** and -***packet forwarder*** services open sourced by [Nebra](https://github.com/nebraltd) -and using balenaOS and [balenaCloud](https://balena.io). - -:::warning -Data Only Hotspots cannot earn $HNT, at least for now, and after milestone 2 -they will earn $HNT only for Device Packet Transfer. Remember to keep an eye on -[Light Hotspots - BETA](/mine-hnt/light-hotspots) -and the **#gateway-development** channel on the -[Helium Discord Server](https://discord.gg/helium) to check how the development -process evolves. -::: - - -## Getting started - -### Hardware - -* Raspberry Pi 0/2/3/4 or balenaFin -* SD card in case of the Raspberry Pi - -* [RAK 2287 LoRa concentrator SPI based](https://store.rakwireless.com/products/rak2287-lpwan-gateway-concentrator-module) and [RAK2287 Pi Hat](https://store.rakwireless.com/products/rak2287-pi-hat) - -:::important -To use the concentrator module with a Raspberry Pi HAT, you must make sure to -order the variation with the SPI interface. -::: - -### Software - -* [balena.io account](https://dashboard.balena-cloud.com/) -* [balenaEtcher](https://balena.io/etcher) - - -## Deploy the code - -Running this Data Only Hotspot with balena.io is as simple as deploying it to a balenaCloud application. You can do it in just one click by using the button below: - -[![](https://www.balena.io/deploy.png)](https://dashboard.balena-cloud.com/deploy?repoUrl=https://github.com/mpous/helium-data-hotspot) - -Follow instructions, click `Add a Device` and flash an SD card with that balenaOS image dowloaded from balenaCloud. Enjoy the magic 🌟Over-The-Air🌟! - -Find the [repository with the source code here](https://github.com/mpous/helium-data-hotspot) if you would like to clone and deploy from your computer or you would like to contribute. - - -## Configure the device - -### Device Variables - -Once the device is online on balenaCloud and the services `packet-forwarder` and `gatewayrs` are downloaded and installed, go to `Device Variables`. - -* Create the variable for all the services `VARIANT` with your hardware definition. During the test is being used a Raspberry Pi 4 with RAK2287 LoRa concentrator and the `VARIANT` is defined `DIY-RAK2287`. This `VARIANT` is compatible with any Raspberry Pi. You can find here the [list of hardware compatible](https://github.com/NebraLtd/helium-hardware-definitions). - -* Create the variable for all the services `REGION_OVERRIDE` with your LoRa region (e.g. `EU868`). You can find here the [list of LoRa regions compatible](https://github.com/NebraLtd/hm-pktfwd). - - -### Test the Helium Hotspot - -Once the Device Variables are properly set up, the Hotspot should be running showing some errors on connecting to the Blockchain on the balenaCloud Logs. - -To check that the Hotspot has been generated correctly, go to the `Terminal` and select the `gatewayrs` service, then introduce. - -`helium_gateway key info` - -And you will get something like this: - -`{ "address": , "name": }` - -At this point, your Data Only Hotspot is ready to join the Helium blockchain! - -### Join the Helium blockchain with your Hotspot - -To join the Helium blockchain, at the moment (summer 2021) you only can use the Helium CLI. The Helium app is still not compatible with the data-only hotspots. -Follow [this instructions](https://github.com/mpous/helium-data-hotspot/#join-the-helium-blockchain-with-your-data-only-hotspot) to add your Data Only Hotspot on the Blockchain. - -You can find as well the instructions to do it [here](https://github.com/mpous/helium-data-hotspot/#join-the-helium-blockchain-with-your-data-only-hotspot). - -## Check your Data Only Hotspot - -Now that your Data Only Hostpot has been added into the Helium Blockchain you should be able to see it on your Helium wallet. - -Go to the [Helium Explorer](https://explorer.helium.com/) and introduce your URL `https://explorer.helium.com/hotspots/`. - -If you create a Helium Device, then go to the [Helium Console](https://console.helium.com) and Inspect packages from your device to confirm that the Data Only Hostpot is the one that relays the data from your Devices. -You also will be able to see on the balenaCloud logs that UPLINK messages have been relayed to the Helium OUI. - - -## Manage your gateway_key - -It's extremely important that at this point, with the Hotspot added on the Helium blockchain you backup the `gateway_key`. -If you loose this key, you will not be able to use this hotspot anymore in case there is a problem on your hostpot (SD card corrupted, etc). - - -### Backup your gateway_key.bin file - -Follow this instructions to backup your gateway_key.bin file of your hotspot. - -* Open an SSH session to the "host-os" on balenaCloud Terminal. -* Type this command and keep note of the (YOUR INSTANCE)_miner-storage: `ls /var/lib/docker/volumes` -* Type this command to get a link to download the gateway key (note to replace the YOUR INSTANCE part with the container number that you got from the previous command) `curl -F "file=@/var/lib/docker/volumes/(YOUR INSTANCE)_miner-storage/_data#/gateway_key.bin" https://file.io` -* Use the outputted file.io link to securely download your swarm key. The link only works one time. - -### Restore your gateway_key.bin file on your new file - -Follow this instructions to restore your gateway_key.bin key into your new hotspot. - -* Open an SSH session to the "host-os" on balenaCloud Terminal. -* Type this command and keep note of the (YOUR INSTANCE)_miner-storage information: `ls /var/lib/docker/volumes` -* Navigate to where the swarm_key is stored `cd /var/lib/docker/volumes/(YOUR INSTANCE)_miner-storage/_data#/` -* Remove the original `gateway_key.bin` file `rm gateway_key.bin` -* Reboot miner and you will see it restored and working :) -* Upload your `gateway_key.bin` that you wish to restore onto file.io and do `curl -LJO [FILE.IO UPLOAD LINK]` - -## Contributions - -Thank you to Nebra for developing and balenifying the Helium Hotspot, Helium developers community, Jose from RAK, Travis and Joseph from balena to work on the dbus + conman issues. diff --git a/docs/mine-hnt/data-only-guides/dragino-pg1301.mdx b/docs/mine-hnt/data-only-guides/dragino-pg1301.mdx deleted file mode 100644 index 0aff7221b..000000000 --- a/docs/mine-hnt/data-only-guides/dragino-pg1301.mdx +++ /dev/null @@ -1,357 +0,0 @@ ---- -id: dragino-pg1301 -title: Data Only Hotspot Setup Dragino PG1301 and Raspberry Pi -sidebar_label: Dragino PG1301 + Raspberry Pi -slug: /mine-hnt/data-only-guides/dragino-pg1301 ---- - -# Data Only Hotspot Setup with Dragino PG1301 and Raspberry Pi - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -A Data Only Hotspot is a type of Hotspot that participates on the Helium Network -by transferring data from the end devices (LoRaWAN nodes). The Data Only -Hotspots are eligible for Network Data Transfer Rewards but not Proof of -Coverage Rewards. - -This guide covers all the steps needed to set up a Data Only Hotspot using a -Raspberry Pi and Dragino PG1301 hat. - -:::warning -Data Only Hotspots cannot earn $HNT, at least for now, and after -milestone 2 they will earn $HNT only for Device Packet Transfer. Remember to -keep an eye on [Light Hotspots - BETA](/mine-hnt/light-hotspots) and the -**#gateway-development** channel on the -[Helium Discord Server](https://discord.gg/helium) to check how the development -process evolves. -::: - -## Getting started - -This process assumes you have some basic Linux skills, can use a text editor and -understand what a service is. You should be able to use programs like `scp` to -move data between the Raspberry Pi and other computers on your network. - -What we will be doing is : - -- installing the LoRa Packet Forwarder service from Dragino to use the - Concentrator hat -- installing the Helium Gateway service to move data between the packet - forwarder and the Helium network -- configure everything -- verify everything is working - -### Hardware - -- Raspberry Pi 4. Other faimilies of Pi may work, but this has only been tested - on the Pi 4 Model B. -- [Dragino 10 channels - LoRaWAN GPS Concentrator for Raspberry Pi](https://www.dragino.com/products/lora/item/149-lora-gps-hat.html) - -### Software - -We will be using the following: - -- Fresh Raspbian Buster image -- lorapktfwd package from - [Dragino Downloads Site](https://www.dragino.com/downloads/index.php?dir=LoRa_Gateway/PG1301/software/) -- Latest helium-gateway package release from - [Helium](https://github.com/helium/gateway-rs/releases) ending - in -`-raspi234.deb` - -## Configure the Raspberry Pi - -1. Use the Raspberry Pi Configuration application and enable the SPI kernel - module in the Interface Options section. This is located in the GUI from - the Applications Menu under Preferences -2. Reboot to apply the changes - -If you haven't done so, attach the Dragino PG1301 to the Raspberry Pi with the -power off, attach the antenna, then power on. - -## Install the LoRa Packet Forwarder Service - -1. Open the web browser and download `lorapktfwd_v1.1.deb` from the - [Dragino Downloads Site](https://www.dragino.com/downloads/index.php?dir=LoRa_Gateway/PG1301/software/) -2. Open a terminal window and install the package using dpkg - ``` - sudo dpkg -i lorapktfwd_v1.1.deb - ``` -3. Verify lorapktfwd is running using systemctl - ``` - sudo systemctl status lorapktfwd - ``` - -Example: -``` -pi@raspberrypi:~ $ cd Downloads -pi@raspberrypi:~/Downloads $ sudo dpkg -i lorapktfwd_v1.1.deb -Selecting previously unselected package lorapktfwd. -(Reading database ... 98868 files and directories currently installed.) -Preparing to unpack lorapktfwd_v1.1.deb ... -Unpacking lorapktfwd (1) ... -Setting up lorapktfwd (1) ... -Created symlink /etc/systemd/system/multi-user.target.wants/lorapktfwd.service → /lib/systemd/system/lorapktfwd.service. -pi@raspberrypi:~/Downloads $ -pi@raspberrypi:~/Downloads $ sudo systemctl status lorapktfwd - lorapktfwd.service - packet forwarder - Loaded: loaded (/lib/systemd/system/lorapktfwd.service; enabled; vendor preset: enabled) - Active: active (running) since Wed 2021-10-06 10:58:26 EDT; 5min ago - Main PID: 1443 (lora_pkt_fwd) - Tasks: 5 (limit: 4915) - CGroup: /system.slice/lorapktfwd.service - └─1443 /usr/bin/lora_pkt_fwd - -Oct 06 11:03:29 raspberrypi lora_pkt_fwd[1443]: REPORT~ ### [DOWNSTREAM] ### -Oct 06 11:03:29 raspberrypi lora_pkt_fwd[1443]: REPORT~ # PULL_DATA sent: 3 (0.00% acknowledged) -Oct 06 11:03:29 raspberrypi lora_pkt_fwd[1443]: REPORT~ # PULL_RESP(onse) datagrams received: 0 (0 bytes) -Oct 06 11:03:29 raspberrypi lora_pkt_fwd[1443]: REPORT~ # RF packets sent to concentrator: 0 (0 bytes) -Oct 06 11:03:29 raspberrypi lora_pkt_fwd[1443]: REPORT~ # TX errors: 0 -Oct 06 11:03:29 raspberrypi lora_pkt_fwd[1443]: REPORT~ # BEACON queued: 0 -Oct 06 11:03:29 raspberrypi lora_pkt_fwd[1443]: REPORT~ # BEACON sent so far: 0 -Oct 06 11:03:29 raspberrypi lora_pkt_fwd[1443]: REPORT~ # BEACON rejected: 0 -Oct 06 11:03:29 raspberrypi lora_pkt_fwd[1443]: REPORT~ ### [PPS] ### -Oct 06 11:03:29 raspberrypi lora_pkt_fwd[1443]: REPORT~ # SX1301 time (PPS): 302479992 -pi@raspberrypi:~/Downloads $ -``` - -## Install the Helium Gateway Service - -1. Download the latest helium-gateway release package from - https://github.com/helium/gateway-rs/releases ending in -raspi234.deb -2. Install the package - ``` - sudo dpkg -i helium-gateway-v1.0.0-alpha.18-raspi234.deb - ``` - Replace helium-gateway-v1.0.0-alpha.18-raspi234.deb with the version you - downloaded. -3. Verify the gateway is running - ``` - sudo systemctl status helium_gateway - ``` - -Example: -``` -pi@raspberrypi:~/Downloads $ sudo dpkg -i helium-gateway-v1.0.0-alpha.18-raspi234.deb -Selecting previously unselected package helium_gateway. -(Reading database ... 98957 files and directories currently installed.) -Preparing to unpack helium-gateway-v1.0.0-alpha.18-raspi234.deb ... -Unpacking helium_gateway (1.0.0~alpha.18) ... -Setting up helium_gateway (1.0.0~alpha.18) ... -Created symlink /etc/systemd/system/multi-user.target.wants/helium_gateway.service → /lib/systemd/system/helium_gateway.service. -pi@raspberrypi:~/Downloads $ -pi@raspberrypi:~/Downloads $ sudo systemctl status helium_gateway - helium_gateway.service - Helium Gateway - Loaded: loaded (/lib/systemd/system/helium_gateway.service; enabled; vendor preset: enabled) - Active: active (running) since Wed 2021-10-06 11:51:03 EDT; 35s ago - Main PID: 2121 (helium_gateway) - Tasks: 2 (limit: 4915) - CGroup: /system.slice/helium_gateway.service - └─2121 /usr/bin/helium_gateway -c /etc/helium_gateway server - -Oct 06 11:51:03 raspberrypi helium_gateway[2121]: updated routing to height 1042530, module: dispatcher -Oct 06 11:51:03 raspberrypi helium_gateway[2121]: starting, oui: 13, uri: http://46.246.38.248:8080/, public_key: 115ZS5of9wsV3M5sH3mePp9NVnKayUXG7qT2W7Sn4KJLMzd3eMr, module: router -Oct 06 11:51:03 raspberrypi helium_gateway[2121]: starting, oui: 12, uri: http://54.219.236.122:8080/, public_key: 112ewJNEUfSg3Jvo276tMjzFC2JzmmZcJJ32CWz2fzYqbyCMMTe1, module: rout -Oct 06 11:51:03 raspberrypi helium_gateway[2121]: starting, oui: 9, uri: http://13.37.13.24:8080/, public_key: 11afuQSrmk52mgxLu91AdtDXbJ9wmqWBUxC3hvjejoXkxEZfPvY, module: router -Oct 06 11:51:03 raspberrypi helium_gateway[2121]: starting, oui: 9, uri: http://44.238.156.97:8080/, public_key: 11w77YQLhgUt8HUJrMtntGGr97RyXmot1ofs5Ct2ELTmbFoYsQa, module: router -Oct 06 11:51:03 raspberrypi helium_gateway[2121]: starting, oui: 6, uri: http://185.34.141.6:8080/, public_key: 11awcuSbVURPkXX3FbKC7KF6bgEPRZqqPzv1FTEYABMLttUr13E, module: router -Oct 06 11:51:03 raspberrypi helium_gateway[2121]: starting, oui: 4, uri: http://54.193.165.228:8080/, public_key: 11263KvqW3GZPAvag5sQYtBJSjb25azSTSwoi5Tza9kboaLRxcsv, module: route -Oct 06 11:51:03 raspberrypi helium_gateway[2121]: starting, oui: 2, uri: http://54.176.88.149:8080/, public_key: 1124CJ9yJaHq4D6ugyPCDnSBzQik61C1BqD9VMh1vsUmjwt16HNB, module: router -Oct 06 11:51:03 raspberrypi helium_gateway[2121]: starting, oui: 1, uri: http://52.8.80.146:8080/, public_key: 112qB3YaH5bZkCnKA5uRH7tBtGNv2Y5B4smv1jsmvGUzgKT71QpE, module: router -Oct 06 11:51:04 raspberrypi helium_gateway[2121]: no update found, module: updater -pi@raspberrypi:~/Downloads $ -``` - -## Configure the LoRa Packet Forwarder - -These steps assume the US915 region. For other regions, replace with your region -locale configuration in Step 2. - -1. Change directory to the `/etc/lora-gateway` directory - ``` - cd /etc/lora-gateway - ``` -3. Copy the US915 Band 2 configuration from the `cfg` subdirectory as - global_conf.json - ``` - cp cfg/dragino/global_conf.us915_1.json global_conf.json - ``` -3. Generate a unique gateway ID based on the MAC address of one of your network - interface(s). Use the following bash syntax to help create one. - ``` - echo `ip a | grep 'link/ether' | cut -d ' ' -f 6 | sed 's/://g'` | tr a-z A-Z - ``` - This command will generate you one or more unique values you can use for - the gateway EUI. - -In the below example, you see two values (DCA6328XXX6F and DCA6328XXX70) because -there is an active wired and wireless interface on the Raspberry Pi. It doesn't -matter which one you use, as all MAC addresses are globally unique. - -The goal here is to guarantee a unique gateway ID in the network. - -``` -pi@raspberrypi:~/Downloads $ cd /etc/lora-gateway/ -pi@raspberrypi:/etc/lora-gateway $ cp cfg/dragino/global_conf.us915_1.json global_conf.json -pi@raspberrypi:/etc/lora-gateway $ echo `ip a | grep 'link/ether' | cut -d ' ' -f 6 | sed 's/://g'` | tr a-z A-Z -DCA6328XXX6F DCA6328XXX70 -pi@raspberrypi:/etc/lora-gateway $ -``` - -In the next step we will be using the `DCA6328XXX70` value as an example. -Do not use the example value from this documentation, it will not work. - -### Point the LoRa Packet Forwarder to the Helium Gateway - -By default the LoRa Packet Forwarder from Dragino is configured to work with -the Things Network. Here we will configure it to talk to the Helium -gateway you installed on the Raspberry Pi. - -1. Use a text editor and open the `/etc/lora-gateway/local_conf.json` file -2. Replace the current value for gateway_ID with (one of) the values generated - in the previous step and **append the value FFFF to the end**. The - reason we append `FFFF` to the end is the gateway ID is required to be - 16 characters, and the unique MAC address generated is only 12. Again, - this guarantees your gateway ID will be unique in the network. -3. Add the `server_address` key with the value `127.0.0.1` -4. Add the `serv_port_up` key with the value `1680` -5. Add the `serv_port_down` key with the value `1680` - -You should have something that resembles the following in your -/etc/lora-gateway/local_conf.json file. Be sure to double -check the JSON syntax and have the key/values separated by commas and the {} -characters match up. - -``` - { - "gateway_conf": { - "gateway_ID": "DCA6328XXX70FFFF", - "server_address": "127.0.0.1", - "serv_port_up": 1680, - "serv_port_down": 1680 - } - } -``` - -For reference, the server address being used is the local machine (127.0.0.1, -also called localhost) and port 1680 is the port the helium service is communicating on. -**Don't** use the value assigned by your router or the public IP address. - -When you are finished make sure to save and exit the file. - -### Configure the Helium Gateway Region - -The default region of the _helium_gateway_ service is US915, so you can continue -with the next section if you are using this one. Otherwise, you must set your -region frequency in `/etc/helium_gateway/settings.toml`. Add the following line -at the beginning of the file: - -``` -region = "" -``` - -Possible values are: - -``` -US915 | EU868 | EU433 | CN470 | CN779 | AU915 | AS923_1 | AS923_2 | AS923_3 | AS923_4 | KR920 | IN865 -``` - -For instance, if your region is EU868 the content in `settings.toml` must be. - -``` -region = "EU868" - -[log] -method = "syslog" -level = "info" -timestamp = false - -[update] -platform = "raspi234" -``` - -## Activate The Changes - -Now, reboot the Raspberry Pi to restart the services and verify that everything -starts at boot time and is working. - -## Post-Reboot Checks - -* You can view the log file of the LoRa Packet Forwarder by opening a terminal - window and running - ``` - journalctl -u lorapktfwd - ``` -* You can view the log file of the Helium Gateway by opening another terminal - window and running - ``` - journalctl -u helium_gateway - ``` - -Use the spacebar to scroll thru the logs, and Ctrl-C to get back to the command -prompt. - -Congradulations, your LoRa Packet Forwarder and Helium Gateway service is setup! -At this point your LoRa radio will be able to pass radio traffic between the -network and the Helium gateway. Any devices you registered via the Helium -console should now be live. Your hotspot will not appear on the map. Before -adding your hotspot to the blockchain, please check and backup your -configuration. - -## Check and Backup your Configuration - -1. To view your gateway address and unique animal name assigned to you - ``` - helium_gateway key info - ``` - Example: - ``` - $ helium_gateway key info - { - "address": "13XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", - "name": "unique-animal-name" - } - ``` -2. Backup your gateway key to another machine/media for recovery purposes. - The file `/etc/helium_gateway/gateway_key.bin` contains the key. - -:::warning -If you lose this key, you will not be able to use this hotspot -anymore in case there is a problem on your hostpot (SD card corrupted, etc). You -will need to generate a new key and lose your existing animal name/hostpot -configuration -::: - -## Testing the packet transfer with an end device - -If you have an end device (LoRaWAN node), you can check if the hotspot can -transfer packets through the network. In other words, you can check if the -devices can send data to the Helium Console. The Helium Console is where you can -provision and manage the end devices, so the nodes need to be registered to -start using the network. - -### Some comments and recommendations about the Helium Console - -At least for now, it is recommended to use the staging console instead of the -production one when we are transferring data through Data Only hotspots. You can -differentiate them for the URL they use, -[console.helium.com](https://console.helium.com/) for production, and -[staging-console.helium.wtf](https://staging-console.helium.wtf) for staging. -Don't be surprised if you find some differences between those console flavors, -basically staging is where the new features are tested before their rollout to -production. - -:::important -If the device you will use for testing is registered on the -production console, it's better to delete it from there to avoid any unexpected -behavior. -::: - -To register your end device on the console, you can follow the steps described -on -[Adding Devices](https://docs.helium.com/use-the-network/console/adding-devices/). - -## What's next? - -At this point, after you verified your Data Only Hotspot is working, it is ready -to be added to the blockchain! You can find more information about that process -[here](/mine-hnt/data-only-hotspots#pre-requisites). diff --git a/docs/mine-hnt/data-only-guides/dragino.mdx b/docs/mine-hnt/data-only-guides/dragino.mdx deleted file mode 100644 index c05c0045c..000000000 --- a/docs/mine-hnt/data-only-guides/dragino.mdx +++ /dev/null @@ -1,178 +0,0 @@ ---- -id: dragino -title: Dragino Data Only Hotspot Setup -sidebar_label: Dragino LPS80/DLOS8 -slug: /mine-hnt/data-only-guides/dragino ---- - -# Dragino LoRaWAN Gateway Setup - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -This guide provides instructions on how to configure an 8-channel Dragino -LoRaWAN gateway such as the LPS8 or DLOS8 to work with the Helium network. - -:::warning - -Dragino Hotspots will only mine HNT through packet transfer, and is considered a Data Only Hotspot. The ability to mine HNT with anything other than -[Approved Hotspots](https://helium.com/mine) is not currently supported. Please -join the [#gateway-development](https://discord.gg/helium) channel in the Helium Discord Server for -the latest updates. - -::: - -### Video Guide for Setup - -[![Link to YouTube tutorial explaining packet forwarder setup.](https://img.youtube.com/vi/OuujPVK8f3U/0.jpg)](https://www.youtube.com/watch?v=OuujPVK8f3U) - -## Prerequisites - -Prior to configuring your Dragino to work with the Helium network, please -confirm that it is connected to the Internet and updated to the latest firmware. -Refer to the user guide provided on the -[Dragino download site](http://www.dragino.com/downloads/index.php?dir=LoRa_Gateway/) -for more detailed instructions. - -- Connect to a Wi-Fi or Ethernet network with Internet access. -- Update to the latest firmware from - [Dragino](http://www.dragino.com/downloads/index.php?dir=LoRa_Gateway/). As - recommended by Dragino, leave "Preserve Settings" _unchecked_ when upgrading - firmware to avoid issues caused by incompatibility of settings between - versions. This guide assumes the standard firmware version v5.4.1618196981 or - later. Earlier firmware versions may require ca-bundle to be installed prior - to gateway-rs (via SSH: `opkg update` and `opkg install ca-bundle`). Note, - the OpenVPN firmware may be used however port numbers may differ from what's - included here. -- Change the root password from the default of 'dragino', if desired. - -## Configure LoRa Frequency Plan - -To be able to send and receive LoRa data, your gateway must be configured to the -frequencies specified for your region. You may be able to use the predefined -frequency in the Dragino or some cases may need to manually set them per the -frequencies used by Helium in your region. - -1. Log into the Dragino gateway web interface. In the standard Dragino firmware - connect via your browser at `http://:8000` once the Dragino is - connected to your network. -2. Navigate to Lora > Lora from the Menu. -3. Under Radio Settings, select your region in the Frequency Plan drop down and, - if applicable, the Frequency Sub Band. For example, in the US, select US915 - for the frequency plan and 2 for the sub band. -4. If desired, set Static GPS coordinates. -5. Click Save & Apply. - -For some regions, it my be necessary to manually populate Populate the Customized -Channel Settings based on the Helium frequencies for your region. Refer to the -[Helium sample LoRa packet forwarder global.conf files](https://github.com/helium/sx1302_hal/tree/helium/hotspot/packet_forwarder) for your region as a -guide to the values to use. You can check the values used by the pre-defined -frequency plans by viewing the global_conf.json file: -`cat /etc/lora/global_conf.json` - -_Example of customized channel settings using the US915 frequency plan for Helium_ - - - -## Configure LoRaWAN Settings - -Next, you will configure the LoRa packet forwarder on the Dragino to forward -packets to the Helium Gateway service which will be installed on the Dragino in -the next step. - -1. From the Dragino web interface, navigate to LoRaWAN > LoRaWAN from the menu. -2. Select `Custom / Private LoRaWAN` from the Service Provider. -3. Set the Server Address to `127.0.0.1` and both Uplink and Downlink ports to - `1680`. This will configure the forwarder to use the default port used by - Helium Gateway. - - - -4. Click Save & Apply. - -## Install Helium Gateway (gateway-rs) on the Dragino - -Finally, you will install the Helium Gateway service. This requires SSH access -to the Dragino. - -1. Connect to the Dragino over SSH. By default, the standard Dragino firmware - uses port 2222 for SSH (the OpenVPN firmware uses port 22) and the root user - has access. `ssh root@ -p 2222` -2. Copy the Helium Gateway package to the Dragino. The latest - [source code](https://github.com/helium/gateway-rs) and pre-built - [releases](https://github.com/helium/gateway-rs/releases) are available on - GitHub. - Option 1: Download from GitHub: On the Dragino run `cd /tmp` and - `wget -O helium-gateway--dragino.ipk https://github.com/helium/gateway-rs/releases/download//helium-gateway--dragino.ipk`. - Option 2: Copy from another computer: Run this command from on the computer - within the directory containing the package - `scp helium-gateway--dragino.ipk :/tmp/`. -3. Install the Helium Gateway package - `opkg install /tmp/helium-gateway--dragino.ipk`. -4. Backup your key file `/etc/helium_gateway/gateway_key.bin` and keep in a safe - place. This will be needed to recover this gateway especially if it is - onboarded to the blockchain. - -Helium Gateway is now installed and should be running. Use the command -`helium_gateway key info` to view the public key address and animal name of your -gateway. - -## Verify - -Your Dragino gateway should now be setup and forwarding LoRaWAN data traffic to -the Helium Network. - -### Through Helium Console - -If you have a LoRaWAN device configured through the Helium Console, you should -now see it uplinking traffic through the Dragino gateway. You can verify this by -turning on your device within range of the Dragino and looking for traffic in -Console associated to the Dragino gateway's animal name. - -Note, during the alpha period, the helium gateway service by default routes data -traffic to the [Staging Router/Console](https://staging-console.helium.wtf/). - -### Through the System Logs - -Use the Dragino system log to verify that Helium Gateway has started. You can -view the log in the web interface or by using logread on the commandline -interface (e.g, `logread | grep helium_gateway`). In the logs, you should see -messages indicating helium_gateway is starting. If you do not see these, try -restarting the service (`/etc/init.d/helium_gateway restart`) or reboot the -Dragino as the messages may have rotated out of the log. - -_Example logs showing the Helium Gateway service starting_ - -``` -Thu Mar 25 19:43:06 2021 daemon.err helium_gateway[2031]: Mar 25 19:43:06.184 INFO starting server, key: , version: 1.0.0-alpha.4 -Thu Mar 25 19:43:06 2021 daemon.err helium_gateway[2031]: Mar 25 19:43:06.289 INFO starting, module: gateway -Thu Mar 25 19:43:06 2021 daemon.err helium_gateway[2031]: Mar 25 19:43:06.306 INFO starting, module: router -``` - -Additionally, the LoRa Packet Forwarder log can provide some clues as to whether -the LoRaWAN server configuration is correct. Search the system log for PULL_DATA -messages and confirm that they are acknowledged such as -`REPORT~ # PULL_DATA sent: 1 (100.00% acknowledged)`. This indicates that the -packet forwarder is communicating with the Helium Gateway service running on the -Dragino and is getting replies from the service as expected. Note, this is not a -foolproof way to confirm it is configured correctly. By default, the LoRaWAN -Server settings are configured for the TTN EU server which will also provide -acknowledgment. However, the absence of acknowledgment could indicate the the -LoRaWAN settings are not correct per the above. - -## COMING SOON: Onboard as Data-Only Hotspot - -As part of Milestone 1.5 of the Light Gateway project roadmap, you will be able to -onboard data only hotspots such as the Dragino to appear on the coverage map, and then, -in Milestone 2, earn HNT for data transfers (but not for Proof of Coverage). See -[Light Hotspots - BETA](/mine-hnt/light-hotspots) for -more information. This process will require using the Helium -[command-line interface (CLI) Wallet](https://github.com/helium/helium-wallet-rs) -to submit the onboarding and assert location transactions. diff --git a/docs/mine-hnt/data-only-guides/kerlink.mdx b/docs/mine-hnt/data-only-guides/kerlink.mdx deleted file mode 100644 index 3ef4b0b0f..000000000 --- a/docs/mine-hnt/data-only-guides/kerlink.mdx +++ /dev/null @@ -1,250 +0,0 @@ ---- -id: kerlink -title: Kerlink Data Only Hotspot Setup -sidebar_label: Kerlink iStation, iFemtoCell, iFemtoCell Evolution -slug: /mine-hnt/data-only-guides/kerlink ---- - -# Kerlink gateways - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -All Kerlink gateways share the same operating system, called KerOS. It is based on Linux and uses OPKG, however not directly. - -:::warning - -Kerlink Gateways will only mine HNT through packet transfer, and is considered a Data Only Hotspot unless you purchase a Kerlink Miner specificlly designed for the Helium Network. The ability to mine HNT with anything other than -[Approved Hotspots](https://helium.com/mine) is not currently supported. Please -join the [#gateway-development](https://discord.gg/helium) channel in the Helium Discord Server for -the latest updates. - -::: - -## Logging in - -Use SSH. Your username is `root` and the default password is `pdmk-XXXXXX` where the X's should be replaced with the last 6 digits of the gateway Board ID or the EUI (see labels on the gateway). - -Once logged in, please change your password. - -## Check KerOS version - -We recommend to use the latest KerOS version, which is at the time of writing 4.3.3: - -``` -root@klk-wiis-050029:~ # opkg list -keros - 4.3.3-0-g993efce1 -``` - -## Installing an IPK - -To install an IPK package, place it in `/user/.updates` and execute: - -``` -sync -kerosd -u -reboot -``` - -Example: upload from your computer -``` -user@computer:~ $ scp file.ipk root@gateway-ip:/user/.updates/ -``` -or directly from the gateway: -``` -root@klk-wiis-050029:~ # wget https://github.com/helium/gateway-rs/releases/download/v1.0.0-alpha.8/helium-gateway-v1.0.0-alpha.8-klkgw.ipk -Connecting to github.com (192.30.255.112:443) -Connecting to github-releases.githubusercontent.com (185.199.110.154:443) -helium-gateway-v1.0. 100% |*************************************************************************************************************| 1032k 0:00:00 ETA -root@klk-wiis-050029:~ # mv helium-gateway-v1.0.0-alpha.8-klkgw.ipk /user/.updates -root@klk-wiis-050029:~ # sync; kerosd -u; reboot; exit - -The system is going down for reboot NOW!029 (pts/0) (Tue Apr 20 17:49:37 2021) -``` - -This is used because KerOS uses a backup mechanism when installing packages. As soon as you install an IPK, a backup snapshot is made. You can then - -* restore to stock firmware: `kerosd -s` -* restore to the latest backup: `kerosd -b` -* trigger an update from `/user/.updates`: `kerosd -u` - -## Check installation - -You need the latest KerOS version (see above) and the appropriate light miner software installed: - -``` -root@klk-wiis-050029:~ # opkg list -helium_gateway - 1.0.0-alpha.8 -keros - 4.3.3-0-g993efce1 -``` - -## Configure LoRa Frequency Plan - -Use the built-in tool `klk_apps_config` to activate the Kerlink Packet Forwarder (CPF) on the appropriate region: - -``` -# this is multiline just for readability -root@klk-wiis-050029:~ # klk_apps_config --activate-cpf \ - --lns-server 127.0.0.1 \ - --lns-dport 1680 --lns-uport 1680 \ - --loradconf US915-US.json -Stopping lorad 1.3.0 -Stopping lorafwd 1.2.0 -Starting lorad 1.3.0 -Starting lorafwd 1.2.0 -lorafwd[1447]: <6> Parsing configuration file: /var/run/lora/gateway-id.toml -lorafwd[1447]: <6> Parsing configuration file: /etc/lorafwd.toml -root@klk-wiis-050029:~ # -``` - -The list of available preconfigured regions are in `/etc/lorad/XXX` where XXX is the gateway model nickname: -* iFemtoCell: `wifc` -* iFemtoCell Evolution: `fevo` -* iStation: `wiis` - -``` -root@klk-wiis-050029:~ # ll /etc/lorad/wiis/ -drwxr-xr-x 2 root root 220 Aug 3 2020 . -drwxr-xr-x 1 root root 4.0K Apr 20 17:55 .. --rw-r--r-- 1 root root 2.4K Aug 3 2020 AS923-JP.json --rw-r--r-- 1 root root 2.0K Aug 3 2020 AS923-TH-SG-HK-TW.json --rw-r--r-- 1 root root 1.9K Aug 3 2020 AU915-AU.json --rw-r--r-- 1 root root 2.0K Aug 3 2020 EU868-FR.json --rw-r--r-- 1 root root 1.8K Aug 3 2020 IN865-IN.json --rw-r--r-- 1 root root 2.3K Aug 3 2020 KR920-KR.json --rw-r--r-- 1 root root 1.9K Aug 3 2020 RU864-RU.json --rw-r--r-- 1 root root 1.9K Aug 3 2020 RU864-RU_Legacy.json --rw-r--r-- 1 root root 1.9K Aug 3 2020 US915-US.json -``` - -If the desired configuration file is not available, feel free to create a new one and restart the tool. - -## US915/AU915 - -Kerlink uses the first sub-band in these regions by default. To use the appropriate sub-band (second), use this command: - -``` -source /etc/default/lorad -# US915 -sed -i s/902700000/904300000/ $CONFIGURATION_FILE -sed -i s/903400000/905000000/ $CONFIGURATION_FILE -# AU915 -sed -i s/915600000/917200000/ $CONFIGURATION_FILE -sed -i s/916300000/917900000/ $CONFIGURATION_FILE -# all regions: -monit restart lorad -``` - -## TX frequencies - -By default, Kerlink restricts the TX frequencies (downlinks) to what LoRaWAN defines. Helium Proofs of Coverage use the uplink bands for the transmission of the challenge RF packet. - -This is only required in US915 and AU915: - -``` -# US915 -sed -i s/923300000/902300000/ ${CONFIGURATION_FILE} -# AU915 -sed -i s/923300000/915200000/ ${CONFIGURATION_FILE} -# all regions: -monit restart lorad -``` - -# Troubleshooting - -LoRa logs are available in `/var/log/lora.log`: - -## Radio configuration - -Restart the lora daemon and see if it loads the appropriate channels: - -``` -# note: timestamps removed for readability -root@klk-wiis-050029:~ # tail -f /var/log/lora.log & -[1] 2041 -root@klk-wiis-050029:~ # monit restart lorad -lorad[1414]: <5> Stopping lorad -lorad[1414]: <3> TTY PORT FAIL TO CLOSE -lorad[1414]: <4> Failed to close GPS device -lorad[1414]: <3> CONCENTRATOR UNCONNECTED -lorad[1414]: <4> concentrator was already disconnected -lorafwd[1449]: <6> Heartbeat (3E33) sent -lorafwd[1449]: <6> Heartbeat (3E33) acknowledged in 1.00509 ms -lorad[2011]: <5> Starting lorad 1.3.0 -lorad[2011]: <6> Programming FPGA with spectral scan firmware -lorad[2011]: <6> Using PPS device /sys/class/pps/pps1 -lorad[2011]: <6> Parsing configuration file: /etc/lorad/lorad.json -lorad[2011]: <6> Initialize JIT queue (nb_pkt=64, size=19716) -lorad[2011]: <6> Using board: lorawan_public=true -lorad[2011]: <6> Using lbt: enable=false -lorad[2011]: <6> Using txgain: lut=0 dig_gain=3 dac_gain=3 mix_gain=9 pa_gain=1 rf_power=-2 -lorad[2011]: <6> Using txgain: lut=1 dig_gain=3 dac_gain=3 mix_gain=11 pa_gain=1 rf_power=2 -lorad[2011]: <6> Using txgain: lut=2 dig_gain=3 dac_gain=3 mix_gain=12 pa_gain=1 rf_power=4 -lorad[2011]: <6> Using txgain: lut=3 dig_gain=3 dac_gain=3 mix_gain=14 pa_gain=1 rf_power=7 -lorad[2011]: <6> Using txgain: lut=4 dig_gain=3 dac_gain=3 mix_gain=10 pa_gain=2 rf_power=8 -lorad[2011]: <6> Using txgain: lut=5 dig_gain=3 dac_gain=3 mix_gain=11 pa_gain=2 rf_power=10 -lorad[2011]: <6> Using txgain: lut=6 dig_gain=3 dac_gain=3 mix_gain=12 pa_gain=2 rf_power=12 -lorad[2011]: <6> Using txgain: lut=7 dig_gain=3 dac_gain=3 mix_gain=13 pa_gain=2 rf_power=14 -lorad[2011]: <6> Using txgain: lut=8 dig_gain=3 dac_gain=3 mix_gain=14 pa_gain=2 rf_power=15 -lorad[2011]: <6> Using txgain: lut=9 dig_gain=3 dac_gain=3 mix_gain=9 pa_gain=3 rf_power=17 -lorad[2011]: <6> Using txgain: lut=10 dig_gain=3 dac_gain=3 mix_gain=10 pa_gain=3 rf_power=19 -lorad[2011]: <6> Using txgain: lut=11 dig_gain=3 dac_gain=3 mix_gain=11 pa_gain=3 rf_power=21 -lorad[2011]: <6> Using txgain: lut=12 dig_gain=3 dac_gain=3 mix_gain=12 pa_gain=3 rf_power=23 -lorad[2011]: <6> Using txgain: lut=13 dig_gain=3 dac_gain=3 mix_gain=13 pa_gain=3 rf_power=25 -lorad[2011]: <6> Using txgain: lut=14 dig_gain=3 dac_gain=3 mix_gain=14 pa_gain=3 rf_power=26 -lorad[2011]: <6> Using txgain: lut=15 dig_gain=3 dac_gain=3 mix_gain=15 pa_gain=3 rf_power=27 -lorad[2011]: <6> Using rxrf: chain=0 enable=true freq_hz=904300000 rssi_offset=-169.5 type=SX1257 tx_enable=true tx_notch_freq=129000 -lorad[2011]: <6> Using rxrf: chain=1 enable=true freq_hz=905000000 rssi_offset=-168.7 type=SX1257 tx_enable=false -lorad[2011]: <6> Using rxif: channel=0 enable=true type=MULTI rf_chain=0 freq_hz=903900000 bw=125000 sf=7-12 -lorad[2011]: <6> Using rxif: channel=1 enable=true type=MULTI rf_chain=0 freq_hz=904100000 bw=125000 sf=7-12 -lorad[2011]: <6> Using rxif: channel=2 enable=true type=MULTI rf_chain=0 freq_hz=904300000 bw=125000 sf=7-12 -lorad[2011]: <6> Using rxif: channel=3 enable=true type=MULTI rf_chain=0 freq_hz=904500000 bw=125000 sf=7-12 -lorad[2011]: <6> Using rxif: channel=4 enable=true type=MULTI rf_chain=1 freq_hz=904700000 bw=125000 sf=7-12 -lorad[2011]: <6> Using rxif: channel=5 enable=true type=MULTI rf_chain=1 freq_hz=904900000 bw=125000 sf=7-12 -lorad[2011]: <6> Using rxif: channel=6 enable=true type=MULTI rf_chain=1 freq_hz=905100000 bw=125000 sf=7-12 -lorad[2011]: <6> Using rxif: channel=7 enable=true type=MULTI rf_chain=1 freq_hz=905300000 bw=125000 sf=7-12 -lorad[2011]: <6> Using rxif: channel=8 enable=true type=STD rf_chain=0 freq_hz=904600000 bw=500000 sf=8 -lorad[2011]: <6> Using rxif: channel=9 enable=false -lorad[2011]: <6> Using beacon: enable=false -lorad[2011]: <6> Using api: uplink="ipc:///var/run/lora/uplink" -lorad[2011]: <6> Using api: downlink="ipc:///var/run/lora/downlink" -lorad[2011]: <6> Using api: control="ipc:///var/run/lora/lorad" -lorad[2011]: <6> Programming FPGA with spectral scan firmware -lorad[2011]: <5> detected FPGA with SPI mux header (v31) -lorad[2011]: <6> FPGA supported features: [TX filter] [Spectral Scan] -lorad[2011]: <6> sx1272 version: 0x22, initial mode:0x1 -lorad[2011]: <6> TAI offset has been set to 37 -lorad[2011]: <6> Setting mode standby OK -lorad[2011]: <6> Selected single side bandwidth: 100000 -lorad[2011]: <6> PPS is enabled -lorad[2011]: <6> Setting mode RX OK -lorafwd[1449]: <6> Received uplink message: system event "Started" -``` - -We can see it loaded channels 903.9MHz, 904.1MHz, etc: this is the appropriate frequency sub-band for US915. - -## LoRa traffic - -``` -# note: timestamps removed for readability -root@klk-wiis-050029:~ # tail -f /var/log/lora.log -lorad[20071]: <6> Received downlink message -lorad[20071]: <6> Sent downlink message -lorafwd[6973]: <6> Received uplink message: transmission event (000093C7 / 00000000), status "Transmitted" -lorafwd[6973]: <6> Downlink message (93C7) acknowledged -lorafwd[6973]: <6> Heartbeat (B0A6) sent -lorafwd[6973]: <6> Heartbeat (B0A6) acknowledged in 1.4919 ms -lorafwd[6973]: <6> Received uplink message: -lorafwd[6973]: <6> | lora uplink (6D700004), payload 23 B, channel 903.3 MHz, crc ok, bw 125 kHz, sf 10, cr 4/5 -lorafwd[6973]: <6> | Join Request, JoinEUI 0000000000000000, DevEUI 7076FF006A03004E, DevNonce 41214 -lorafwd[6973]: <6> | - radio (00000005) -lorafwd[6973]: <6> | - demodulator counter 21645692, TAI time 2021-04-20T18:36:02.146512Z, rssi -65 dB, snr 15 dB -lorafwd[6973]: <6> | - localization encrypted 7DB2593A662F37578CA8C7439523E199, rssi -65 dB, frequency offset 2295 Hz, version 1 -lorafwd[6973]: <6> Uplink message (43A6) sent -lorad[20071]: <6> Sent 1 uplink message -lorafwd[6973]: <6> Uplink message (43A6) acknowledged in 1.0356 ms -``` - -Here we can confirm: - -* that the packet forwarder communicates well with the Helium light gateway because all the heartbeats / uplinks are acknowledged in a millisecond -* that the radio is well configured because it received an uplink message (Join Request) at 903.3MHz, -65dBm RSSI and 15dB SNR (device was close) diff --git a/docs/mine-hnt/data-only-guides/rak-concentrators.mdx b/docs/mine-hnt/data-only-guides/rak-concentrators.mdx deleted file mode 100644 index b1fb383ab..000000000 --- a/docs/mine-hnt/data-only-guides/rak-concentrators.mdx +++ /dev/null @@ -1,389 +0,0 @@ ---- -id: rak-concentrators -title: Data Only Hotspot Setup with RAK Concentrator + Raspberry Pi -sidebar_label: RAK Concentrators (RAK2245/RAK2247/RAK2287) + Raspberry Pi -slug: /mine-hnt/data-only-guides/rak-concentrators ---- -# Data Only Hotspot Setup with RAK Concentrator + Raspberry Pi - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -A Data Only Hotspot is a variation of Hotspots that can participate on the -Helium Network by transferring data from the end devices (LoRaWAN nodes), they -are eligible for Network Data Transfer Rewards but not Proof of Coverage -Rewards. - -This guide covers all the steps needed to set up a Data Only Hotspot using a -WisLink RAK LPWAN concentrator module and a Raspberry Pi, you will find more -details about which models/references are supported in the requirements section. -This configuration can be achieved by installing the ***helium_gateway*** -service available on the [gateway-rs](https://github.com/helium/gateway-rs) -repository. - -:::warning -Data Only Hotspots cannot earn $HNT, at least for now, and after milestone 2 -they will earn $HNT only for Device Packet Transfer. Remember to keep an eye on -[Light Hotspots - BETA](/mine-hnt/light-hotspots) -and the **#gateway-development** channel on the -[Helium Discord Server](https://discord.gg/helium) to check how the development -process evolves. -::: - -### Video Guide for Setup - -This Hands on with RAKstars session follows the step-by-step provided -across this guide. - -[![Link to YouTube tutorial explaining packet forwarder setup.](https://img.youtube.com/vi/Eyt4bbW_9yw/0.jpg)](https://www.youtube.com/watch?v=Eyt4bbW_9yw&t=2024s) - -## Requirements - -- Raspberry Pi, multiple families are supported, however not all the models have -been tested yet, so it's highly recommended to follow this guide with a model of -the families Pi 3 or Pi 4. - -- The concentrator module and the proper Pi HAT to interface it with the -Raspberry Pi. The following table contains the links to the detailed information -available at the RAK store. - -| WisLink LPWAN Concentrator | Raspberry Pi HAT | -| ----------------------------- | :------------------------: | -| [RAK2287] | [RAK2287 Pi HAT] | -| [RAK2247] | [RAK2247 Pi HAT] | -| [RAK2245] | The linked reference is a Raspberry Pi
form factor module! | - -[RAK2287]: https://store.rakwireless.com/collections/wislink-lpwan/products/rak2287-lpwan-gateway-concentrator-module -[RAK2247]: https://store.rakwireless.com/collections/wislink-lpwan/products/rak2247-lpwan-gateway-concentrator-module -[RAK2245]: https://store.rakwireless.com/collections/wislink-lpwan/products/rak2245-pi-hat - -[RAK2287 Pi HAT]: https://store.rakwireless.com/products/rak2287-pi-hat -[RAK2247 Pi HAT]: https://store.rakwireless.com/products/rak2247-pi-hat - -:::important -To use the concentrator module with a Raspberry Pi HAT, you must make sure to -order the variation with the SPI interface. -::: - -Let's get started! - -## Packet forwarder preparation - -To get started you must set up the packet forwarder and get some helpful -configuration tools used across this guide. - -#### Option 1 - -You can follow this -[installation procedure](https://github.com/RAKWireless/rak_common_for_gateway#installation-procedure) -if you are already familiar with the Raspberry Pi, and the RAK concentrator -modules. Furthermore, it's highly recommended to start from a fresh -[Raspbian Buster Lite image](https://www.raspberrypi.org/software/operating-systems/) -(now called'Raspberry Pi OS Lite'). - -#### Option 2 - -You can also follow the Quick Start Guide for your concentrator on the -[RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisLink/#wislink-lpwan). - -- [RAK2287] -- [RAK2247] -- [RAK2245] - -[RAK2287]: https://docs.rakwireless.com/Product-Categories/WisLink/RAK2287/Quickstart/ -[RAK2247]: https://docs.rakwireless.com/Product-Categories/WisLink/RAK2247/Quickstart/ -[RAK2245]: https://docs.rakwireless.com/Product-Categories/WisLink/RAK2245-Pi-HAT/Quickstart/ - -### Select the region plan - -Enter the gateway configuration interface by using the following command. -``` -sudo gateway-config -``` - -Select the *Setup RAK Gateway Channel Plan* option, then *Server is TTN*, and in -the last step choose the proper plan according to your country. For instance, -the image shows the option to select US915. To finish, press OK. - - - -### Verify if the packet forwarder is running - -When the LoRa packet forwarder is running as a service, some log messages are -recorded in the syslog. To inspect the logs, run the following command: -``` -sudo tail -f /var/log/syslog | grep ttn-gateway -``` - -The log output should show something similar to: -``` -rak-gateway ttn-gateway[1886]: JSON up: {"stat":{"time":"2021-07-21 16:25:00 GMT","rxnb":0,"rxok":0,"rxfw":0,"ackr":0.0,"dwnb":0,"txnb":0,"temp":0.0}} -rak-gateway ttn-gateway[1886]: INFO: [down] PULL_ACK received in 142 ms -rak-gateway ttn-gateway[1886]: INFO: [down] PULL_ACK received in 142 ms -rak-gateway ttn-gateway[1886]: INFO: [down] PULL_ACK received in 142 ms -rak-gateway ttn-gateway[1886]: ##### 2021-07-21 16:25:30 GMT ##### -rak-gateway ttn-gateway[1886]: ### [UPSTREAM] ### -rak-gateway ttn-gateway[1886]: # RF packets received by concentrator: 0 -rak-gateway ttn-gateway[1886]: # CRC_OK: 0.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00% -rak-gateway ttn-gateway[1886]: # RF packets forwarded: 0 (0 bytes) -rak-gateway ttn-gateway[1886]: # PUSH_DATA datagrams sent: 1 (122 bytes) -rak-gateway ttn-gateway[1886]: # PUSH_DATA acknowledged: 0.00% -rak-gateway ttn-gateway[1886]: ### [DOWNSTREAM] ### -rak-gateway ttn-gateway[1886]: # PULL_DATA sent: 3 (100.00% acknowledged) -rak-gateway ttn-gateway[1886]: # PULL_RESP(onse) datagrams received: 0 (0 bytes) -rak-gateway ttn-gateway[1886]: # RF packets sent to concentrator: 0 (0 bytes) -rak-gateway ttn-gateway[1886]: # TX errors: 0 -rak-gateway ttn-gateway[1886]: ### SX1302 Status ### -rak-gateway ttn-gateway[1886]: # SX1302 counter (INST): 210904434 -rak-gateway ttn-gateway[1886]: # SX1302 counter (PPS): 0 -rak-gateway ttn-gateway[1886]: # BEACON queued: 0 -rak-gateway ttn-gateway[1886]: # BEACON sent so far: 0 -rak-gateway ttn-gateway[1886]: # BEACON rejected: 0 -``` - -:::note -`ttn-gateway` is just the name for the LoRa packet forwarder service in the -configuration for these RAK concentrators; this is like a "legacy name" that -doesn’t change when using different network servers. -::: - -### Edit the packet forwarder settings - -You will need to edit some basic options in the packet forwarder configuration -to forward the packets to the address and port the helium_gateway service is -listening to. - -Select the option *Edit packet-forwarder config* within the *gateway-config* -interface. This option will open the `global_conf.json` file using the nano -editor. Then, set the *server_address* to 127.0.0.1 and the *server ports* to -1680, as follows: - - - -Close the editor by pressing CTRL + X, press ENTER to save the file and restart -the packet forwarder to apply the changes by selecting the option *Restart -packet-forwarder* within the *gateway-config* interface. - -:::important -Every time a new region is selected using the *Setup RAK Gateway Channel Plan* -option, these settings are replaced with the default configuration. So, make -sure to keep this in mind if you modify the region later. -:::important - -## Helium Gateway service installation - -### Downloading the package - -Download the latest release from the -[gateway-rs](https://github.com/helium/gateway-rs) repository, and set the -`` according to -[the latest release](https://github.com/helium/gateway-rs/releases). You can -download it in any directory, for example `/tmp`. - -#### Option 1 - -Getting from the repo directly to the Raspberry Pi by running the following -commands. -``` -cd /tmp -wget https://github.com/helium/gateway-rs/releases/download//helium-gateway--raspi234.deb -``` - -#### Option 2 - -You can also download it to your computer and pass it to the Raspberry Pi -through the Secure Copy Protocol (SCP). - -``` -scp helium-gateway--raspi234.deb pi@:/tmp/ -``` - -### Installing the package - -Run the following command in the same directory you downloaded the package to -install the *helium_gateway* service in the operating system. - -``` -sudo dpkg -i helium-gateway--raspi234.deb -``` - -### Region configuration - -The default region of the *helium_gateway* service is US915, so you can continue -with the next section if you are using this one. Otherwise, you must set your -region frequency in `/etc/helium_gateway/settings.toml`. Add the following line -at the beginning of the file: - -``` -region = "" -``` -Possible values are: `US915 | EU868 | EU433 | CN470 | CN779 | AU915 | AS923_1 | -AS923_2 | AS923_3 | AS923_4 | KR920 | IN865`. - -For instance, if your region is EU868 the content in `settings.toml` must be. - -``` -region = "EU868" - -[log] -method = "syslog" -level = "info" -timestamp = false - -[update] -platform = "raspi234" -``` - -After updating the value, you need to restart the *helium_gateway* service to -apply the changes. -``` -sudo systemctl restart helium_gateway -``` - -## Verifying the installation - -### Inspecting the service logs - -The service starts after installation automatically. You can check the execution -logs by running the following command. - -``` -sudo tail -f /var/log/syslog | grep helium_gateway -``` - -The first log messages should look like these ones. -``` -rak-gateway helium_gateway[23658]: starting, module: gateway -rak-gateway helium_gateway[23658]: starting, module: router -rak-gateway helium_gateway[23658]: default router, module: router, uri: [http://54.193.165.228:8080/](http://54.193.165.228:8080/), public_key: -rak-gateway helium_gateway[23658]: selected gateway, module: router, uri: [http://18.216.219.228:8080/](http://18.216.219.228:8080/), public_key: -rak-gateway helium_gateway[23658]: starting, module: updater -rak-gateway helium_gateway[23658]: updated routing to height 930678, module: router -rak-gateway helium_gateway[23658]: no update found, module: updater -rak-gateway helium_gateway[23658]: ignoring raw packet PushData(Packet { random_token: 25968, gateway_mac: MacAddress { bytes: [228, 95, 1, 255, 254, 3, 45, 43] }, data: Data { rxpk: None, stat: Some(Stat { time: "2021-07-21 17:23:40 GMT", lati: None, long: None, alti: None, rxnb: 0, rxok: 0, rxfw: 0, ackr: Some(0.0), dwnb: 0, txnb: 0 }) } }), module: gateway -rak-gateway helium_gateway[23658]: ignoring raw packet PullData(Packet { random_token: 23178, gateway_mac: MacAddress { bytes: [228, 95, 1, 255, 254, 3, 45, 43] } }), module: gateway -rak-gateway helium_gateway[23658]: new packet forwarder client: MacAddress(E4:5F:01:FF:FE:03:2B), 127.0.0.1:39196, module: gateway -rak-gateway helium_gateway[23658]: ignoring raw packet PullData(Packet { random_token: 16226, gateway_mac: MacAddress { bytes: [228, 95, 1, 255, 254, 3, 45, 43] } }), module: gateway -rak-gateway helium_gateway[23658]: ignoring raw packet PullData(Packet { random_token: 32809, gateway_mac: MacAddress { bytes: [228, 95, 1, 255, 254, 3, 45, 43] } }), module: gateway -``` - -Whenever you need to restart the service you can use the command below. - -``` -sudo systemctl restart helium_gateway -``` - -### Getting some information about the hotspot - -Use the following command to get the public key address and animal name of your -hotspot. - -``` -helium_gateway key info -``` - -This command should give you an output like the following one. - -``` -{ - "address": , - "name": -} -``` - -#### Backup the gateway_key - -The `gateway_key.bin` file located at /etc/helium_gateway stores the information -used to identify the hotspot on the Helium Network. It's highly advised to -backup this file, especially if you need to recover it later after the -onboarding process. - -Using SCP could be an option to do the backup; that would be something like -this. - -``` -scp pi@:/etc/helium_gateway/gateway_key.bin -``` - -If you are using Windows, you can try a tool like -[WinSCP](https://winscp.net/eng/index.php) too. - -### Testing the packet transfer with an end device - -If you have an end device (LoRaWAN node), you can check if the hotspot can -transfer packets through the network. In other words, you can check if the -devices can send data to the Helium Console. The Helium Console is where you can -provision and manage the end devices, so the nodes need to be registered to -start using the network. - -#### Some comments and recommendations about the Helium Console - -At least for now, it is recommended to use the staging console instead of the -production one when we are transferring data through Data Only hotspots. You can -differentiate them for the URL they use, -[console.helium.com](https://console.helium.com/) for production, and -[staging-console.helium.wtf](https://staging-console.helium.wtf) for staging. -Don't be surprised if you find some differences between those console flavors, -basically staging is where the new features are tested before their rollout to -production. - -:::important -If the device you will use for testing is registered on the production console, -it's better to delete it from there to avoid any unexpected behavior. -::: - -To register your end device on the console, you can follow the steps described -on [Adding Devices](https://docs.helium.com/use-the-network/console/adding-devices/). - -#### Inspecting the packet transfer behavior - -Make sure your device is configured or flashed with the same keys you registered -on the console. Then, when your device is ready to transmit data, take a look at -the log messages again. - -``` -sudo tail -f /var/log/syslog | grep helium_gateway -``` - -Power up or reset your device, every time it tries to send a message, you should -see the information related to the packet received by the hotspot and where it -is being routed. - -``` -rak-gateway helium_gateway[23658]: ignoring raw packet PushData(Packet { random_token: 18563, gateway_mac: MacAddress { bytes: [228, 95, 1, 255, 254, 3, 45, 43] }, data: Data { rxpk: Some([V1(RxPkV1 { chan: 4, codr: _4_5, data: [64, 11, 8, 0, 72, 0, 25, 1, 2, 138, 20, 173, 187, 16, 164, 246, 161, 241, 78, 16, 36, 238, 117, 161, 188, 240], datr: DataRate(SF7, BW125), freq: 904.7, lsnr: 13.2, modu: LORA, rfch: 1, rssi: -20, rssis: Some(-20), size: 26, stat: OK, tmst: 668364099 })]), stat: None } }), module: gateway -rak-gateway helium_gateway[23658]: routing packet to: http://54.193.165.228:8080/, module: router -``` - -If you are able to see this kind of logs your hotspot is working like a charm! -The logs will record more information according to the router/console state. - -Now, you should start to see some events on the console. Sometimes, it could -take some minutes before you start to see any activity; wait for a bit and reset -your device if it's needed. - - - -As a final check, you can compare if the Hotspot Name matches the one you -obtained before. It could be different if there are more hotspots providing -coverage around you. In that case, you can explore the *Multiple Packets* -configuration to purchase more packets when several hotspots hear the device. - -## What's next? - -At this point, your Data Only Hotspot is ready to be added to the blockchain! -You can find more information about that process -[here](/mine-hnt/data-only-hotspots#pre-requisites). diff --git a/docs/mine-hnt/data-only-hotspots.mdx b/docs/mine-hnt/data-only-hotspots.mdx deleted file mode 100644 index 5d517bffd..000000000 --- a/docs/mine-hnt/data-only-hotspots.mdx +++ /dev/null @@ -1,148 +0,0 @@ ---- -id: data-only-hotspots -title: Data Only Hotspots -sidebar_label: Data Only Hotspots -slug: /mine-hnt/data-only-hotspots ---- - -# Data Only Hotspots - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - -Data Only Hotspots are eligible for **Network Data Transfer Rewards** but not -**Proof of Coverage Rewards**. - -Since Data Only Hotspots do not earn Proof-of-Coverage rewards, they may be -permissionlessly added to the blockchain. Once added to the blockchain and -with location asserted, they will earn $HNT when forwarding network data. - -| Rewards Type | Data Only Hotspots | Full & Light Hotspots | -| :--------------------------- | :----------------- |:------------- | -| Network Data Forwarding | YES | YES | -| Proof of Coverage | NO | YES | - -# Setup a Data Only Hotspot - -## Transactions & Cost - -Every Hotspot on the blockchain goes through two transactions: -* **add hotspot**: links the Hotspot's key (`swarm_key`) of a Hotspot to a -user's wallet -* **assert location**: provides GPS location, elevation (in meters), and dBi antenna -output for the Hotspot - -The fee schedule is as follows: -* **add data only hotspot**: 1000000 DC ($10) -* **assert location**: 500000 DC ($5) - -:::info -Data Credits in your Helium Console organization cannot be used to pay blockchain onboarding and assert location fees for Hotspots. To onboard a Hotspot, you'll need to burn HNT for Data Credits to the wallet that owns the Hotspot. -::: - -## Pre-requisites - -You should [setup a packet forwarder](/use-the-network/setup-a-packet-forwarder) -with the [light hotspot client](/mine-hnt/light-hotspots). - -In addition, you should setup a [CLI wallet](/wallets/cli-wallet) as this -is currently the only wallet that supports Data Only Hotspots. - -**Note**: you can import a mobile wallet to the CLI. -**Another note**: you should __not__ install the CLI on your gateway - -## Add Hotspot - -From a terminal on the device where the Light Hotspot client is installed, -you need to generate the `add hotspot` transaction. - -``` -./helium_gateway add --owner WALLET_ADDRESS --payer WALLET_ADDRESS --mode dataonly -``` - -The output is a JSON object: - -``` -{ - "address": "11TL62V8NYvSTXmV5CZCjaucskvNR1Fdar1Pg4Hzmzk5tk2JBac", - "fee": 65000, - "mode": "dataonly", - "owner": "14GWyFj9FjLHzoN3aX7Tq7PL6fEg4dfWPY8CrK8b9S5ZrcKDz6S", - "payer": "14GWyFj9FjLHzoN3aX7Tq7PL6fEg4dfWPY8CrK8b9S5ZrcKDz6S", - "staking fee": 1000000, - "txn": "CrkBCiEBrlImpYLbJ0z0hw5b4g9isRyPrgbXs9X+RrJ4pJJc9MkSIQA7yIy7F+9oPYCTmDz+v782GMJ4AC+jM+VfjvUgAHflWSJGMEQCIGfugfLkXv23vJcfwPYjLlMyzYhKp+Rg8B2YKwnsDHaUAiASkdxUO4fdS33D7vyid8Tulizo9SLEL1lduyvda9YVRCohAa5SJqWC2ydM9IcOW+IPYrEcj64G17PV/kayeKSSXPTJOMCEPUDo+wM=" -} -``` - -The `txn` field needs to be used as the input to the wallet command -`helium-wallet hotspot add`. For example: - -``` -helium-wallet hotspots add CrkBCiEBrlImpYLbJ0z0hw5b4g9isRyPrgbXs9X+RrJ4pJJc9MkSIQA7yIy7F+9oPYCTmDz+v782GMJ4AC+jM+VfjvUgAHflWSJGMEQCIGfugfLkXv23vJcfwPYjLlMyzYhKp+Rg8B2YKwnsDHaUAiASkdxUO4fdS33D7vyid8Tulizo9SLEL1lduyvda9YVRCohAa5SJqWC2ydM9IcOW+IPYrEcj64G17PV/kayeKSSXPTJOMCEPUDo+wM= -``` - -After you verify the transaction, append the command with `--commit` -to submit it to the API. Note that you need sufficient funds to cover -both the transaction cost (65000 DC) and the `staking_fee` (1000000 DC). -Thanks to the ["implicit burn" mechanism](/blockchain/transaction-fees/#transaction-fees-and-implicit-burn), -available HNT will be used to cover the transaction if you have -insufficient DCs. - -You can track the transaction progress by using the -transaction hash at the following endpoint: `https://api.helium.io/v1/pending_transactions/TXN_HASH` - -Once the transaction clears, you're done linking the Hotspot with your -wallet. - -:::warning -At this point, you will want to be certain that you've backed up the -data only hotspot's keypair. Its location can be customized in the client's -`settings.toml`, but by default, it's located at -`/etc/helium_gateway/gateway_key.bin` -::: - -## Assert Hotspot - -To assert the Hotspot use `helium-wallet hotspots assert` -``` -helium-wallet hotspots assert --gateway DATA_ONLY_HOTSPOT_PUBKEY --lat=37.7806295 --lon=-122.4008481 --mode dataonly -``` - -The `DATA_ONLY_HOTSPOT_PUBKEY` in the example from the previous section -would be `11TL62V8NYvSTXmV5CZCjaucskvNR1Fdar1Pg4Hzmzk5tk2JBac`. - -`--elevation` and `--gain` can be also set. Use `helium-wallet hotspots assert --help` for more info. - -After you verify the transaction, append the command with `--commit` -to submit it to the API. Note that you need sufficient funds to cover -both the transaction cost (65000 DC) and the `staking_fee` (500000 DC). -Thanks to the ["implicit burn" mechanism](/blockchain/transaction-fees/#transaction-fees-and-implicit-burn), -available HNT will be used to cover the transaction if you have -insufficient DCs. - -You can track the transaction progress by using the -transaction hash at the following endpoint: `https://api.helium.io/v1/pending_transactions/TXN_HASH` - -Once the transaction clears, your Data Only Hotspot is ready to start -earning for data transfered! - -## Data-Only Hotspot Setup Guides - -- [Dragino LPS80/DLOS8](/mine-hnt/data-only-guides/dragino) - - Draginos will only mine HNT as a Data Only Hotspot -- [Kerlink gateways](/mine-hnt/data-only-guides/kerlink) - - Kerlink gateways will only mine HNT as Data Only Hotspot unless it is - specified as a Helium-Compatible Kerlink Miner. -- [RAK Concentrator (RAK2245/RAK2247/RAK2287) + Raspberry Pi 2, 3, or 4](/mine-hnt/data-only-guides/rak-concentrators) - - This setup will only mine HNT as a Data Only Hotspot. -- [Balena Data Only Hotspot running Raspberry Pi 0, 2, 3 or 4 with RAK Concentrator (RAK2287)](/mine-hnt/data-only-guides/balena-data-only-hotspot) - - This setup based on Nebra will only mine HNT as a Data Only Hotspot, when possible. -- [Dragino PG1301 + Raspberry Pi 4](/mine-hnt/data-only-guides/dragino-pg1301) - - This setup based on the Dragino PG1301 Concentrator will only mine HNT as a Data Only Hotspot. - -:::info - -Gateways running a Packet Forwarder and Miner is not considered a Light Hotspot -and will never earn HNT. - -::: diff --git a/docs/mine-hnt/full-hotspots/become-a-maker/basic-miner-operation.mdx b/docs/mine-hnt/full-hotspots/become-a-maker/basic-miner-operation.mdx deleted file mode 100644 index 4e599a70f..000000000 --- a/docs/mine-hnt/full-hotspots/become-a-maker/basic-miner-operation.mdx +++ /dev/null @@ -1,446 +0,0 @@ ---- -id: basic-miner-operation -sidebar_label: Basic Miner Operation -slug: /mine-hnt/full-hotspots/become-a-maker/basic-miner-operation ---- - -## Basic Miner Operation - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -As you can see below, the Miner is central in routing data across the Helium -Network. It is one of three pieces: - - - - -- Packet Forwarder: this is a utility that interacts with the radio front-end -and sends and receives raw radio packets with the Helium Miner -- Miner: the Helium Blockchain comes into the picture here; the Miner is -responsible for routing packets to the appropriate Router and entering into -micro-transactions brokered via libp2p -- Router: a Helium compatible LoRaWAN Network Server, basically; this component -is interested in receiving the packets relating to its devices and handles -downlink messages when appropriate - -In addition to packet routing, the Miner also participates in POC and submits -POC packets as witness events. When challenge, the Miner sends packets to the -packet forwarder for transmission. - -The Miner connects to other Miners over libp2p where, amongst other things, -it is gossiping and saving blocks, while maintaining a ledger of the blockchain. -Constantly syncing the blockchain and downloading blocks uses significant -bandwidth and CPU. - -In this guide, we will explain how to get a Docker image of the Helium Miner -running on Ubuntu 20.04 LTS, and finally some tips on how to interact with a -running Miner. - -When preparing the Miner for a Hotspot product, you will want to go a little -further and follow the steps outlined [here](/mine-hnt/full-hotspots/become-a-maker/docker-integration), -where you will learn how to integrate it with security modules and BLE. - -If you are interested in contributing to Miner development and code-review, -please visit -[the Miner's repository on Github](https://github.com/helium/miner). - -### Setting Up Ubuntu for Docker - -Ubuntu is a widely available Linux distribution. Notably, it has an easy-to-use -image available for Raspberry Pi 3 and 4, so we use it as an example system. -That being said, any ARM64 or AMD64 \(X86-64\) based OS that can run Docker is -suitable. - -For Raspberry Pi, we recommend running the latest -[64-bit RaspiOS](https://downloads.raspberrypi.org/raspios_arm64/images/) image. -We currently do not have Docker image support for 32-bit systems, so please -double-check that you're using a 64-bit image. Once you have followed the -instructions and are logged into the system, you are ready for the rest of this -guide. - -For most cloud service providers, launching an instance with Ubuntu 20.04 LTS -should be fairly straightforward. With AWS for example, create an EC2 instance -running Ubuntu 20.04. A t2.small will run the miner well once the initial -blockchain sync has completed. Once that's launched and you're connected, you -are ready for the rest of this guide. - -First, update the package manager registry: - -```text -sudo apt-get update -``` - -Then, install Docker: - -```text -sudo apt-get install docker.io -``` - -To avoid needing to user docker with `sudo` privileges, add your user to the -`docker` group, replacing $USER with your username: - -```text -sudo usermod -aG docker $USER -``` - -Log in and out of your account to apply these changes. You are now ready to use -Docker! - -### Port Forwarding - -Before launching the Miner, you will want to configure ports on your network to -forward two ports: - -- **44158/TCP**: the Miner communicates to other Miners over this port. The -networking logic knows how to get around a lack of forwarding here, but you -will get better performance by forwarding the port -- **1680/UDP**: the radio connects to the Miner over this port. You will not be -able to forward packets or participate in Proof of Coverage without this - -"Forwarding" on the second port is less relevant if you are running a radio -packet forwarder on the same system at the miner \(both on a Raspberry Pi, for -example\). But it is essential if you are running a Miner on the cloud for -example. - -For AWS, for example, you will want to configure the "Security Group" of your -EC2 as so: - - - -### Run a Docker Container - -Miner releases are available as amd64 and arm64 images on at -[quay.io](https://quay.io/repository/team-helium/miner?tab=tags). We do not -currently provide 32-bit support. - -**Note**: on amd64 systems, AVX support is required. Verify that it exists on -your host system: - -```text -grep avx /proc/cpuinfo -``` - -```text -grep avx2 /proc/cpuinfo -``` - -If nothing is returned from these commands, your host system does not have AVX -support and your Miner may not be stable. - -#### Start Container - -Before running the container for the first time, it is advisable to pick a -'system mount point\`, i.e. a directory in your host system; some long-term -miner data is stored there. This allows you to easily maintain your miner's -blockchain identity \(i.e. swarm keys\) and blockchain state through miner image -updates. - -If you are using a Linux system, you can just create a directory in your user's -home directory: - -```text -mkdir ~/miner_data -``` - -If you are using Ubuntu as user ubuntu, this path would now be -`/home/ubuntu/miner_data`. This will be used later. - -Now you can try the `run` command to start your container for the first time: - -```text -docker run -d --init \ ---ulimit nofile=64000:64000 \ ---env REGION_OVERRIDE=US915 \ ---restart always \ ---publish 1680:1680/udp \ ---publish 44158:44158/tcp \ ---name miner \ ---mount type=bind,source=/home/ubuntu/miner_data,target=/var/data \ -quay.io/team-helium/miner:miner-xxxNN_YYYY.MM.DD -``` - -Replace xxxNN with the architecture used, i.e. amd64 or arm64, and with the -release date of the image. - -The `-d` option runs in detached mode, which makes the command return or not; -you may want to omit if you have a daemon manager running the docker for you. - -The `-env REGION_OVERRIDE=US915` tells your miner that you are connecting to a -packet forwarder configured for the US915 region. You will want to change this -to your region i.e. -`US915 | EU868 | EU433 | CN470 | CN779 | AU915 | AS923 | KR920 | IN865` - -> Note: REGION_OVERRIDE may be completely omitted once your Miner has asserted -> location and is fully synced, but leaving it there \(as long as the region is -> properly configured\) is not harmful - -The `--restart always` option asks Docker to keep the image running, starting -the image on boot and restarting the image if it crashes. Depending on how you -installed Docker in your system, it'll start on boot. In the AWS AMI above, we -use systemd \(`systemctl status docker` to check\). - -The `--publish 1680:1680/udp` binds your system port 1680 to the container's -port 1680, where the Miner is hosting a packet forwarder UDP server; this is -necessary if you want to do any radio interactions with your miner. - -The `--name miner` names the container, which makes interacting with the docker -easier, but feel free to name the container whatever you want. - -The `--mount` with the parameters above will mount the container's `/var/data/` -directory to the systems directory `/home/ec2-user/miner_data`. - -### Configure AWS Instance for Sync - -Amazon EC2 instances have CPU usage credits that will easily be depleted during -the initial sync of the blockchain. To avoid having your instance throttled, you -can temporarily uncap your instance by setting CPU credit usage to unlimited. -Once your miner has reached full block height, a t2.small instance is sufficient -to keep your miner running. - -### Interact with the Miner within the Container - -You may want to interrogate the Miner or interact with it it as described in the -[using a miner section](/mine-hnt/build-a-packet-forwarder/#using-the-miner). -Docker's `exec` command enables this e.g. - -```text -docker exec miner miner info height -``` - -In other words, prepend `docker exec miner` to any of the commands documented in -the -[using a miner section](/mine-hnt/build-a-packet-forwarder/#using-the-miner)). -Or create an alias such as: `alias miner="docker exec miner miner"` - -### Updating the Docker Image - -From time to time, the Helium Miner is updated. Keep tabs on -[the releases here](https://github.com/helium/miner/releases). Depending on -whether you are running a miner for fun, to route packets, or to participate in -POC, keeping it updated may be more or less urgent. Each release tagged on the -Github will be on the quay repository. Simply remove the current image: - -```text -docker stop miner && docker rm miner -``` - -And start the container again as described above, but with the new release tag! -Thanks to the `--mount` option, the blockchain data and the miner keys are -preserved through updates. - -### Using the Miner - -These commands will assume you are running in Docker and they have the same -prefix to get you executing a command within the docker: `docker exec miner` . -If you want to make it easier, you can always create an an alias such as: -`alias miner="docker exec miner miner"`. - -#### Checking the Logs - -This is always helpful to get some idea of what's going on: - -```text -docker exec miner tail -F /var/data/log/console.log -``` - -Also, if you are particularly interested in radio traffic, it can be helpful to -filter for `lora` as so: - -```text -docker exec miner tail -f /var/data/log/console.log | grep lora -``` - -### Checking the P2P Network - -This is the first health check you can do to see how your Miner is doing. Is it -finding other Helium miners over libp2p properly? - -The Helium blockchain uses an Erlang implementation of -[libp2p](https://libp2p.io/). Because we expect Hotspot hardware to be installed -in a wide variety of networking environments -[erlang-libp2p](https://github.com/helium/erlang-libp2p) includes a number of -additions to the core specification that provides support for NAT detection, -proxying and relaying. - -The first order of business once the Miner is running is to see if you're -connected to any peers, whether your NAT type has been correctly identified, and -that you have some listen addresses: - -```text -docker exec miner miner peer book -s -``` - -You will see an output roughly like the following: - -```bash -+--------------------------------------------------------+------------------------------+------------+-----------+---------+------------+ -| address | name |listen_addrs|connections| nat |last_updated| -+--------------------------------------------------------+------------------------------+------------+-----------+---------+------------+ -|/p2p/11dwT67atkEe1Ru6xhDqPhSXKXmNhWf3ZHxX5S4SXhcdmhw3Y1t|{ok,"genuine-steel-crocodile"}| 2 | 4 |symmetric| 3.148s | -+--------------------------------------------------------+------------------------------+------------+-----------+---------+------------+ - -+----------------------------------------------------------------------------------------------------------------------------+ -| listen_addrs (prioritized) | -+----------------------------------------------------------------------------------------------------------------------------+ -|/p2p/11apmNb8phR7WXMx8Pm65ycjVY16rjWw3PvhSeMFkviWAUu9KRD/p2p-circuit/p2p/11dwT67atkEe1Ru6xhDqPhSXKXmNhWf3ZHxX5S4SXhcdmhw3Y1t| -| /ip4/192.168.3.6/tcp/36397 | -+----------------------------------------------------------------------------------------------------------------------------+ - -+--------------------------+-----------------------------+---------------------------------------------------------+------------------------------+ -| local | remote | p2p | name | -+--------------------------+-----------------------------+---------------------------------------------------------+------------------------------+ -|/ip4/192.168.3.6/tcp/36397|/ip4/104.248.122.141/tcp/2154|/p2p/112GZJvJ4yUc7wubREyBHZ4BVYkWxQdY849LC2GGmwAnv73i5Ufy|{ok,"atomic-parchment-snail"} | -|/ip4/192.168.3.6/tcp/36397| /ip4/73.15.36.201/tcp/13984 |/p2p/112MtP4Um2UXo8FtDHeme1U5A91M6Jj3TZ3i2XTJ9vNUMawqoPVW| {ok,"fancy-glossy-rat"} | -|/ip4/192.168.3.6/tcp/36397| /ip4/24.5.52.135/tcp/41103 |/p2p/11AUHAqBatgrs2v6j3j75UQ73NyEYZoH41CdJ56P1SzeqqYjZ4o | {ok,"skinny-fuchsia-mink"} | -|/ip4/192.168.3.6/tcp/46059| /ip4/34.222.64.221/tcp/2154 |/p2p/11LBadhdCmwHFnTzCTucn6aSPieDajw4ri3kpgAoikgnEA62Dc6 | {ok,"skinny-lilac-mustang"} | -+--------------------------+-----------------------------+---------------------------------------------------------+------------------------------+ -``` - -As long as you have an address listed in `listen_addrs` and some peers in the -table at the bottom, you're connected to the p2p network and good to go. - -If you are having trouble, try forwarding port `44158` to the miner. On AWS, -double check your security group settings. - -### Checking Block Height - -As long as a genesis block is loaded, this query will work and return height 1 -at least: - -```text -docker exec miner miner info height -``` - -If you are syncing, you should see something like this: - -```text -~$ miner info height -6889 280756 -``` - -The first number is the election epoch and the second number is the block height -of your miner. If you just launched an AMI instance, your Miner is been -disconnected, or you simply have a slow connection, you may be a few blocks -behind. To check, you can either check the mobile app, check -[the browser-based block explorer](https://network.helium.com/blocks), or run a -simple curl command to check in a Terminal: - -```text -~$ curl https://api.helium.io/v1/blocks/height -{"data":{"height":280756}} -``` - -### Backing Up Your Swarm Keys - -Periodically, we may release updates or you may want to migrate your miner from -one machine to another. The most important thing is that you maintain a copy of -your miner's private key, i.e. `swarm_key`. Fun tidbit: this is also how your -three-word name is generated. - -Assuming you've mounted the Docker image as detailed above, it is located at: - -```text -~/miner_data/miner/swarm_key -``` - -Another fun tidbit: for production hotspots sold by Helium, the swarm key is -stored inside of a secure element and is thus unable to be migrated \(or -compromised/accidentally lost unless physically damaged\). - -### Snapshots - -Snapshots are summaries of the current state of the blockchain. Since you don't -need every single block ever to sync with the blockchain, it's really just a -summary of the last few blocks and the account balance of every account on the -blockchain. - -You generally want to be careful who you accept snapshots from as they might -give you an incorrect state. However, we also store hashes of valid snapshots in -the blockchain. - -#### Chain-based - -You can query a running Miner to see what snapshots it (1) knows about and (2) -has a copy of: - -```text -$ miner snapshot list -Height 731521 -Hash <<129,14,18,225,133,83,34,24,205,69,10,10,84,42,129,207,42,186,18,28,192, - 157,187,76,109,233,4,108,198,197,111,176>> -Have true - -Height 730801 -Hash <<80,90,115,7,10,195,115,217,87,173,24,11,63,116,201,22,150,6,252,168,204, - 60,65,83,106,68,94,19,7,13,72,165>> -Have true -``` - -A Miner knows about a snapshot in two ways: it either syncs a block where the -snapshot hash and height have been saved, or the configuration file of the Miner -(`sys.config`) has the **blessed** height and hash written into it (ie: -`blessed_snapshot_block_height` and `blessed_snapshot_block_hash`). - -If you have a fully synced Miner, you can extract these values from -`snapshot list` and write them into the `sys.config` of another non-fully synced -Miner. Restart the Miner to reload the `sys.config` and it will be able to -"quick sync" to that snapshot. To make things go even faster, try manually -connecting your Miner to one of your Miners that has the snapshot. - -```text -miner peer connect /ip4/192.168.0.0.1/tcp/44158 -``` - -The only down-side of this approach is that snapshots happen at some rhythm -defined by the blockchain (currently 720 blocks). You can use the manual -approach to pass around arbitrary snapshots by hand. - -#### Manual - -You can also manually move a snapshot file around. To take a snapshot: - -```text -miner snapshot take /path/to/snapshot -``` - -Naming the snapshot something like `snap-XXXXXX`, where `XXXXXX` is the height -of the blockchain is a typical convention. Also, when using a Docker container, -it's usually a good idea to save the snapshot to `/var/data` so that you can -easily copy the snapshot out of the Docker and into the host system. - -Loading the snapshot is as follows: - -```text -miner snapshot load /path/to/snapshot -``` - -Sometimes the load command times out. If so, try to tail the logs and see if -blocks are being applied. It's working just fine! It just needs a moment to -finish loading the snapshot. - -## Connecting a Packet Forwarder to the Miner - -You're almost done. The last step after you have your Miner running is to -connect to it. - -With your favorite editor, open `global_conf.json` that lives in the packet -forwarder directory: - -```text -nano ~/sx1302_hal/lora_pkt_fwd/global_conf.json -``` - -You want to change the field "server_address" from "localhost" to the IP address -of the server, so in this case: - -You'll need to restart the packet forwarder for the configuration change to take -effect. - -To verify that things are working, you can follow the logs on your miner. eg: - -```text -docker exec miner tail -f /var/data/log/console.log | grep lora -``` - -At the very least, you should see PULL_DATA messages every few seconds. If so, -then you've done it! diff --git a/docs/mine-hnt/full-hotspots/become-a-maker/burn-hnt-to-maker-wallet.mdx b/docs/mine-hnt/full-hotspots/become-a-maker/burn-hnt-to-maker-wallet.mdx deleted file mode 100644 index 2e0560ee3..000000000 --- a/docs/mine-hnt/full-hotspots/become-a-maker/burn-hnt-to-maker-wallet.mdx +++ /dev/null @@ -1,84 +0,0 @@ ---- -id: burn-hnt-to-maker-wallet -sidebar_label: Burning HNT to Maker Wallet -slug: /mine-hnt/full-hotspots/become-a-maker/burn-hnt-to-maker-wallet ---- - -# Burning HNT to Your Maker Wallet - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Any [approved Hotspot Maker](/mine-hnt/hotspot-makers/approved-makers) is responsible for supplying Data Credits (DCs) to the onboarding server for Hotspots they sell. They do this by burning HNT to their -specific maker address. - -:::info - -A full list of approved maker wallet addresses [can be seen via this API](https://onboarding.dewi.org/api/v2/makers). - -::: - -## Maker Wallet Address Integration - -As an approved Maker, you will supply DeWi with the onboarding details for all the Hotspots you manufacture and distribute. In turn, the DeWi adds them to the onboarding server. When a Hotspot is onboarded by your end customer, the onboarding server knows to associate it with your Maker ID, and associated Maker Wallet address. If, when a Hotspot is onboarded, it's present in the onboarding server and you have ample Data Credits to pay the onboarding fees, the blockchain will add the Hotspot. And if you've [integrated your Hotspot in the Hotspot App onboarding flow](/mine-hnt/hotspot-makers/hotspot-integration-testing), the Wallet knows to use your approved Maker Wallet address. At this point, the Data Credits will be used for the transactions with your wallet address as the payer. - - -## Hotspot Data Credit Fees - -In order for any Hotspot to join the Helium Blockchain, its maker address must have sufficient Data Credits. A full list of [Helium blockchain data credit fees can be found here](/blockchain/transaction-fees). Hotspot Makers need to account for at least `5,135,000` total Data Credits per Hotspot. Specifically, for each Hotspot, a Maker must supply: - -* `4,000,000` Data Credits for the **Add Hotspot** transaction. This is a one-time fee. -* `65,000` Data Credits for the transaction fee to execute the **Add Hotspot** transaction. -* `1,000,000` Data Credits for the **Assert Location** transaction. Each Hotspot Maker is required to supply at least one **Assert Location* for their Hotspots. -* `70,000` Data Credits for the transaction fee to execute the **Assert Location** transaction. - -As a Maker, if you only supply the one-time **Add Hotspot** fee and one **Assert Location** fee, you'll supply `5,135,000` total Data Credits per Hotspot. Add `1,070,000` Data Credits for each additional **Assert Location** fee you wish to supply. - -:::warning - -If your wallet address does not have enough DCs to pay the required Hotspot transaction fees, these transactions will fail. - -::: - - -## Maker Integration Test Wallet Address - -During the course of your testing, you can use the Maker Integration Test wallet address created by the DeWi. This wallet does not contain any Data Credits so onboarding transactions will fail but it allows you to smoke test the onboarding steps. Here is that address: - -[https://explorer.helium.com/accounts/138LbePH4r7hWPuTnK6HXVJ8ATM2QU71iVHzLTup1UbnPDvbxmr](https://explorer.helium.com/accounts/138LbePH4r7hWPuTnK6HXVJ8ATM2QU71iVHzLTup1UbnPDvbxmr) - - -## Burning HNT to Supply Data Credits - -:::warning - -Once you burn HNT to a specified wallet address, they are lost and gone forever. The resulting DCs are non-transferable. Please double-check any wallet address before executing any HNT burn. -::: - - -The actual mechanism for burning HNT to DCs is via an on-chain burn transaction [using the Helium Blockchain Wallet CLI](https://github.com/helium/helium-wallet-rs). Follow the instructions to download and install the CLI Wallet on your local machine. Once installed, you'll use the `burn` command to supply data credits to your specified maker wallet. - -You can run `$ helium-wallet burn -h` for a full print-out of what options are available, but here's the basic command structure: - -```shell -$ helium-wallet burn --amount --payee --commit -``` - -* `amount` is the amount of HNT you wish to burn to DCs -* `payee` is the target wallet address to which you wish to burn DCs - -You can also supply a `memo` input but it's not required. - -So, for example, if you want to burn `10,000` HNT to the Maker Test Integration address, the full command would look like this: - - -```shell -$ helium-wallet burn --amount 10,000 --payee 138LbePH4r7hWPuTnK6HXVJ8ATM2QU71iVHzLTup1UbnPDvbxmr --commit -``` - -When this runs, you'll be asked to supply the passphrase for your HNT wallet. If this is correct, and you have enough HNT to pay for the specified burn amount, it will succeed. - -:::warning - -Do not send HNT into your Maker accounts. Doing so may result in lost funds. All Makers are required to pay for the onboarding fees for their customers. - -::: \ No newline at end of file diff --git a/docs/mine-hnt/full-hotspots/become-a-maker/docker-integration.mdx b/docs/mine-hnt/full-hotspots/become-a-maker/docker-integration.mdx deleted file mode 100644 index 6319c4a33..000000000 --- a/docs/mine-hnt/full-hotspots/become-a-maker/docker-integration.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -id: docker-integration -sidebar_label: Docker Integration -slug: /mine-hnt/full-hotspots/become-a-maker/docker-integration ---- - -# Docker Integration - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -We generally recommend that Makers use Docker for running Miner. This allows you -to pull images from -[Helium's Quay repository](https://quay.io/repository/team-helium/miner?tab=tags) -and avoids the need to maintain your own Miner build & release pipeline along -with all of Miner's system dependencies, such as Erlang. - -If you prefer, you _can_ -[build Miner from source](https://github.com/helium/miner), but this guide is -for those that are running the Docker image. - -## The Docker Release Process - -Before we get into the details, it's useful to understand how the Quay releases -integrate with the Miner release flow. - -Helium maintains the [Miner repository](https://github.com/helium/miner) and -maintains proprietary firmware images for the original Helium Hotspots -(Raspberry Pi 3B+ and 4 based). When we have a release candidate, you will see a -tag with the date of the release candidate. This usually means that we are -testing a release candidate. This testing process has many stages, but if and -when a release passes, it will graduate to "General Availability" and be -re-tagged with the `_GA` suffix. This triggers an automatic build of the Docker -images which get pushed to Quay when complete. - -In addition, a "Blockchain Release" will typically be posted on -[engineering.helium.com](https://engineering.helium.com/). - -As a blockchain is decentralized in its nature, we are careful not to do -breaking changes that require immediate and synchronized updates of the Miner. - -When breaking changes need to be deployed, they tend to be gated by a "chain -variable" (aka `chainvar`) which signals to the Miners that the new behavior is -to take affect. Only when this chain variable is activated do stale Miners stop -working. - -:::info - -It is highly recommended that Makers automate the process by checking the Quay -repository for `_GA` tags every half hour, and plan on deploying at least once a -day in case there are emergency releases. - -::: - -## Initial Testing of the Docker on Your Host System - -The Docker image is tailored to be able to run very simply at first, but will -generally require additional customization to integrate well with your host -system. - -Start by following -[these instructions](/mine-hnt/full-hotspots/become-a-maker/basic-miner-operation). -If that ends up being no problem, then you're doing great! The extra sections in -this guide will discuss things you should do when preparing a production system -for the Miner container. - -## Omit REGION_OVERRIDE - -Setting `REGION_OVERRIDE` is only useful if you want a hotspot to forward -packets without being asserted on-chain (ie: they will not earn HNT). In a -production system, the override can be detrimental as it will lock the device -into that specific region. Instead, if you omit the override, the Miner watches -the blockchain to figure out which region it has been asserted in. - -In fact, in Helium's own firwmare image, we actually use this information to -also determine which packet forwarder configuration to select, so our startup -routine for packet forwarder will actually block as it requests region from -miner - -```bash -# Wait until miner knows the regulatory region. -while ! /opt/miner/bin/miner info region > /dev/null 2>&1; do - sleep 1 -done -``` - -This allows you to ship a single firmware image that will work in any region. -When the user has asserted the Miner and its location to the blockchain, you can -get the appropriate region from Miner and use the appropriate configuration for -a packet forwarder. - -:::info -If you need examples of our regional packet forwarder configurations, please see -[here](https://github.com/helium/sx1302_hal/tree/helium/hotspot/packet_forwarder). -::: - -:::warning -If you are using our packet forwarder, be sure to customize the `rssi_offset` -field for your particular concentrator design. Misconfiguring this value may -result in decreased Proof-of-Coverage performance for your customers. -::: - -## Enable ECC608 and D-Bus - -Miner has -[a configuration file](https://github.com/helium/miner/blob/master/config/sys.config) -which exposes many useful variables. For example, Helium uses this to configure -the -"[blessed snapshot](https://github.com/helium/miner/blob/master/config/sys.config#L37)" -in our firmware which enables Miners to quickly sync their ledger to the height -of the most recent snapshots. You benefit from this automatically when you use -our Docker files. - -However, our Docker images also disable the ECC608 and dbus by default. If you -are using the ECC608 and use the BLE for setting up the hotspots, you need to -re-anble them. - -The default Docker overrides are seen -[here](https://github.com/helium/miner/blob/master/config/docker.config). We do -a few things that make the image more portable, such as disabling D-bus -(`{use_ebus, false}`) and the ECC608 (`{key, undefined}`). - -As a Hotspot vendor using Docker, you will want to revert these `sys.config` -overrides by simply deleting them. You can do this in a way that persists over -Docker updates by maintaining your own configuration file outside of the Docker -(similar to what we do with `/var/data/`). - -For example, you can create a directory called "overlay" and copy -[the default override](https://github.com/helium/miner/blob/master/config/docker.config). -You now you will have `~/overlay/docker.config`. - -Delete the D-bus line (`{use_ebus, false}`) and the ECC608 line -(`{key, undefined}`) and the behavior will revert to that in -[the main configuration file](https://github.com/helium/miner/blob/master/config/sys.config) -where these are enabled. - -You will also want to add a few arguments to your Docker run command which -create the extra mount point for the config, connect the i2c-device to the -Docker container, and connect D-bus to the Docker container. For example: - -```bash - --device /dev/i2c-1 \ - --net host \ - --privileged \ - -v /var/run/dbus:/var/run/dbus \ - --mount type=bind,source=/home/ubuntu/overlay/docker.config,target=/config/sys.config -``` - -## Define the DBus Config - -You'll want to install -[the Miner's DBus config](https://github.com/helium/miner/blob/master/config/com.helium.Miner.conf), -typically at: `/etc/dbus-1/system.d/com.helium.Miner.conf` - -## Setting the ulimit - -Ensure the ulimit system is set to a *minimum* of `64000`; anything lower will be insufficient but more is welcome. - -You'll want to include the Docker run argument `--ulimit nofile=64000:64000`. - -**In addition**, you'll need to verify that your Linux system allows for such file limits. For example, - -```bash -$ ulimit -Sn -64000 -``` - -If the host system does not allow for 64,000 file handles, then the `docker run` argument will not be sufficient. - diff --git a/docs/mine-hnt/full-hotspots/become-a-maker/hotspot-ble-services.mdx b/docs/mine-hnt/full-hotspots/become-a-maker/hotspot-ble-services.mdx deleted file mode 100644 index dcf297252..000000000 --- a/docs/mine-hnt/full-hotspots/become-a-maker/hotspot-ble-services.mdx +++ /dev/null @@ -1,188 +0,0 @@ ---- -id: hotspot-ble-services -sidebar_label: Hotspot BLE Services -slug: /mine-hnt/full-hotspots/become-a-maker/hotspot-ble-services ---- - -# Hotspot BLE Services - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -The Helium Hotspot provides a Bluetooth Low Energy\(BLE\) interface for users to -configure several aspects of the device. The BLE services and advertisement data -are provided below. - -It is generally recommended that the user first press a button on the Hotspot to -activate the BLE advertising. Alternatively, enabling BLE for ~5 minutes after -power up is acceptable. Maintaining BLE advertising for a prolonged period of time -is not recommended. - -Hotspot Makers make develop their own BLE service which complies with the -specification herein. In addition, they may leverage Helium's open-source -example: [`gateway-config`](https://github.com/helium/gateway-config) - -:::info - -Data may need to be serialized or de-serialized to -[Protocol Buffers](https://developers.google.com/protocol-buffers) depending on -the BLE Characteristic. The Protocol Buffers message definitions are listed -below. For data that are listed as ASCII string, they can be directly -interpreted as ASCII strings. - -::: - -## **Advertisement** - -`Device Name: Helium Hotspot ####` - -`UUID: 0fda92b2-44a2-4af2-84f5-fa682baa2b8d` - -## Device Information - Service - -`UUID: 180A` - -### Manufacture Name String - Characteristic - -`UUID: 2A29` - -`Data Type: ASCII String` - -`Example Value: "Helium"` - -### Serial Number String - Characteristic - -`UUID: 2A25` - -`Data Type: ASCII String` - -`Example Value: "6081F989E7BF"` - -### Firmware Revision String - Characteristic - -`UUID: 2A26` - -`Data Type: ASCII String` - -`Example Value: "2020.02.18.1"` - -## Custom Service - Service - -`UUID: 0fda92b2-44a2-4af2-84f5-fa682baa2b8d` - -### OnboardingKey - Characteristic - -`UUID: d083b2bd-be16-4600-b397-61512ca2f5ad` - -`Data Type: ASCII String` - -`Example Value: "11TqqVzycXK5k49bXbmcUcSne91krq7v3VSQCfDXr"` - -### PublicKey - Characteristic - -`UUID: 0a852c59-50d3-4492-bfd3-22fe58a24f01` - -`Data Type: ASCII String` - -`Example Value: "117ei8D1Bk2kYqWNjSFuLgg3BrtTNSTi2tt14LRUFgt"` - -### WiFiServices - Characteristic - -`UUID: d7515033-7e7b-45be-803f-c8737b171a29` - -`Data Type: Protocol Buffers` - -```text -message wifi_services_v1 { - repeated string services = 1; -} -``` - -### Diagnostics - Characteristic - -`UUID: b833d34f-d871-422c-bf9e-8e6ec117d57e` - -`Data Type: Protocol Buffers` - -```text -message diagnostics_v1 { - mapdiagnostics = 1; -} -``` - -### No Descriptor Name\(WiFi MAC Address\) - Characteristic - -`UUID: 9c4314f2-8a0c-45fd-a58d-d4a7e64c3a57` - -`Data Type: ASCII String` - -`Example Value: "6081F989E7BF"` - -### Lights - Characteristic - -`UUID: 180efdef-7579-4b4a-b2df-72733b7fa2fe` - -`Data Type: ASCII String` - -`Example Value: "on"` - -### WiFiSSID - Characteristic - -`UUID: 7731de63-bc6a-4100-8ab1-89b2356b038b` - -`Data Type: ASCII String` - -`Example Value: ""` - -### AssertLocation - Characteristic - -`UUID: d435f5de-01a4-4e7d-84ba-dfd347f60275` - -`Data Type: Protocol Buffers` - -```text -message assert_loc_v1 { - float lat = 1; - float lon = 2; - string owner = 3; - uint64 nonce = 4; - uint64 fee = 5; - uint64 amount = 6; - string payer = 7; -} -``` - -### AddGateway - Characteristic - -`UUID: df3b16ca-c985-4da2-a6d2-9b9b9abdb858` - -`Data Type: Protocol Buffers` - -```text -message add_gateway_v1 { - string owner = 1; - uint64 amount = 2; - uint64 fee = 3; - string payer = 4; -} -``` - -### WiFiConnect - Characteristic - -`UUID: 398168aa-0111-4ec0-b1fa-171671270608` - -`Data Type: Protocol Buffers` - -```text -message wifi_connect_v1 { - string service = 1; - string password = 2; -} -``` - -### EthernetOnline - Characteristic - -`UUID: e5866bd6-0288-4476-98ca-ef7da6b4d289` - -`Data Type: ASCII String` - -`Example Value: "true" or "false"` diff --git a/docs/mine-hnt/full-hotspots/become-a-maker/hotspot-integration-testing.mdx b/docs/mine-hnt/full-hotspots/become-a-maker/hotspot-integration-testing.mdx deleted file mode 100644 index 9714b2698..000000000 --- a/docs/mine-hnt/full-hotspots/become-a-maker/hotspot-integration-testing.mdx +++ /dev/null @@ -1,260 +0,0 @@ ---- -id: hotspot-integration-testing -sidebar_label: Hotspot Integration Testing -slug: /mine-hnt/full-hotspots/become-a-maker/hotspot-integration-testing ---- - -# Hotspot Integration Testing - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -This guide is intended for companies that have been approved via HIP19 and successfully passed the hardware audit stage. - -(New) By March 1, 2022, all Makers and prospective makers are required to develop, and make available to their customers, their own mobile app. This allows Makers to create new and differentiating features for their customers and Hotspots. Examples can include detailed diagnostics reports, notifications of status changes, peer address reporting, Proof-of-Coverage tips and improvements, and better troubleshooting and customer support access. - -**Makers actively going through the HIP-19 process can continue to use the Helium app but are expected to develop their own Maker app by March 1, 2022.** - -To make the transition easier, a [Maker Starter App](https://github.com/helium/maker-starter-app) is available for anyone to fork and modify. - -The Helium app will continue to support HNT / Wallet functions, such as sending payments, receiving payments, and burn HNT. - -## Starter App features -* Supports deeplinking and transaction signing through the Helium app - * Simply put: users of the Maker app will not need to sign in with their 12 words, as long as they are signed in with the Helium app -* Hotspot onboarding with Bluetooth -* Hotspot onboarding with QR Code -* Setting Wi-Fi credentials for Hotspots onboarded with Bluetooth -* Assert Location (Bluetooth and QR Code) -* Generating any required transactions for the Helium app to sign (`add_gateway`, `assert_location`, `transfer_hotspot_v2`) -* Submit signed transactions to the blockchain -* A settings menu with PIN code, language selector, and the linked Helium address displayed -* Light and Dark mode - -For optimal user experience, we recommend Hotspots be equipped with compatible Bluetooth and Wi-Fi functionality. This allows a seamless onboarding experience. This integration guide will walk through both Bluetooth onboarding and QR code/Web onboarding (to support Hotspots without Bluetooth radios) - -## Using the Maker Starter App -Instructions to run the Maker Starter app locally on your computer is provided on the README in the GitHub repo. The app is written in React Native and supports both iOS and Android devices. - -Support for any other operating system will not be available. - -## Hotspot App Integration - -:::info - -Makers in the HIP-19 process can continue to submit their Hotspots to the Hotspot App for integration. However, all active Makers by March 1, 2022 must have their own Maker app available on App Stores. - -::: - -To add your Hotspot to the Hotspot App, follow the [Maker Guide](https://github.com/helium/hotspot-app/tree/main/src/makers) in GitHub and [submit a pull request to the Hotspot Github Repo](https://github.com/helium/hotspot-app). - -In this codebase, you’ll want to modify the onboarding flow to add a UI element that enables users to select your Hotspot type on this screen, add support emails to Diagnostic Reports (Bluetooth only), add additional onboarding instructions (web/QR) and include default antenna TX/RX gain: - -:::info - -Product names on this page should follow [Helium branding guidelines](https://www.helium.com/brand) and image assets must conform with existing user experience. If you require help, please reach out to the Helium team. - -::: - -# Types of Onboarding - -## QR Code Onboarding - -QR Code Onboarding allows Makers to generate a partial `add_gateway` transaction outside of the Helium App. Users use the camera in the Helium App to add this type of Hotspot. - -To select QR Onboarding, in the `hotspot.ts` file, specify `QR` in `onboardType`. - -* [View the example in the Maker Starter app](https://github.com/helium/maker-starter-app/blob/f15a887afead44f2c0bba6ac7460cffebe02dc03/src/makers/example/hotspots.ts#L43) -* [View the example in the Hotspot app](https://github.com/helium/hotspot-app/blob/bbcf058844965e6501295643b95021b6ef26b280/src/makers/__example__/hotspots.ts#L41) -* [Read more about generating QR codes](https://docs.helium.com/wallets/app-wallet/deep-links-and-qr-codes/) - -### Example QR Onboarding Flow - - - - - -## Web Onboarding -Web Onboarding allows Makers to generate a partial `add_gateway` transaction outside of the Maker App. Makers generate a deep link back to the Helium App/Maker App to finish the `add_gateway` transaction. -[Read more about deep linking](https://docs.helium.com/wallets/app-wallet/deep-links-and-qr-codes/). - -To select Web onboarding, in the `hotspot.ts` file, specify `web` in `onboardType`. - -* [View the example in the Maker Starter app](https://github.com/helium/maker-starter-app/blob/main/src/makers/example/hotspots.ts) -* [View the example in the Hotspot App](https://github.com/helium/hotspot-app/blob/bbcf058844965e6501295643b95021b6ef26b280/src/makers/__example__/hotspots.ts#L41) - -## Bluetooth Pairing - -The Maker App will start scanning for broadcasting Hotspots. Makers will need to update the `localname` with the product name and include the last 6 digits of the MAC identifier. The character limit is 170 but we do not recommend anyone go beyond 25-30 characters in the product name. - -The `localname` is the name used on the **Found Hotspots** page. - -To select Bluetooth onboarding, in the `hotspot.ts` file, specify `BLE` in `onboardType`. - -* [View the example in the Maker Starter App](https://github.com/helium/maker-starter-app/blob/f15a887afead44f2c0bba6ac7460cffebe02dc03/src/makers/example/hotspots.ts#L6) -* [View the example the Hotspot app](https://github.com/helium/hotspot-app/blob/bbcf058844965e6501295643b95021b6ef26b280/src/makers/__example__/hotspots.ts#L8) -* [Read more about BLE Services](/mine-hnt/full-hotspots/become-a-maker/hotspot-ble-services). - -# Constructing the Add Gateway Transaction - -If you’re using [Helium’s miner image](https://github.com/helium/miner), constructing a transaction is relatively easy. - -Every Hotspot on the blockchain goes through two transactions: -* **add hotspot**: links the Hotspot's key (`swarm_key`) to a -user's wallet -* **assert location**: provides GPS location, elevation (in meters), and dBi antenna -output for the Hotspot - -## Generate an Add Hotspot Transaction -Use `miner` to generate the `add hotspot` transaction, - -``` -miner txn add_gateway owner=WALLET_ADDRESS --payer WALLET_ADDRESS -``` - -For testing, you'll set `payer` as `payer = 138LbePH4r7hWPuTnK6HXVJ8ATM2QU71iVHzLTup1UbnPDvbxmr`. In production, the Payer will be your unique Maker Account Address and will be provided at the appropriate stage with the Manufacturing Oversight Committee. The current list can be found [here](https://onboarding.dewi.org/api/v2/makers). - -When testing with this `payer` address, adding hotspots and asserting location transactions will be submitted and you’ll see them as pending transactions in the Hotspot App. However, once it reaches the blockchain, the transaction will be discarded as the payer address does not exist in the blockchain’s `chain_var` of valid addresses. This ensures no Data Credits are spent on testing, but allows trial and error as Makers finish app integration. - -Once you have the transaction, you will pass it onto the Helium app to sign the transaction. Once submitted, you can view the pending transaction using this API: - -* [https://api.helium.io/v1/accounts/138LbePH4r7hWPuTnK6HXVJ8ATM2QU71iVHzLTup1UbnPDvbxmr/pending_transactions](https://api.helium.io/v1/accounts/138LbePH4r7hWPuTnK6HXVJ8ATM2QU71iVHzLTup1UbnPDvbxmr/pending_transactions) - -The output is a JSON object: - -``` -{ - "address": "11TL62V8NYvSTXmV5CZCjaucskvNR1Fdar1Pg4Hzmzk5tk2JBac", - "fee": 65000, - "mode": "full", - "owner": "14GWyFj9FjLHzoN3aX7Tq7PL6fEg4dfWPY8CrK8b9S5ZrcKDz6S", - "payer": "138LbePH4r7hWPuTnK6HXVJ8ATM2QU71iVHzLTup1UbnPDvbxmr", - "staking fee": 4000000, - "txn": "CrkBCiEBrlImpYLbJ0z0hw5b4g9isRyPrgbXs9X+RrJ4pJJc9MkSIQA7yIy7F+9oPYCTmDz+v782GMJ4AC+jM+VfjvUgAHflWSJGMEQCIGfugfLkXv23vJcfwPYjLlMyzYhKp+Rg8B2YKwnsDHaUAiASkdxUO4fdS33D7vyid8Tulizo9SLEL1lduyvda9YVRCohAa5SJqWC2ydM9IcOW+IPYrEcj64G17PV/kayeKSSXPTJOMCEPUDo+wM=" -} -``` -The `txn` output is then passed onto the Helium App over BLE, in QR code format, or through a deep link in this format: `helium://add_gateway/?mac=` - -:::warning - -By design, this transaction will fail, as this is a test account. - -::: - -Once you’re ready to proceed, request a Maker account and replace the test payer address with your own maker address. - - -## Requesting a Maker Account - -:::warning - -Only request a Maker Account from your DeWi contact if you have passed the Hardware Audit and Certification stages. - -::: - -In your request, include the Maker Name and how many location asserts you will include for your customers. A minimum of `1` included location assertion is required. That value is denoted under `locationNonceLimit`. - -All Maker Accounts are public on the blockchain [and can be found here](https://onboarding.dewi.org/api/v2/makers). - -Make note of the `Payer` address. This is the account address you will burn HNT into to generate DCs for onboarding your Hotspots. - -:::info - -Maker IDs are sequential and cannot be customized. - -::: - - - -## Funding the Maker Account - -[Read the guide](https://docs.helium.com/mine-hnt/full-hotspots/become-a-maker/burn-hnt-to-maker-wallet) for more information. - - -## Adding Hotspots to the Onboarding Server - -### Testing - -When you’re ready to start integration with the Test Maker account with the mobile wallet app, send us details about your Test Hotspot in this JSON format. : - -```json -"mac_eth0": -"mac_wlan0": -"heliumSerial": -"onboarding_key": required -"rpi_serial": -``` - -`"mac_eth0":` Ethernet MAC address - -`"mac_wlan0":` Wi-Fi MAC address - -`"heliumSerial":` Serial number for first generation Helium Hotspots. Can be ignored. - -`"onboarding_key":` The onboarding key generated from the Hotspot miner in base58. Required. - -`"rpi_serial":` Serial number for the RaspberryPi. Can be repurposed to track your own serial number. - -### Production - -When you move to production, the JSON should be formatted like this. Note the addition of the `batch` field: - -```json -"batch": "batch_name", -"mac_eth0": "any_value", -"mac_wlan0": "any_value", -"onboarding_key": "base58 address from the Hotspot", -"rpi_serial": "any_value" -``` - -## Wallet App, Onboarding, and Data Credits - -### Testing - -While testing, the miner will use the test payer address to construct the `add_gateway` transaction. The Hotspot app will take that transaction, sign it, and check the onboarding server to see if the Hotspot `mac`, `id`, and `Maker` matches and exists. - -If it does, the app submits the transaction to the blockchain. If done correctly, you should see a [pending transaction here](https://api.helium.io/v1/accounts/138LbePH4r7hWPuTnK6HXVJ8ATM2QU71iVHzLTup1UbnPDvbxmr/pending_transactions). - -Note that the blockchain WILL NOT process this transaction because the payer address is not part of the chain variable of approved Makers. After a short period, the pending transaction will disappear from the API and the app. This is normal and expected. - - -### Production - -Prior to production, you will have sent the list of Hotspots to the DeWi or your Helium contact to upload to the Onboarding Server on your behalf. You should also have Data Credits in your Maker account. And if not added already, notify the Helium team to include your Maker address in the chain variable. - -The final steps and flow for production onboarding are as follows: - -1. Update the `miner` to use your Maker account as payer. -2. Onboard a Hotspot that you know is included in the upload to the Onboarding Server. -3. Go through the Onboarding process in the Hotspot app. The app will check the Onboarding server for the Hotspot and verify the Maker ID. The app will then sign the transaction and submit to the blockchain. -4. You’ll see a pending transaction in your Maker address. -5. The blockchain will process the `add_gateway` and `assert_location` transaction and verify that the maker address is in the chain variable. -6. The transaction will go through and Data Credits will be deducted from the Maker account. -7. The Pending transaction in the Hotspot app will update to **Confirmed**. - -:::warning - -* If the Hotspot `mac`, `serial`, or `Maker` does not match, the transaction will silently fail. -* If there are insufficient Data Credits in the maker account, the transaction will silently fail. - -::: - - - - - - - - - - - - - diff --git a/docs/mine-hnt/full-hotspots/become-a-maker/hotspot-wifi-configuration.mdx b/docs/mine-hnt/full-hotspots/become-a-maker/hotspot-wifi-configuration.mdx deleted file mode 100644 index d04a0d8df..000000000 --- a/docs/mine-hnt/full-hotspots/become-a-maker/hotspot-wifi-configuration.mdx +++ /dev/null @@ -1,82 +0,0 @@ ---- -id: hotspot-wifi-configuration -sidebar_label: Hotspot WiFi Configuration -slug: /mine-hnt/full-hotspots/become-a-maker/hotspot-wifi-configuration ---- - -# Hotspot WiFi Configuration - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -The Helium Hotspot provides a WiFi configuration interface via the device's[ BLE services](/mine-hnt/hotspot-makers/hotspot-ble-services). The following are instructions for how to configure a Hotspot's WiFi. - -### Connecting to the Hotspot over Bluetooth Low Energy - -1. Press the black button on the side of the Hotspot once, and wait a few seconds for the BLE advertising to begin. You will see the LED on top of the Hotspot turn blue when it is available. -2. Scan for connectable devices. -3. Connect to the Hotspot of interest with the following name format and UUID in its advertising payload. - - `Name: Helium Hotspot ####` - - `UUID: 0fda92b2-44a2-4af2-84f5-fa682baa2b8d` - -4. Discover Services. - -### Check if Hotspot is already Connected to WiFi - -1. Read Value from: - - Service - - `UUID: 0fda92b2-44a2-4af2-84f5-fa682baa2b8d` - - Characteristic - WiFiSSID - - `UUID: 7731de63-bc6a-4100-8ab1-89b2356b038b` - -2. If string value is empty, then no WiFi connection exist, if it is not empty, then it is currently connected to that WiFi SSID. -3. If it is not connected or you would like to change networks then proceed. - -### Enable Notifications for WiFiSSID Characteristic Value Update** - -1. Enable Notifications for: - - Service - - `UUID: 0fda92b2-44a2-4af2-84f5-fa682baa2b8d` - - Characteristic - WiFiSSID - - `UUID: 7731de63-bc6a-4100-8ab1-89b2356b038b` - -### Scan For WiFi Networks - -1. Read Value from: - - Service - - `UUID: 0fda92b2-44a2-4af2-84f5-fa682baa2b8d` - - Characteristic -WiFiServices - - `UUID: d7515033-7e7b-45be-803f-c8737b171a29` - -2. De-serialize the binary value into the WiFi Services [Protocol Buffers](https://developers.google.com/protocol-buffers) message found in [BLE Services Docs](/mine-hnt/hotspot-makers/hotspot-ble-services#wifiservices-characteristic). This will give you a list of available WiFi SSID string names. - -### Set Credentials For WiFi Network - -1. Using the SSID string from the scan, and password string provided by you, do the following to set the credentials. - 1. Serialize your WiFi Connect [Protocol Buffer](https://developers.google.com/protocol-buffers) message, the definition of which is found in the [BLE Services Sheet](/mine-hnt/hotspot-makers/hotspot-ble-services#wificonnect-characteristic). - 2. Write serialized Value to - - Service - - `UUID: 0fda92b2-44a2-4af2-84f5-fa682baa2b8d` - - Characteristic - WiFiConnect - - `UUID: 398168aa-0111-4ec0-b1fa-171671270608` - -### Wait For WiFiSSID Notification to Trigger - -When the notification triggers, this indicates WiFi connection success. You can repeat step two in order to verify the correct WiFi SSID name. diff --git a/docs/mine-hnt/full-hotspots/become-a-maker/maker-approval-auditing.mdx b/docs/mine-hnt/full-hotspots/become-a-maker/maker-approval-auditing.mdx deleted file mode 100644 index 817b0d63d..000000000 --- a/docs/mine-hnt/full-hotspots/become-a-maker/maker-approval-auditing.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -id: maker-approval-auditing -sidebar_label: Approval and Auditing Process -slug: /mine-hnt/full-hotspots/become-a-maker/maker-approval-auditing ---- - - -# Maker Approval and Auditing Process - -Due to the overwhelming demand for Hotspots, the community designed and approved a process for adding new, verified manufactures to the ecosystem. [This is known has HIP19](https://github.com/helium/HIP/blob/master/0019-third-party-manufacturers.md). With HIP19 in place, companies can submit an application to be reviewed by the community and the [DeWi](https://www.dewi.org/). - -The full process for approving and auditing new manafacturers is as follows ([originally outlined in this blog post](https://engineering.helium.com/2021/01/26/maker-audit.html)): - -1. Makers submit a HIP19 Proposal. -2. DeWi sends KYC/B request for documentation. -3. DeWi approves KYC/B and sends hardware audit information. -4. Makers send hardware samples for audit. -5. Makers obtain and send regulatory radio certifications. -*steps 4 and 5 can happen at the same time -6. Once Makers pass hardware audit, they are allowed to proceed to Network Integration. -7. The final stage of Network Integration is being able to add Hotspots to the Onboarding Server. diff --git a/docs/mine-hnt/full-hotspots/become-a-maker/security-requirements.mdx b/docs/mine-hnt/full-hotspots/become-a-maker/security-requirements.mdx deleted file mode 100644 index 05759921c..000000000 --- a/docs/mine-hnt/full-hotspots/become-a-maker/security-requirements.mdx +++ /dev/null @@ -1,123 +0,0 @@ ---- -id: security-requirements -sidebar_label: Security Requirements -slug: /mine-hnt/full-hotspots/become-a-maker/security-requirements ---- - -# Security Requirements - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -When the Helium Community passed -[HIP19](https://github.com/helium/HIP/blob/master/0019-third-party-manufacturers.md), -it was made clear that open and easy access to the `swarm_key` is not permitted -at this time. This helps insure that the Miner is running on real hardware and -increases the barriers to dishonest actors. - -:::info - -The `swarm_key` is an ECC Compact Key used by the Miner to sign all blockchain -and libp2p transactions. The three word animal name (e.g. angry-purple-tiger) is actually -derived from the public key of the `swarm_key`. - -::: - -While formalizing the audit process, DeWi has determined that the only approved -approach to guaranteeing this at this time is using the ECC608 to generate and -store the key during manufacturing. Other approaches are possible, but they -would require case-by-case consideration and the potentially a third-party -audit. - -## Securing the swarm_key with the ECC608 - -Helium has open-sourced their ECC608 provisioning utility from their own -manufacturing process [here](https://github.com/helium/gateway_mfr). By using -this utility, not only do you automatically comply with the ECC608 provisioning -process, but you also create compatability with the Helium Miner with no -modifications (other than some configuration to the -[Docker overlay](/mine-hnt/hotspot-makers/docker-integration/#enable-ecc608-and-d-bus)). - -You are free to compile the `gateway_mfr` repository from source or use the -[Docker image available here (for aarch64 only)](https://helium-media.s3-us-west-2.amazonaws.com/gateway_mfr-aarch64.tar). - -You will want to do the following: - -``` -docker load -i gateway_mfr.tar -docker run -d --device /dev/i2c-1 --name provision gateway_mfr:arm64 -``` - -With the Docker container running, you are now able to interact with the utility -and complete the provisioning. - -Throughout this process, you might get some errors because the ECC608 can -frequently go to sleep. You may see something like this: - -``` -docker exec provision gateway_mfr ecc onboarding -ecc_asleep -``` - -It is just fine to liberally retry commands until they work. - -First, verify that the ECC608 is untouched: - -``` -$ docker exec provision gateway_mfr ecc test -+--------------------+-------------------------------+ -| name | result | -+--------------------+-------------------------------+ -| serial_num | ok | -|{zone_locked,config}| {error,unlocked} | -| {zone_locked,data} | {error,unlocked} | -| slot_config |{error,{invalid_slot_config,0}}| -| key_config |{error,{invalid_key_config,3}} | -| miner_key |{error,ecc_response_exec_error}| -+--------------------+-------------------------------+ -``` - -This is a failing test, which is good in this case. Next, you will want to run -the actual provision command: - -``` -$ docker exec provision gateway_mfr ecc provision -{zone_locked,[{config,true},{data,true}]} -+--------------------+------+ -| name |result| -+--------------------+------+ -| serial_num | ok | -|{zone_locked,config}| ok | -| {zone_locked,data} | ok | -| slot_config | ok | -| key_config | ok | -| miner_key | ok | -+--------------------+------+ -``` - -You can run the test from the end of the provision command to verify the table -at any time: - -``` -docker exec provision gateway_mfr ecc test -+--------------------+------+ -| name |result| -+--------------------+------+ -| serial_num | ok | -|{zone_locked,config}| ok | -| {zone_locked,data} | ok | -| slot_config | ok | -| key_config | ok | -| miner_key | ok | -+--------------------+------+ -``` - -And finally, you will want to extract the `onboarding_key` which is also called -the Miner's "swarm_key": - -``` -docker exec provision gateway_mfr ecc onboarding -112xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -``` - -This is what you will want to provide to the -[onboarding server](/mine-hnt/hotspot-makers/hotspot-integration-testing/#adding-hotspots-to-the-onboarding-server). diff --git a/docs/mine-hnt/full-hotspots/full-hotspots.mdx b/docs/mine-hnt/full-hotspots/full-hotspots.mdx deleted file mode 100644 index 777d78e8b..000000000 --- a/docs/mine-hnt/full-hotspots/full-hotspots.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: full-hotspots -sidebar_label: Full Hotspots -slug: /mine-hnt/full-hotspots ---- - -# Full Hotspots - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Full Hotspots are Helium coverage providers that can participate in all -potential reward activity available to Hotspots. Compared to a [Data Only -Hotspots](/mine-hnt/data-only-hotspots), Full Hotspots are eligible for -[Proof-of-Coverage](/blockchain/proof-of-coverage) Rewards. - -Full Hotspots may only be manufactured by approved **Makers**. These are -hardware vendors that have been approved by the Helium community and the -[DeWi](https://dewi.org). This process is governed via -[Helium Improvement Proposal 19 (HIP19)](https://github.com/helium/HIP/blob/master/0019-third-party-manufacturers.md). - -## Approved Makers - -[Helium, Inc.](https://helium.com) was the first Hotspot manufacturer. Starting -in early 2019, they produced the first hardware capable of mining HNT and -providing LoRaWAN wireless coverage. In total, Helium, Inc. produced and sold -the first 13,000 Hotspots to the Helium community to seed the Network. - -Since the introduction of -[HIP19](https://github.com/helium/HIP/blob/master/0019-third-party-manufacturers.md), -additional approved Makers have been added. Each approved Maker is given a -unique onboarding address on the Helium blockchain where they are required to -[burn data credits](/blockchain/transaction-fees) to onboard their unique -Hotspots before they are granted access to the blockchain. - -| Maker Name | HIP19 Application | Date Approved | Onboarding Maker Address | -| :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------ | :------------ | :---------------------------------------------------------------------------------------------------------------------------------------------- | -| [Helium, Inc.](https://helium.com) | N/A | NA | [13daGGWvDQyTyHFDCPz8zDSVTWgPNNfJ4oh31Teec4TRWfjMx53](https://explorer.helium.com/accounts/13daGGWvDQyTyHFDCPz8zDSVTWgPNNfJ4oh31Teec4TRWfjMx53) | -| [Nebra Ltd](https://www.nebra.com/) | [Nebra](https://github.com/helium/HIP/blob/master/0019-third-party-manufacturers/nebra-ltd.md) | 2020-12-10 | [13Zni1he7KY9pUmkXMhEhTwfUpL9AcEV1m2UbbvFsrU9QPTMgE3](https://explorer.helium.com/accounts/13Zni1he7KY9pUmkXMhEhTwfUpL9AcEV1m2UbbvFsrU9QPTMgE3) | -| [SyncroB.it](https://syncrob.it/) | [SyncroB.it](https://github.com/helium/HIP/blob/master/0019-third-party-manufacturers/syncrobit.md) | 2020-12-14 | [14rb2UcfS9U89QmKswpZpjRCUVCVu1haSyqyGY486EvsYtvdJmR](https://explorer.helium.com/accounts/14rb2UcfS9U89QmKswpZpjRCUVCVu1haSyqyGY486EvsYtvdJmR) | -| [RAK Wireless/CalChip](https://www.calchipconnect.com/) | [RAK/CalChip](https://github.com/helium/HIP/blob/master/0019-third-party-manufacturers/rak-wireless.md) | 2020-12-29 | [13ENbEQPAvytjLnqavnbSAzurhGoCSNkGECMx7eHHDAfEaDirdY](https://explorer.helium.com/accounts/13ENbEQPAvytjLnqavnbSAzurhGoCSNkGECMx7eHHDAfEaDirdY) | -| [EasyLinkin/Bobcat](https://www.bobcatminer.com) | [EasyLinkin](https://github.com/helium/HIP/blob/master/0019-third-party-manufacturers/easylinkin.md) | 2021-01-12 | [14sKWeeYWQWrBSnLGq79uRQqZyw3Ldi7oBdxbF6a54QboTNBXDL](https://explorer.helium.com/accounts/14sKWeeYWQWrBSnLGq79uRQqZyw3Ldi7oBdxbF6a54QboTNBXDL) | -| [Kerlink](https://www.kerlink.com) | [Kerlink](https://github.com/helium/HIP/blob/master/0019-third-party-manufacturers/kerlink.md) | 2021-02-24 | [13Mpg5hCNjSxHJvWjaanwJPBuTXu1d4g5pGvGBkqQe3F8mAwXhK](https://explorer.helium.com/accounts/13Mpg5hCNjSxHJvWjaanwJPBuTXu1d4g5pGvGBkqQe3F8mAwXhK) | -| [HeNet BV/LongAP](https://www.longap.com) | [HeNet BV/LongAP](https://github.com/helium/HIP/blob/master/0019-third-party-manufacturers/henet.md) | 2021-03-16 | [12zX4jgDGMbJgRwmCfRNGXBuphkQRqkUTcLzYHTQvd4Qgu8kiL4](https://explorer.helium.com/accounts/12zX4jgDGMbJgRwmCfRNGXBuphkQRqkUTcLzYHTQvd4Qgu8kiL4) | -| [Smart Mimic](https://smartmimic.com) | [Smart Mimic](https://github.com/helium/HIP/blob/master/0019-third-party-manufacturers/smart-mimic.md) | 2021-03-25 | [13MS2kZHU4h6wp3tExgoHdDFjBsb9HB9JBvcbK9XmfNyJ7jqzVv](https://explorer.helium.com/accounts/13MS2kZHU4h6wp3tExgoHdDFjBsb9HB9JBvcbK9XmfNyJ7jqzVv) | -| [Seeed/SenseCap](https://www.sensecapmx.com/) | [Seeed/SenseCap](https://github.com/jancee/HIP/blob/pre/0019-third-party-manufacturers/seeed.md) | 2021-06-15 | [14NBXJE5kAAZTMigY4dcjXSMG4CSqjYwvteQWwQsYhsu2TKN6AF](https://explorer.helium.com/accounts/14NBXJE5kAAZTMigY4dcjXSMG4CSqjYwvteQWwQsYhsu2TKN6AF) | -| [E-sun Electronics/ Panther](https://panther.global/) | [PantherX](https://github.com/dewi-alliance/hotspot-manufacturers/blob/main/applications/pantherx.md) | 2021-09-24 | [13v9iGhjvQUtVaZXcFFRCEbL1nPR4R8QJowBgMUcaGM2v1aV6mn](https://explorer.helium.com/accounts/13v9iGhjvQUtVaZXcFFRCEbL1nPR4R8QJowBgMUcaGM2v1aV6mn) | - -## Becoming a Maker - -- [Maker Approval and Auditing](/mine-hnt/full-hotspots/become-a-maker/maker-approval-auditing) -- [Hotspot Integration Testing](/mine-hnt/full-hotspots/become-a-maker/hotspot-integration-testing) -- [Docker Integration](/mine-hnt/full-hotspots/become-a-maker/docker-integration) -- [Security Requirements](/mine-hnt/full-hotspots/become-a-maker/security-requirements) -- [Hotspot BLE Services](/mine-hnt/full-hotspots/become-a-maker/hotspot-ble-services) -- [Hotspot WiFi Configuration](/mine-hnt/full-hotspots/become-a-maker/hotspot-wifi-configuration) -- [Burning HNT to your Maker Wallet](/mine-hnt/full-hotspots/become-a-maker/burn-hnt-to-maker-wallet) -- [Create a Maker App](/mine-hnt/maker-apps) diff --git a/docs/mine-hnt/light-hotspots.mdx b/docs/mine-hnt/light-hotspots.mdx deleted file mode 100644 index c21a038b5..000000000 --- a/docs/mine-hnt/light-hotspots.mdx +++ /dev/null @@ -1,120 +0,0 @@ ---- -id: light-hotspots -title: Light Hotspots -sidebar_label: Light Hotspots -slug: /mine-hnt/light-hotspots ---- - -# Light Hotspots - Beta - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -This document describes the architecture and technical roadmap planned for -converting existing Approved Hotspots to Light Hotspots. As part of this -migration, we have introduced a new Hotspot variant onto the network, called -a [Data Only Hotspot](/mine-hnt/data-only-hotspots). - -A conversion of a Full Hotspot running Light Hotspot software is now being tested on [Testnet](https://testnet-explorer.helium.com). - -This project is in progress and subject to change. **Last updated Monday February 14, 2022**. - -:::info - -For real-time development and community support, please join the #gateway-development channel on -[Helium Discord](https://discord.gg/helium) - -::: - -## What is a Light Hotspot? - -Light Hotspots are the evolution of how LoRaWAN gateways will interact with the -Helium blockchain. Since the genesis block, the Helium blockchain has run -entirely on the physical Hotspot itself. As the blockchain network grows, each -Hotspot running a full node undergoes increasing load and are starting to fall -out of sync due to the higher compute requirements. - -To mitigate this, the Hotspot's consensus work has been moved off of physical -Hotspots and onto Validators. This simplifies the architecture and enables -us to grow the Network exponentially while keeping blocktimes and epochs stable. - -As all approved Hotspots transition to a Light Hotspot architecture, we also -introduce a new type of Hotspot known as Data Only Hotspots, to satisfy the -increasing demand and continue to expand network coverage. - -| Rewards Type | Data Only Hotspots | Full & Light Hotspots | -| :--------------------------- | :----------------- |:------------- | -| Network Data Forwarding | YES | YES | -| Proof of Coverage | NO | YES | - -## Light Hotspot Properties - -When the Light Hotspot software is fully developed and in production, they will -satisfy the following properties: - -- A Hotspot on the Helium network that, via [Validators](/mine-hnt/validators), - can participate in PoC beacons and witnesses, and forwards data packets; -- Does not store a copy of the Blockchain, eliminating synchronization; -- Does not create challenges (relies on Validators to create challenges on their - behalf); -- Does not participate in Consensus Groups (relies on Validators for block - production); -- Will no longer depend on libp2p or "gossip", and instead use [gRPC](https://grpc.io/), a new framework to communicate between distributed systems; -- Will be eligible to earn $HNT (see table below) - -In other words, the Light Hotspot software will allow the Hotspot to participate as a -[Full Hotspot](/mine-hnt/full-hotspots), without the extra overhead of maintaining a local copy -of the blockchain. - -## Architecture - -This image shows the progression to Light Hotspots, with the role of Miner being -deprecated as we move the blockchain off the Hotspots and into the Validator -infrastructure. At the conclusion of Light Hotspot development, the entire Helium blockchain, -and the coordination of Proof of Coverage, will be handled by Validators. - - - -## Code and Development - -The bulk of the code that enables Light Hotspots on actual LoRaWAN gateways is -called [gateway-rs](https://github.com/helium/gateway-rs). It's easiest to think -of this as Helium's next-generation packet forwarder. - -Development of this code takes place in the above GitHub repo, as well at the -`#gateway-developement` channel on the -[Helium Discord Server](https://discord.gg/helium). - -# Development Timelines - -- **March 18 2021**: Data Only Hotspots routes free packets -- **July 8 2021**: Hotspot Consensus work moves to Validators -- **July 20 2021**: Data Only Hotspots activated on Helium Network (appears on chain) -- **October 11 2021**: Data Only Hotspots mine HNT -- **December 2021**: Validators creating challenges for software-based miners on Testnet -- **January 2022**: Hardware Audit starts for Light Hotspot manufacturers -- **February 2022**: Introduce hardware-based Hotspots on Testnet (Full Hotspots running Light Hotspot firmware). Validators create challenges using H3dex targeting. -- **Tentative: End of Q1 2022**: All HIP-19 Approved Makers participating in Testnet - -Assuming HIP 54 and HIP 55 pass without additional changes - -- **Tentative: Q1/Q2 2022**: Code related to Light Hotspot merged to production, in an inactive state -- **Several weeks later**: Activate set of chain variables to enable Light Hotspots on Mainnet -- **Several weeks later**: Deactivate Miner on Light Hotspots on Mainnet such that they run gateway-rs only - -## Current progress on Testnet -Hardware-based Hotspots are now participating in a new Proof-of-Coverage with Validators on Testnet. In this test, all Hotspots use Testnet Validators for blockchain information and do not need to sync the blockchain directly. They also receive PoC Challenges from Validators. - -You can see their progress on [Testnet](https://testnet-explorer.helium.com). - -These Hotspots are also running a dockerized version of [gateway-rs (rust-based gateway firmware)](https://github.com/helium/gateway-rs) and an updated packet forwarder that relies on Validators. - -*Note that these Hotspots are earning testnet tokens (TNT) and not HNT.* - -## Current progress on Mainnet -A portion of the complete Light Hotspot software is also on mainnet, transferring non-PoC packets on a test Hotspot using the new packet forwarder that relies on Validators. - -### What's Next -Invite all Makers to participate in our Testnet test by supplying a tag on [Quay, our image distribution tool, for Makers using Docker](https://quay.io/repository/team-helium/testnet?tag=latest&tab=tags). diff --git a/docs/mine-hnt/maker-apps.mdx b/docs/mine-hnt/maker-apps.mdx deleted file mode 100644 index ff11d529b..000000000 --- a/docs/mine-hnt/maker-apps.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -id: maker-apps -title: Maker Apps -sidebar_label: Maker Apps -slug: /mine-hnt/maker-apps ---- - -# Maker Apps - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -This document describes what Maker apps are and how users interact with them on the Helium Network. - -Beginning March 2022, all [HIP-19](https://github.com/dewi-alliance/hotspot-manufacturers#readme) Hotspot Manufacturers (aka Makers) are required to support their customers with a bespoke Mobile App to onboard their Hotspots, maintain their Hotspots with diagnostic tools, and various basic troubleshooting tools. - -Maker Apps can also include extra enhancements such as Proof-of-Coverage analysis, earnings tools, and more. - -For more information, [read our blog post announcing this change](https://blog.helium.com/the-future-of-hotspot-apps-and-wallets-in-the-helium-ecosystem-a5b904b01d62). - - -## SDKs and Starter Apps - -To assist Makers in developing their apps, an SDK and supporting libraries are available. An example starter app is also open-sourced for forking and further customization. - -### React Native SDK - -The Helium React Native SDK is a collection of modules that can be used by a React Native application to interact with Hotspots and the Helium Blockchain. It has first class support for Typescript. - -[Read the full documentation](https://helium.github.io/react-native-helium/index.html) - -### Maker Starter App - -The [Maker Starter App](https://github.com/helium/maker-starter-app) includes support for deeplinking to the Helium Wallet App to sign transactions, removing any requirements for users to enter their 12 word seed phrase into the Maker App. **This is a security precaution and prevents potential lost of funds and Hotspots, as the seed phrase acts as a user's private key on the blockchain.** If you find a Maker app that asks for your seed phrase, do not trust it. - -#### Features -The following features are supported in the Maker Starter App: -- Add a Hotspot -- Set a Location (including gain and elevation) -- Transfer a Hotspot -- Settings with PIN Code and language selection -- Deeplinking to [Helium Wallet](/wallets/app-wallet) to sign transactions diff --git a/docs/mine-hnt/mine-hnt.mdx b/docs/mine-hnt/mine-hnt.mdx deleted file mode 100644 index ec30c3626..000000000 --- a/docs/mine-hnt/mine-hnt.mdx +++ /dev/null @@ -1,97 +0,0 @@ ---- -id: mine-hnt -hide_title: true -sidebar_label: Introduction -slug: /mine-hnt -hide_table_of_contents: true ---- - - - - - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -
-
-
-
- -
-

Mine HNT

-

Helium Hotspots mine $HNT and were originally built by Helium, Inc. but are now built by our growing ecosystem of approved manufacturers.

- -
-
-
-
-
- - -
-
-
-

Hotspots

-
-
-

Want to help build the largest IoT network in the world? Want to provide coverage to IoT devices and earn HNT while you do?

-

Check out some of these quick links for help getting started or join us in the #gateway-development channel on our Discord.

-
- -
-
-
-
-

Full Hotspots

-

These Hotspots maintain a full copy of the HNT blockchain, Participate in Proof of Coverage rewards, and get rewarded for forwarding Data Packets. Details can be found here.

-
-
-
-
-

Light Hotspots

-

These Hotspots use Validators to get information about the HNT blockchain, Participate in Proof of Coverage rewards, and get rewarded for forwarding Data Packets. Details can be found here.

-
-
-
-
-

Data Only Hotspots

-

These Hotspots use Validators to get information about the HNT blockchain, and get rewarded for forwarding Data Packets. Details can be found here.

-
-
-
-
-

Maker Apps

-

Makers have their own App to perform Hotspot onboarding, diagnostics, and troubleshooting. Read more here.

-
-
-
-
- -
-
-
-
- -
-

Validators

-

Validators confirm blocks transactions are valid and properly placed on the chain. They also serve block chain data to Light and Data Only Hotspots.

- -
-
-
-
-
diff --git a/docs/mine-hnt/validators/faqs-resources-providers.mdx b/docs/mine-hnt/validators/faqs-resources-providers.mdx deleted file mode 100644 index ec59f54d2..000000000 --- a/docs/mine-hnt/validators/faqs-resources-providers.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -id: validators-faqs-resources-providers -title: FAQs, Resources, and Providers -sidebar_label: FAQs, Resources, and Providers -slug: /mine-hnt/validators/faqs-resources-providers ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## FAQs - -### General - -**How much HNT does it require to stake and become a validator?** - -10,000 HNT. - -**What’s the minimum number of validators needed to go to Mainnet?** - -The current proposal is 100 with no maximum number of validators that can participate. We will activate a separate chain variable when we reach the proposed minimum which will enable Consensus Group election from the validator pool. - -**Is there a validator cap?** - -No. - -**How many validators are elected to the consensus group?** - -Currently 43. Check the [block explorer](https://explorer.helium.com/validators) for latest consensus group size. - -**When a validator is in the consensus group can I update it?** - -Yes. There are no issues with updating a validator while it's in the consensus group. - -**My validator is connected. Why can't I see it in the Explorer?** - -API status updates can take up to 10 minutes for fully connected nodes. - -### Technical - -**Why do you [discourage running validators from home](/mine-hnt/validators/requirements)?** - -Many community members possess hardware that easily meets or exceeds the recommended CPU, memory, and storage guidelines. However, most home users rely on residential internet service providers. This is potentially problematic for the following reasons: - -* Residential ISPs rarely offer service level agreements (SLA) that guarantee network uptime. If your neighborhood experiences a service outage due to headend hardware failure, software misconfiguration, or your neighbor trenching their front lawn and slicing a fiber line, you will need to wait for service to return just like any other residential customer. -* Most residential ISPs lack distributed denial of service (DDoS) or denial of service (DoS) protection. If a bad actor decides to target your public IP address with a botnet, you may see your cable modem, DSL modem, or optical network terminal crash spectacularly. You may not have control over the assignment of a new public IP address, so power-cycling your modem may not allow you to recover from a continuous attack. Remember, your public IP is broadcast across the helium peer-to-peer network when you connect. -* Your ISP may implement QoS (Quality of Service) or traffic shaping policies that dynamically prioritize or deprioritize certain types of traffic without your knowledge. This could potentially impact latency between your validator nodes and other nodes in a consensus group. Bad latency can result in your eviction from a consensus group. -* Bad actors may target your public IP address with port scanners or other scanning techniques to identify entry points. Outdated router software, poor port management, or zero-day exploits could put your entire home network (including your personal computers, crypto wallets, mobile devices, and IoT devices) at risk for attack and compromise. -* Your ISP may automatically throttle your connection speed if the sustained traffic or connection load exceeds a value that could negatively impact the performance of other customers in your neighborhood. - -Despite the warnings above, some community members will decide to run their validator from home. Remember that Helium is not responsible for security, performance, or network issues that may result from your validator configuration. - -### Rewards - -**What is the expected APR of running Helium validator?** - -It depends on the number of validators and how often a validator is randomly chosen to participate in the consensus group. Validators split the Consensus Group reward, [which is 6% of all HNT mined](/blockchain/mining/#hnt-distributions-per-epoch). - -The community has produced several models which should be instructive. Please do your own analysis before deciding to stake. - -* [Basic $HNT Projections Model](https://docs.google.com/spreadsheets/u/1/d/1C0Tsz31Qa2b8PHXrl0gMDh2_fXcd2qSWVgF0hmg9Hqg/edit#gid=63991307) -* [Helium Validator Rewards Forecasting with Validator Ramp Calculations](https://docs.google.com/spreadsheets/d/1E4XLpF-a3xo3ZtNpJzd9g6EcuMZ1nSKKvtmKy_LVjhE/edit#gid=1705424601) - -**When can I get my validator rewards?** - -There is no rewards distribution lock up. After staking, validators elected into the consensus group immediately receive rewards at the end of that epoch. - -### Staking and Unstaking - -**What happens when I unstake a validator?** - -It enters an unbonding state for approximately 5 months (250,000 blocks) and cannot be restaked. During this state the **validator does NOT earn rewards and the staked amount cannot be transferred or withdrawn**. After the unbonding state has passed, the stake is returned to the original owner’s wallet. - -**Is overstaking permitted? If so, what’s the benefit?** - -Initially there will be no overstaking. We'll decide later, via the HIP process, what kind of overstaking the network should allow and what it will mean for election into the Consensus Group and ultimately rewards. - -**Can I restake an unstaked validator?** - -No. Once a validator has been unstaked it cannot be restaked. - -**Can I transfer stake to an existing validator node that had been previously staked?** - -No. - -**If a validator is in the consensus group, can I unstake it or transfer stake?** - -No. You must wait until the validator is out of the consensus group. - -## Resources - -### Videos - -* [HIP25 Hips Don't Lie](https://www.youtube.com/watch?v=qOEAxXaANkI) - An in-depth discussion of [HIP25](https://github.com/helium/HIP/blob/master/0025-validators.md), the foundational HIP for validators. -* [Validator Staking Tutorial](https://www.youtube.com/watch?v=S3eIIAPP9rk) - Full video guide on how to deploy a Validator from `jcarl`. -* [Validator Quickstart](https://www.youtube.com/watch?v=4szCWSDowro) - Short overview from `joey` on how to deploy and stake a Validator. -* [Staking provider comparison](https://www.youtube.com/watch?v=pnW72u3ysbo) - Courtesy of **@MattLong6**. [HNT Staking Vendors](https://docs.google.com/spreadsheets/d/1xl5IjZY3xeAXTmnbLk2Ynedb9Ssd6yxRBwHixJQg8xM) - -## Staking Providers - -:::info - -Links to these Staking Providers are provided as is. Helium, Inc. is not directly associated with any of the following vendors and makes no endorsements about the quality of their offering. -Additionally, any pricing details listed here are likely to be out of date. Please verify pricing details with the given staking provider. - -::: - -| Provider | Non-custodial full node | Pooling | Pricing | Notes -| :----------------------------------------------------------- |:----------------------- |:----------- | :-------------------------------------------------------------------|:----- -| [Allnodes](https://www.allnodes.com) | Yes | No | $80 per month (Basic) or $0.2380 per hour (Advanced) | -| [Argon.build](https://www.argon.build) | Yes | No | 3% comission on earnings | -| [Bison Trails](https://www.bisontrails.co) | Yes | No | | Does not offer service to individuals who plan to run fewer than 10 nodes -| [Blockdaemon](https://blockdaemon.com/) | Yes | No | 5% commission with flexible payment options | Cloud offerings. -| [Chorus One](https://chorus.one/products/whitelabel-staking) | Yes | No | | Does not have public pricing. -| [DLI](https://dlinodes.com) | Yes | Yes | All run in DLI Cloud, Staking, Nodes, 24/7 Support | -| [Figment](https://figment.io/) | Yes | No | 5% comission | -| [Foundry Digital](https://foundrystaking.com/) | Yes | No | $150 per month | -| [Helium Rising](https://www.heliumrising.com) | Yes | Yes | 5% comission | -| [Helium Staking](https://www.helium-staking.com) | Yes | Yes | $150 per month for non-custodial full node. 4% of rewards for pool. | -| [HNT Staking](https://www.hntstaking.net) | Yes | Yes | $149 per monthly or $3 per day + 3% commission on earnings" | -| [HNT Validators](https://www.hntvalidators.com) | Yes | No | $199 per month | -| [HostNodes](https://hostnodes.online) | Yes | No | $119 per month| 10% discount for 6 months plan, 20% discount for 1 year plan -| [Multipool App](https://www.multipool.app) | Yes | Yes | $120 per month for non-custodial full node or pool $120 shared between participants + 1.2% comission on earnings | 100 HNT min @ $1.2 (per 100 HNT increment) -| [NodeValidators](https://nodevalidators.com) | Yes | Coming soon | $120 per month + 2.5% comission on earnings | -| [Staked](https://staking.staked.us/helium-staking) | Yes | No | | Does not have public pricing. -| [StakeJoy](https://stakejoy.com) | Yes | No | 3% comission on earnings | -| [StakeMyHNT](https://www.stakemyhnt.com) | Yes | Coming soon | $169 per month | -| [Validators Pool](https://helium.bx-host.com) | Yes | No | $120 per month + 2% comission on earnings | -| [Vanager](https://vanager.io) | No | Yes | $4 per day + 3% comission on earnings | diff --git a/docs/mine-hnt/validators/mainnet/deployment-guide.mdx b/docs/mine-hnt/validators/mainnet/deployment-guide.mdx deleted file mode 100644 index 4ba67a07a..000000000 --- a/docs/mine-hnt/validators/mainnet/deployment-guide.mdx +++ /dev/null @@ -1,510 +0,0 @@ ---- -id: validators-mainnet-deployment-guide -title: Validator Deployment Guide - Mainnet -sidebar_label: Deployment Guide - Mainnet -slug: /mine-hnt/validators/mainnet/deployment-guide ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -This guide will cover the end-to-end process of deploying a Helium Validator on Mainnet. It assumes you're starting from scratch. At the end, you'll have a Helium Validator deployed on the Network. - - -:::info - -If at any point during this process you need assistance or have general questions, please join the `#validator` channel on [Helium Discord](https://discord.gg/helium). - -::: - -## Prerequisites - -To successfully deploy a Helium Validator, you'll need to do the following: - -- Install the [Helium CLI Wallet](https://github.com/helium/helium-wallet-rs). You are welcome to build from source, but easiest to download the latest binary release. -- Deploy a virtual server on a cloud service like AWS, GCP, Azure, or Digital Ocean. Or deploy a physical server on which to run the Validator. [The recommended hardware and networking requirements can be found here](/mine-hnt/validators/requirements/). - -## Create Wallet - -Once you have your [Helium CLI Wallet](https://github.com/helium/helium-wallet-rs) installed locally, it's time to create your Helium Wallet. Run the following command to create it. (This command format assumes you're using the executable. If you've built the wallet from source it'll look slightly different.) - -At any time use -h or --help to get more help for a command. - -:::warning - -It is a best practice to create your Helium CLI wallet on a separate machine from the one where you will run your Validator. - -::: - -``` -helium-wallet create basic -``` - -You'll be prompted to supply a new passphrase to complete it. This is used to encrypt/decrypt the `wallet.key` file, and is needed to sign transactions. **Don't lose it.** - -This command will produce a `wallet.key` file on your machine, along with output similar to the following: - -``` -+-----------------------------------------------------+---------+--------+------------+ -| Address | Sharded | Verify | PwHash | -+-----------------------------------------------------+---------+--------+------------+ -| 1aP7nm6mGLMFtgiHQQxbPgKcBwnuQ6ehgTgTN8zjFuxByzJ8eA5 | false | true | Argon2id13 | -+-----------------------------------------------------+---------+--------+------------+ -``` - -Next, run the `info` command to get all the relevant details. - -``` -helium-wallet info -``` - -The output will look similar to this: - -``` -+--------------------+-----------------------------------------------------+ -| Key | Value | -+--------------------+-----------------------------------------------------+ -| Address | 1aP7nm6mGLMFtgiHQQxbPgKcBwnuQ6ehgTgTN8zjFuxByzJ8eA5 | -+--------------------+-----------------------------------------------------+ -| Network | mainnet | -+--------------------+-----------------------------------------------------+ -| Type | ed25519 | -+--------------------+-----------------------------------------------------+ -| Sharded | false | -+--------------------+-----------------------------------------------------+ -| PwHash | Argon2id13 | -+--------------------+-----------------------------------------------------+ -| Balance | 0.00000000 | -+--------------------+-----------------------------------------------------+ -| DC Balance | 0 | -+--------------------+-----------------------------------------------------+ -| Securities Balance | 0.00000000 | -+--------------------+-----------------------------------------------------+ -``` - -## Each Validator Requires 10000 HNT - -Running a Validator on Mainnet requires a stake of `10000 HNT` per Validator. After you've created your wallet, transfer a little more than `10000 HNT` into it for each Validator you intend to run to cover the transaction fee. - -:::info - -As is the case with every transaction on the Helium blockchain, `staking` requires a small fee paid in Data Credits. [Read more about transaction fees here](/blockchain/transaction-fees). - -::: - - -## Run a Validator - -With your wallet funded, it's time to deploy and run the actual Validator. - -:::warning - -If you haven't already, please review the [Validator Technical Requirements](/mine-hnt/validators/requirements). Specifically, on non-ARM systems `AVX` support is required. Verify that it exists on your host system by running the following: - -``` -grep avx /proc/cpuinfo -``` - -If nothing is returned from this command, your host system does not have AVX support and your Validator may not be stable. - -::: - -You have two options for deploying the Validator. You just need to do ONE of the following: - -- [Deploy the Validator Using Docker](#deploy-the-miner-using-docker) -- [Build the Validator form Source](#deploy-miner-from-source) - -### Deploy the Validator Using Docker - -Start by updating your packager manager registry: - -``` -sudo apt-get update -``` - -And install Docker itself. (If needed, full directions on installing Docker on Ubuntu [can be found here](https://docs.docker.com/engine/install/ubuntu/).) - -``` -sudo apt-get install docker.io -``` - -To avoid needing to use Docker with `sudo` privileges, add your user to the docker group, replacing $USER with your username here: - -``` -sudo usermod -aG docker $USER -``` - -Log in and out of your account to apply these changes. You are now ready to use Docker. - -Now that docker is installed and ready, let's run the Validator. - -#### Run the Docker Container - -Before running the container for the first time, it is mandatory to pick a "system mount point". This allows you to easily maintain your Validator's blockchain identity - specifically `swarm keys` - and blockchain state through image updates. Without doing this, you will lose these items when upgrading docker images. - -The `validator` directory should be created on a persistent EBS volume (if you're using AWS) or something similar that lives across server lifetimes. - -``` -mkdir $HOME/validator_data -``` - -You can then use the `run` command to start your container for the first time: - -``` -docker run -d --init \ ---restart always \ ---publish 2154:2154/tcp \ ---publish 8080:8080/tcp \ ---name validator \ ---mount type=bind,source=$HOME/validator_data,target=/var/data \ -quay.io/team-helium/validator:latest-validator-amd64 -``` - -- `-d` option runs in detached mode, which makes the command return or not; you may want to omit if you have a daemon manager running the docker for you. -- `--init` to indicate that an init process should be used as the PID 1 in the container. This ensures the usual responsibilities of an init system, such as reaping zombie processes, are performed inside the created container. When `docker exec` commands are run, it's possible for these to create zombie processes on the host. This eliminates that issue. You can read more about this [here](https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/) and [here](https://docs.docker.com/engine/reference/commandline/run/). -- `--restart always` asks Docker to keep the image running, starting the image on boot and restarting the image if it crashes. Depending on how you installed Docker in your system, it'll start on boot. -- `--publish 2154:2154/tcp` maps the port 2154 on the docker container to 2154 on the host machine. This allows inbound connections on port 2154 to the host machine to be routed to the validator container. In addition to this mapping, it is up to you to ensure that this port is available from the public internet to the host machine. This will require modifying firewall and/or security group settings in your cloud provider of choice. -- `--publish 8080:8080/tcp` maps the port 8080 on the docker container to 8080 on the host machine. This allows inbound connections on port 8080 to the host machine to be routed to the validator container. In addition to this mapping, it is up to you to ensure that this port is available from the public internet to the host machine. This will require modifying firewall and/or security group settings in your cloud provider of choice. -- `--name validator` names the container, which makes interacting with the docker easier, but feel free to name the container whatever you want. -- `--mount` the parameters above will mount the container's `/var/data/` directory to the systems directory `$HOME/validator_data`. You will want this folder to be persistent across runs of the docker container as it will contain both the blockchain data and the miner key of your Validator. -- `quay.io/team-helium/validator:latest-validator-amd64` Lastly, this points to the docker **_image_** for the Validator that is tagged as the "latest" for the amd64 architecture. For arm architectures, replace with `latest-validator-arm64`. - -Additional flags that may be helpful: - -- `-e "NAT_INTERNAL_IP=192.168.0.139"` If your host machine is behind a firewall that is performing network address translation (NAT), adding this flag will assist the Validator to quickly determine the IP address of the host machine. Replace the IP with yours from `ip addr`. This goes hand-in-hand with the following flag: -- `-e "NAT_EXTERNAL_IP=$( curl -s ipv4.icanhazip.com )"` This also assists the Validator in quickly identifying the external IP of the NAT. The `curl` commmand simply queries an external provider and returns the public IP address of the interface. You can remove this and replace with your external IP if it is known and will not change (static IP). -- Similar commands are available with `NAT_INTERNAL_PORT` and `NAT_EXTERNAL_PORT` if any port translations are occuring. If not, these may be omitted. - -Once you run the command above, docker will retrieve the latest Validator image, and start the docker process. Barring any errors, your Validator is running. - -:::info - -Please watch and respond to upgrade requests on the `#validators-announcements` channel on the [Helium Discord](https://discord.gg/helium) server in a timely manner. - -::: - -#### Upgrade your Docker container - -To do manual upgrades, the latest miner tag [can be found here](https://quay.io/repository/team-helium/validator?tag=latest&tab=tags). - -To upgrade your docker container to the latest version, do the following. These commands will stop the running container then delete it; pull an updated Validator docker image from the repository; and finally delete any out of date Validator docker images. - -``` -docker stop validator && docker rm validator - -docker pull quay.io/team-helium/validator:latest-validator-amd64 - -docker image prune -f -``` - -Finally, re-launch docker with the same command as above under the [Run the Docker Container](#deploy-the-validator-using-docker) section. - -#### Interact with the Validator within the Container - -You may want to interrogate the Validator or interact with it. Docker's `exec` command enables this. For example: - -``` -docker exec validator miner info height -``` - -As shown above, you can prepend `docker exec validator` to any of the commands documented or create an alias such as - -``` -alias miner="docker exec validator miner" -``` - -And start the container again as described above, but with the new release tag. - -And thanks to the `--mount option`, the blockchain data and the validator keys are preserved through updates. - -:::info - -Now that you have your Validator running, you need to [actually Stake tokens to make it official.](#stake-tokens-to-your-validator) - -::: - -### Deploy Miner from Source - -Ok, brave soul. Here's what you'll need to build and deploy the miner from source: - -- miner -- Erlang package (the latest 22 or 23 versions are supported, the 24 release candidate will NOT work) -- `libwxgtk` package -- git - -Before we get started, make sure you're fully up to date: - -``` -sudo apt-get update -y -``` - -Next, let's install all the things. Start by cloning the `miner` repo on GitHub: - -``` -git clone https://github.com/helium/miner.git -``` - -Then proceed to get you some Erlang (here we're specifying `22.3.1`): - -``` -wget https://packages.erlang-solutions.com/erlang/debian/pool/esl-erlang_22.3.1-1~ubuntu~bionic_amd64.deb -``` - -Next, get the `libwxgtk` package: - -``` -wget http://mirrors.kernel.org/ubuntu/pool/universe/w/wxwidgets3.0/libwxgtk3.0-0v5_3.0.4+dfsg-3_amd64.deb -``` - -And finish things off by acquiring a some wonderful dependencies: - -``` -sudo apt install -y libdbus-1-dev autoconf automake libtool flex libgmp-dev cmake libsodium-dev libssl-dev bison libsnappy-dev libclang-dev doxygen make cargo g++ libsctp1 libncurses5 libwxbase3.0-0v5 build-essential cmake libdbus-1-dev mosh vim parallel -``` - -Then we need to unpack and install all of this stuff. Start with `libwxgtk`: - -``` -sudo dpkg -i libwxgtk3.0-0v5_3.0.4+dfsg-3_amd64.deb -sudo apt update -y -``` - -Then onto Erlang. First `unpack` then `install`: - -``` -sudo dpkg -i esl-erlang_22.3.1-1~ubuntu~bionic_amd64.deb -``` - -``` -sudo apt-get install -f -``` - -We also need to use a newer version of Rust. The one that comes by default with Ubuntu will not work. - -``` -#Remove rustc so we can install a newer version -sudo apt -y remove rustc - -#Install newer version of rust -curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-host x86_64-unknown-linux-gnu --default-toolchain stable --profile complete -y - -#This allows you to proceed without loging out and loging in on the server -source $HOME/.cargo/env -``` - -Then navigate to your `miner` directory: - -``` -cd miner -``` - -Build the `miner` - -``` -./rebar3 as validator release -``` - -Then start the `miner`: - -``` -_build/validator/rel/miner/bin/miner start -``` - -#### Load the Genesis Block - -One last step. When building from source, you'll need to manually load the Helium blockchain genesis block once your miner is deployed and running. To do this, run the following: - -``` -wget https://snapshots.helium.wtf/genesis.mainnet -miner genesis load -``` - -Note that in the above `miner` command, the `miner` binary here is nested within `_build/validator/rel/miner/bin/miner`. - -#### A Note on Errors - -Source builders have sometimes reported error messages (after the miner has been running well for a while) referencing `Too many open files`. This can occur when a `ulimit` limitation is exceeded for the number of open files. - -You can check your soft limit (often `1024` by default) with: - -```ulimit -Sn``` - -Specifics instructions to increase the `ulimit` vary by OS (readily found with a Google search) and are beyond the scope of this guide. - -#### Enable Firewall on the server - -It's good practice to restrict access to the server and you should allow access only to ports that are needed. If you also use node_exporter or a different type of exporter for monitoring you should add those ports as well. - -``` -#Enable Firewall -sudo ufw enable - -#Allow connections to SSH Port. It's good practice to use a different port other than 22 for ssh connections -sudo ufw limit 22/tcp - -#Allow connections to the Validator default port -sudo ufw allow 2154/tcp - -#Allow connections for Light Hotspots -sudo ufw allow 8080/tcp -``` - -## Stake HNT to Your Validator - -Now that your Validator node is running, the final step in the process is to formally stake HNT to your Validator. As part of the staking process the Validator address needs to both be in the staking transaction and sign the transaction. After a wallet stakes a validator node, the wallet becomes that node’s owner, has control over that validator node, and receives rewards. - -:::info - -First, double check your wallet balance to make sure you have the `10000` HNT required to stake, **along with a few extra to cover the transaction fees**. - -::: - -``` -helium-wallet balance - -+-----------------------------------------------------+----------------+--------------+-----------------+ -| Address | Balance | Data Credits | Security Tokens | -+-----------------------------------------------------+----------------+--------------+-----------------+ -| 1aP7nm6mGLMFtgiHQQxbPgKcBwnuQ6ehgTgTN8zjFuxByzJ8eA5 | 10005.00000000 | 0 | 0.00000000 | -+-----------------------------------------------------+----------------+--------------+-----------------+ -``` - -To stake HNT, we need to get the validator node address. Obtain it using the following: - -``` -miner peer addr -``` - -The resulting output will look like this (except with your specific validator address). The string after `/p2p/` is your Validator address. For example: - -``` -/p2p/1YwLbGTCEhVbwKEehRVQRC8N3q35ydXTH1B6BQys5FB1paHssdR -``` - -We can now use this address with the Helium Wallet CLI `validators stake` command to formally stake the `10000 HNT` required **along with extra to cover the fee**. Here's the full command using the Validator address from above as an example. (**Make sure you replace it with yours.**) - -``` -helium-wallet validators stake one 1YwLbGTCEhVbwKEehRVQRC8N3q35ydXTH1B6BQys5FB1paHssdR 10001 --commit -``` - -After running this, you'll need to input your wallet passphrase to sign the transaction. - -And with that, you're done. Congratulations! You're running a Helium Validator on Mainnet! - -## Verifying Validator Victory - -Now that you're up and running with a Validator, there are a few things you can examine to make sure things are hunky dory. - -### Time Expectations - -The blockchain takes time. The distributed nature of verifying transactions into the blockchain takes time. The validator information gossiped on the blockchain takes time. APIs that run to update the [explorer](https://explorer.helium.com) are scheduled and have intervals. Basically, you won't be able to run the validator and instantly see that everything is "good". - -After the validator has been up and running for 15 minutes, proceed with some of the steps below. - -### Check the API - -The [Validator API](/api/blockchain/validators) provides several useful calls to help monitor your Validator and the state of the Mainnet. - -``` -https://api.helium.io/v1/validators/ -``` - -or - -``` -https://api.helium.io/v1/validators/ -``` - -will be very useful. - -You should see JSON output that looks similar to this. You are looking for `"online": "online"` and `"stake_status": "staked"` - -``` -{ - "data": { - "version_heartbeat": 2, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/1.2.3.4/tcp/2154" - ], - "height": xxxx - }, - "stake_status": "staked", - "stake": 1000000000000, - "owner": "1aHpEUzcsBvjw1xv8PnoYAYM5yrodqbXKwBitHS8hamWT4TQVDp", - "last_heartbeat": xxxx, - "block": xxx, - "address": "1ZobTUK43hjTwTvwihEoCvh3SuuvfGp9AAR85c8mQdpULjntYWH" - } -} -``` - -### Status Commands to Run on the Validator Server - -Note that you may need to adjust these if you're running in Docker. - -``` -miner info p2p_status - -+---------+------+ -| name |result| -+---------+------+ -|connected| yes | -|dialable | yes | -|nat_type | none | -| height | 2447 | -+---------+------+ -``` - -- `connected` means you have at least one connection to a peer (outgoing connections OK) -- `dialable` means peers can reach you (incoming connections OK) -- `nat_type` of `none` is best for validators. Anything else means the validator code thinks it is behind some kind of NAT -- `height` is the currently synced block - -``` -miner peer book -s - -+------------------------------------------------+-------------+----------+---------+---+----------+ -| address | name |listen_add|connectio|nat|last_updat| -+------------------------------------------------+-------------+----------+---------+---+----------+ -|/p2p/1YwLbGTCEhVbwKEehRVQRC8N3q35ydXTH1B6BQys5FB|short-umber-b| 1 | 4 |non| 111.88s | -+------------------------------------------------+-------------+----------+---------+---+----------+ - -+----------------------------+ -| listen_addrs (prioritized) | -+----------------------------+ -|/ip4/173.230.156.39/tcp/2154| -+----------------------------+ - -+-----------------+--------------------+---------------------------------------+-------------------+ -| local | remote | p2p | name | -+-----------------+--------------------+---------------------------------------+-------------------+ -|/ip4/172.17.0.2/t|/ip4/50.16.94.64/tcp|/p2p/1Y9MoitLaEbXPdrZZogURSNQ54eXcp2Ljv|agreeable-tweed-pir| -|/ip4/172.17.0.2/t|/ip4/143.110.235.209|/p2p/1YAFBayNk8bXkkEpqXdxu73kFTjtMqXKTy|prehistoric-hemp-ra| -|/ip4/172.17.0.2/t|/ip4/73.2.34.208/tcp|/p2p/1YEC3g9Hep4hzbDwLFbJ4SqrthTcjGDWdP|wonderful-arctic-ch| -|/ip4/172.17.0.2/t|/ip4/172.90.214.198/|/p2p/1YLJC8DSN6SF17S9nXfYEwTXKtoXpgqBSX|howling-ultraviolet| -|/ip4/172.17.0.2/t|/ip4/13.59.168.136/t|/p2p/1YZhCNPj181YL21aHECXLS1zvDzVY43px9|macho-chocolate-but| -+-----------------+--------------------+---------------------------------------+-------------------+ -``` - -You're looking for `listen_addrs`. If you don't have at least one, your Validator hasn't settled on how to tell other peers to reach it. Often this can take 15-30 mins, sometimes longer. - -### Copying your `swarm_key` -Your validator's `swarm_key` is located in the `validator_data/miner` directory - -In order to copy the `swarm_key` locally to your personal computer, you'll need to use scp (outside of/instead of an ssh session). Replace the user name and IP address (`root@192.0.2.1`) in the example below with the actual user name and IP address of your docker container instance. - -``` -scp root@192.0.2.1:validator_data/miner/swarm_key . -``` - -The `.` at the end of the example above is a placeholder for your current directory on your local machine. This is where your swarm_key will be copied to on your local machine. Use the command `pwd` to determine the location where the file was copied to. - -#### A Note on the Purpose of a `swarm_key` -The `swarm_key` equates to your validator's unique identity on the Helium blockchain. Backing up the `swarm_key` enables you to maintain your validator's identity in the event that your node becomes compromised in some way, or needs to be rebuilt on another server for any reason. - -### Check the Explorer - -Head over to the [Validator Mainnet Explorer](https://explorer-beta.helium.com/validators) and search for your Validator. This may take 10 to 15 minutes from the time that your Validator is both online and staked before it appears on explorer. You should see your 3-word validator name (`short-umber-bull` in the example above) listed. It may be easier to sort by `#`, descending, as your new Validator will be near the top of the list. Remember you can view the name of your validator through `miner info summary` or just `miner info name`. - -Thank you for being a part of the Helium Validators initiative. diff --git a/docs/mine-hnt/validators/mainnet/validators-release.mdx b/docs/mine-hnt/validators/mainnet/validators-release.mdx deleted file mode 100644 index d28528b7d..000000000 --- a/docs/mine-hnt/validators/mainnet/validators-release.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -id: validators-mainnet-release -title: Validators Release -sidebar_label: Validator Release -slug: /mine-hnt/validators/mainnet/validators-release ---- - -# Validator Releases - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -To provide a consistent, predictable release cadence and window for validator updates, the team will move to a consistent release cadence for planned updates. - -Initially, these updates will be released on a weekly basis and will gradually move to every two weeks. The team plans to release Wednesday mornings PT. - -Important and Critical updates will be released out of band when available. Each release will be tagged with a color code, see table below. - -| Color | Type | Definition | Cadence | Examples | -|:------: |:----------------: |--------------------------- |-------------------------------------------------------- |------------------------------------------------------------------------------------------------------------------------------------- | -| ![](/img/validators/green.png) | Update | Recommended, on your time | Initially every week, gradually move to every 2 weeks | Snapshots, non-critical fixes, miner release updates (minor) | -| ![](/img/validators/yellow.png) | Important update | Within 24-48 hrs | Out of band (when available) | Fix impacting majority validators, miner release updates (major) | -| ![](/img/validators/red.png) | Critical update | Update immediately | Out of band (when available) | Serious security issue impacting majority validators, fix to address blockchain halt or other serious blockchain operational issues | diff --git a/docs/mine-hnt/validators/mainnet/wallet.mdx b/docs/mine-hnt/validators/mainnet/wallet.mdx deleted file mode 100644 index afe02c73b..000000000 --- a/docs/mine-hnt/validators/mainnet/wallet.mdx +++ /dev/null @@ -1,214 +0,0 @@ ---- -id: validators-mainnet-wallet -title: Configure a Wallet -sidebar_label: Configure a Wallet -slug: /mine-hnt/validators/mainnet/wallet ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -You’ll need an owner wallet to: - -- Stake your Helium (HNT) -- Receive validator node consensus group rewards - -:::info -You can have a single wallet for multiple validator nodes. However multiple wallets for a single validator node is not supported. A single stake transaction from a single wallet must be used to stake a validator. - -::: - -:::warning - -Do NOT run or store the helium-wallet or wallet.key file on your validator. Backup the wallet.key file and protect the password used to create the wallet. - -::: - -Download the command line wallet application from the [Helium wallet-rs github release page](https://github.com/helium/helium-wallet-rs/releases) and choose the appropriate architecture for your environment. Download the associated architecture .checksum file. - -Before running wallet commands, verify the integrity of the downloaded helium-wallet archive. For example, run `sha256sum helium-wallet-v1.6.4-x86-64-macos.tar.gz` and verify the resulting checksum matches the checksum provided in the `helium-wallet-v1.6.4-x86-64-macos.checksum` file. - -The `sha256sum` binary is included in linux and MacOS distributions. For Windows users, run `certUtil -hashfile .\helium-wallet-v1.6.4-x86-64-win.zip SHA256` to produce the sha256sum. - -## Wallet Commands - -At any time use `-h` or `--help` to get more help for a command. - -### Create a Wallet - -`./helium-wallet create basic` - -#### Create or Use Wallet without Password Input - -For security reasons, it is generally recommended that you type in your password every time. Storing the password in an environmental variable makes it very easy for the password to get compromised. Sometimes though, despite the security risks, you may want to interact with the CLI without inputting the password. In this case, using the environmental variable `HELIUM_WALLET_PASSWORD` enables this. - -``` -HELIUM_WALLET_PASSWORD=p4ssw0rd ./helium-wallet create basic -``` - -### View wallet balance and public key - -`./helium-wallet info` view public key and HNT balance. - -:::warning - -Always make sure to inspect the transaction _before_ adding the **--commit** option to sign and submit it to the api. There is no undo. - -::: - -### Stake Tokens - -After you have received your HNT you need to stake these tokens. - -As part of the staking process the validator node address needs to be in the staking transaction and also needs to sign the transaction. After a wallet stakes a validator node, the wallet becomes that node’s owner, has control over that validator node, and receives rewards. - -#### To stake tokens perform the following: - -- Obtain the validator node address: - - - On the validator, run `miner peer addr`. This will produce something like: `/p2p/112sSfUCQrVNAfFKVZWUSCeLs67wH8o1xz4yj4nKSPJKBT8bUkXi` - - In this example the part following the final slash is the validator node's public address: `112sSfUCQrVNAfFKVZWUSCeLs67wH8o1xz4yj4nKSPJKBT8bUkXi`. - -- Stake single Validator with the HNT: - - `./helium-wallet validators stake one 10000` - -Use `--commit` after preview to submit the transaction to network. - -#### Stake multiple validators with one command - -To stake multiple validators with one command you can use the following command with the CLI wallet: - -``` -$ helium-wallet validators stake multi ./path/to/file/whale.json -``` - -The path parameter is the path to a JSON formated file with all the validator addresses and the amount to stake them with. Here is an example of the JSON format: - -``` -[ - { - "address": "", - "stake": 10000, - }, - { - "address": "", - "stake": 10000 - } -] -``` - -The transaction is not submitted to the system unless the `--commit` option is given. - -:::warning -This command sequentially walks through the JSON and stakes one validator at a time. If this command errors out all further staking transactions will abort. -::: - -### List Associated Validators - -It's possible to view a list of associated validators to a wallet, along with their current status. `./helium-wallet validators list` will produce a table similar to below: - -``` -+-----------------------------------------------------+-----------------------------------------------------+----------------+--------+ -| Address | Owner | Stake | Status | -+-----------------------------------------------------+-----------------------------------------------------+----------------+--------+ -| 1Za3L1R32qPJJ546kteo7WP9t2DzWtTMw5u9jKfpJxZ9bswTgVG | 1a58oCFw79zAZCdkVBvnFSjqx7QM5FzSW5ppMVCf1HJeu8g1ywS | 10000.00000000 | staked | -+-----------------------------------------------------+-----------------------------------------------------+----------------+--------+ -``` - -This can be helpful in verifying staked validators or validators currently in cooldown after being unstaked. - -### Unstake Tokens - -If you unstake tokens the validator node enters a stake cooldown period. During this cooldown period the validator node will not earn rewards and at the end of the cooldown period (currently 250,000 blocks or approximately 5.7 months in mainnet) your initial staking amount will be released to the wallet. - -To ensure the operator understands this unstake operation is not reversible and cannot be shortened, there are additional calculations to be performed in the unstake command. You need to include the stake release block height which should be at least the current block height plus the cooldown period, and 5-10 blocks to allow for chain processing delays. - -For example, if the current block height was 5000, you'd add 250,000 for the stake withdrawl cooldown period, plus an additional 10 blocks to allow for chain processing delays. Therefore the `stake-release-height` = `5000 + 250000 + 10` or `255010`. - -The cooldown length, in blocks, is called `stake_withdrawal_cooldown` and is a chain variable. This variable is viewable by running `miner ledger variables stake_withdrawal_cooldown`. - -#### To unstake tokens from a validator node perform the following: - -Obtain the validator node public address as described in [the stake command](#stake-tokens) and calculate the `stake-release-height` as defined above. - -`./helium-wallet validators unstake --stake-release-height ` - -Use `--commit` after previewing to submit the transaction to network. If you wait too long to commit, you may need to recalculate the `stake-release-height` value. - -To check the status of the unstake transaction, it's possible to copy the received hash into the Explorer, or query the [API transaction](/api/blockchain/transactions). A successful unstake transaction will also change the status to `cooldown` when viewing [associated validators](#list-associated-validators) to the wallet. - -:::warning - -Once the unstake command is committed, this cannot be reversed. The validator will cease earning rewards and the stake amount will not be returned to the staking wallet until the 250,000 block cooldown period has completed. - -::: - -:::info - -Once a validator has been successfully unstaked, it cannot be staked again. The validator may be stopped and deleted, including the `swarm_key`. Wallet commands to stake this validator's public address again will fail. - -::: - -### Transfer stake - -A validator node's stake can be transferred to other validator nodes in the same wallet or a different one. - -If the stake is transferred to a validator node in a different wallet, the owner of the other wallet must accept the transfer to complete the transaction. - -#### To transfer stake to a new validator node in the same wallet: - -`./helium-wallet validators transfer create --new-address --old-address ` - -Use `--commit` after previewing to submit the transaction to network. - -This will produce an output similar to the following: - -``` - -{ - "amount": 0.0, - "fee": 55000, - "hash": "q4Q7WTT0lD-EyjVFsW8hhdIw8Js339TgZpwTdA8_uPs", - "new_address": "1ZFavPP8drcqAXJPT6mLuZQqwjWNhWGr9vJ3Ajs3uJyFGW7sUMX", - "new_owner": "current", - "old_address": "1YpifvrQWUFoHDGyYZoA2FAxmXPNcMNjnRd27uv81t8CzBBNW85", - "old_owner": "1aXQ6WyNkibzhHXCFYiJQAa3BEkJnbZFsuezo4qjpW7FAgDw9Xx", - "txn": "8gGvAQohEF7t+Kbveqj9hsmO9c/3krgGUVnL8rHv8Eg29JMiE8IGEiEQl2RGoxd+aznItHIVxL7Qizw0ng3t4tcA2kZA7mPqJMcaIRE+/nQNU16ZXpbzMmszzlSw+AiGAXeKg0q7kx1DdLlY7ypAM4Zz4UOX4tKcg2y079UGPhQ99hi8lSZwAwAUjxNMO9jGk5pGA1wP1BqidFWqtcPrIGuom+mdrOQLdEuBU0rFBDjYrQM=" -} - -``` - -#### To transfer stake to a new validator node in a different wallet: - -`./helium-wallet --format json validators transfer create --new-address --old-address --new-owner ` - -**Note: you must transfer the stake to a new validator node. ** - -This will produce an output similar to the following: - -``` -{ - "amount": 0.0, - "fee": 60000, - "hash": null, - "new_address": "1YeCAsuBq3fDTv8x4iB1fJn9zBbopHhjhXGpvVwN43JDptqMT11", - "new_owner": "1bBTWn843DwTXTyH3hbSMmDoJXHCU1D1U8cAYRdVE5rDnaS7fLb", - "old_address": "1ZFavPP8drcqAXJPT6mLuZQqwjWNhWGr9vJ3Ajs3uJyFGW7sUMX", - "old_owner": "1aXQ6WyNkibzhHXCFYiJQAa3BEkJnbZFsuezo4qjpW7FAgDw9Xx", - "txn": "8gHSAQohEJdkRqMXfms5yLRyFcS+0Is8NJ4N7eLXANpGQO5j6iTHEiEQRwd/IDnFy67A2NbC3IyYvLZUrsAojyJH85aeNi3SLA0aIRE+/nQNU16ZXpbzMmszzlSw+AiGAXeKg0q7kx1DdLlY7yIhEZVpU2QzwJ1SmikaTlSEyKCQ5mCRx/xOIUAsw5MYPIsWKkD3+X75w1+267InX30CD077Y8X3JK31FEg/X1bSpFehIQa6eY/DqfDEfDjLyq6UHpxsfBEE8M0zGs9okipefnAOOODUAw==" -} -``` - -You'll then need to send the txn value (a base64 string) to the new owner to be accepted. - -#### To accept the transfer the new owner performs the following: - -`./helium-wallet validators transfer accept --commit ` - -:::info - -Once a validator has had a stake transferred from it, it cannot be staked again. The validator may be deleted, including the `swarm_key`. Wallet commands to stake this validator's public address again will fail. - -::: - -More general wallet commands [here](/wallets/cli-wallet). diff --git a/docs/mine-hnt/validators/monitoring.mdx b/docs/mine-hnt/validators/monitoring.mdx deleted file mode 100644 index f857af838..000000000 --- a/docs/mine-hnt/validators/monitoring.mdx +++ /dev/null @@ -1,67 +0,0 @@ ---- -id: validators-monitoring -title: Monitoring a Validator -sidebar_label: Monitoring -slug: /mine-hnt/validators/monitoring ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -The Docker commands will assume you have the same prefix to get you executing a command within the docker: ```docker exec validator``` . If you want to make it easier, you can always create an alias such as: ```alias miner="docker exec validator miner"```. - -## Check the p2p network - -Perform a health check to see if your validator node can see other validators. - -Once your validator is running, perform an initial health check to verify you're connected to peers, your NAT type has been correctly identified, and that you have listen addresses: - -Source: ```miner peer book -s``` - -Docker: ```docker exec validator miner peer book -s``` - -:::note - -It could take several minutes before the peers appear in the table. - -::: - -Once you have an address listed in ```listen_addrs``` and ```peers``` in the table at the bottom, you're connected to the p2p network. - -## View block height - -When the genesis block is loaded, this query will work and return height 1 at least: - -Source: ```miner info height``` - -Docker: ```docker exec validator miner info height``` - -If you’re syncing, something similar to the following should appear: -``` -~$ docker exec validator miner info height -14 449 -``` - -The first number is the **election epoch** and the second number is the **block height** of your validator. - -To be considered 'online' in [Explorer](https://explorer.helium.com/) and be eligible for election into a consensus group, your node must be **staked** and the **block height** needs to be caught up (within 100 blocks of the block height of the chain). You can view the current block height of the chain through the [Explorer](https://explorer.helium.com/). Block heights may sync slowly, it may take a few days if your validator is just coming online. - -## View p2p summary - -When your validator is running, you can check the summary of the connection, NAT, and block height. [These parameters are described in the Deployment Guide](/mine-hnt/validators/mainnet/deployment-guide/#status-commands-to-run-on-the-validator-server). - -Source: ```miner info p2p_status``` - -Docker: ```docker exec validator miner info p2p_status``` - -If you are properly connected and staked, it should look similar to this: -``` -~$ docker exec validator miner info p2p_status -+---------+------+ -| name |result| -+---------+------+ -|connected| yes | -|dialable | yes | -|nat_type | none | -| height |911834| -+---------+------+ -``` diff --git a/docs/mine-hnt/validators/penalties.mdx b/docs/mine-hnt/validators/penalties.mdx deleted file mode 100644 index fcf977923..000000000 --- a/docs/mine-hnt/validators/penalties.mdx +++ /dev/null @@ -1,199 +0,0 @@ ---- -id: validators-penalties -title: Validator Penalties and Impact on Rewards -sidebar_label: Penalties -slug: /mine-hnt/validators/penalties ---- - -# Validator Penalties and Impact on Rewards - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Validators are a new entity on the Helium Blockchain that will perform the work of the consensus group including verifying transactions and adding new blocks to the blockchain. As Validators will play an important role in the expansion, stability and success of the Helium network moving forward, it's critical that community run Validators meet the performance requirements of their role. - -The consensus group is made up of Validator nodes that are rewarded with $HNT for working together to verify transactions and producing blocks. - -However, if a Validator node prevents the consensus group from performing its task, for example if it provides insufficient computing resources or has a weak network connection (equally strong upstream and downstream is needed), the Validator node will incur penalties that can affect the amount of rewards earned. - -:::tip Before you continue - -Be sure to first review the [Validator Technical Requirements](/mine-hnt/validators/requirements) - -::: - -First, we'll discuss the consensus group election process and the roles penalties play during these events. Then we'll discuss how penalties are "earned" and "burned" to better understand the overall process. - -## The Election Process - -:::info - -HNT rewards are earned by Validators when they participate in Consensus Groups. - -Therefore, Validators with higher penalties than their peers will be chosen less _and_ will participate in consensus for shorter time periods. **Penalties directly affect your rewards.** - -::: - -At the end of each consensus group, an election is performed. During this election process, 25% of the Validators in the current consensus group are chosen to be ejected and replaced with non-elected Validators. - -Penalties play a role in both the ejection and election processes: - -**25% of the Validators in the consensus group are ejected:** - -- This is a probabilistic determination based on the current penalty scores of the Validators in the current consensus group. -- Validators with _higher_ penalty score will have a _higher_ chance of being ejected -- Validators with _lower_ penalty score will have a _lower_ chance of being ejected - -**The ejected 25% is replaced by available Validators:** - -- This is also probabilistic, based on the current penalty scores of the Validators available to be included in the consensus group. -- Validators with _higher_ penalty score will have a _lower_ chance of being elected -- Validators with _lower_ penalty score will have a _higher_ chance of being elected - -It's important to understand that elections are still based on probability. Merely having a high penalty will not ensure a Validator is removed from a consensus group. By contrast, having a low penalty score does not ensure that a Validator will _remain_ in a consensus group. - -## Penalty Types - -Now that there's a high-level description of how penalties affect the election process, let's define how penalties are assessed: - -### Tenure Penalty (Consensus Group Participation) - -To ensure that consensus groups members are continually churned, and that no individual Validator participates for too long, penalties are added. **This is not a performance based penalty and is added to _all_ Validators that participate in a consensus group.** - -- A tenure penalty of `0.5` is added at the beginning of each consensus group for each Validator participating in that group. If the Validator is not ejected from the consensus group, it will receive another `0.5` penalty at the beginning of each subsequent epoch. -- This penalty is called the `tenure_penalty` and is a chain variable. You can view this variable by running `miner ledger variables tenure_penalty`. -- At the start of each epoch, any performance penalties that have been accumulated during the prior epoch will be applied to each member of the outgoing consensus group. - -### DKG (Distributed Key Generation) Penalty - -A DKG penalty can occur if an election fails, and the Validator was part of the reason for the election to fail. This can occur throughout the dkg process or signature phase. - -- At the end of the election, all Validators vote and sign the election result. If the election fails, Validators that a majority agree did not sign the election results are penalized. -- Failed elections are significant to the network as they prevent new groups from being elected and rewards from being issued to all network participants including Hotspots. -- This penalty can be assessed for Validators in the current consensus group _or_ Validators attempting to be elected into the consensus group. -- This penalty can be applied once per consensus group per Validator. -- The amount applied is a chain variable was originally set at `1.0` and was changed to `5.0` as of block 1,107,995. The variable is viewable by running `miner ledger variables dkg_penalty`. - -:::info - -Learn more about [Distributed Key Generation](https://en.wikipedia.org/wiki/Distributed_key_generation) - -::: - -### Performance Penalty - -The details of the HoneyBadgerBFT protocol used is out of scope for this document, but this can be read more about [here](https://eprint.iacr.org/2016/199.pdf). What's important is that there are a few different types of failures that will create performance penalties that can be applied to a Validator while in consensus: - -**Seen Penalties** - -- This penalty can occur if a majority of other Validators in the consensus group report your Validator as not being "seen" -- This is equivalent to the Validator being offline, not available, or not communicating with the group. -- This penalty is applied for each occurrence, which can happen multiple times during a consensus group. -- The amount applied per occurrence is a chain variable, currently set at `0.33`. The variable is viewable by running `miner ledger variables election_seen_penalty`. - -**BBA (Byzantine Binary Agreement) Penalties** - -- This penalty can occur when the Validator is seen but fails to contribute a bundle of transactions and metadata to the block. -- Acquiring this penalty usually means the Validator is slow/underpowered, or poorly connected. -- This may also occur if the time on your Validator is skewed vs the group time. [Run `ntp`](https://en.wikipedia.org/wiki/Network_Time_Protocol)! -- This penalty is applied for each occurrence, which can happen multiple times during a consensus group. -- The amount applied per occurrence is a chain variable, currently set at `0.1`. The variable is viewable by running `miner ledger variables election_bba_penalty`. - -:::info - -Learn more about [Byzantine Agreements](https://en.wikipedia.org/wiki/Byzantine_fault) and their affect on [Consensus]() - -::: - -## Penalty Decay - -Penalties decay as blocks are formed. - -This decay rate is in blocks, and is stored as a chain variable. View the current decay block limit by running `miner ledger variables penalty_history_limit`. This value is set to `20160` blocks for mainnet, or a target of 2 weeks. - -To phrase it in a different way, every time a penalty is assessed it begins to decay at `penalty * (1 - age/penalty_history_limit)` where `age` is the number of blocks that have occurred since the penalty was put in place. - -Each penalty accrued decays to `0.0` in `20160` blocks, regardless of its initial magnitude. - -## Penalty Objectives - -Through these rules, the penalties help maintain the the goals of the Validator network: - -- Ensuring that poor performing Validators have a less favorable chance of being included in a consensus group -- Ensuring that poor performing Validators have an increased chance of being ejected in an election -- A more even distribution of rewards by increasing a Validator's chance for ejection as they participate in sequential consensus groups - -## Viewing Your Penalties - -There are a several tools available to you to view the current penalties of your validator, all validators, or ones currently elected to the consensus group. - -**Viewing the Ledger** - -Metadata about validators, as well as current penalty data, is available in the ledger. View the ledger by running the following command: - -``` -miner ledger validators -``` - -You'll receive an output similar to this: - -``` -+---------------------------+------------------------------------------------+-------------+------------+--------+-------+-------------+----------+------------------+------------+ -| name | owner_address |last_heartbea| stake | status |version|tenure_penalt|dkg_penalt|performance_penalt|total_penalt| -+---------------------------+------------------------------------------------+-------------+------------+--------+-------+-------------+----------+------------------+------------+ -| sour-ceramic-gibbon |1bEL84rSSUTmveWfchsLFGcmQSGBfFQntQhxzkeiNdyRqE7T| 7 |100000000000| staked | 10081 | 2.37 | 0.00 | 0.10 | 2.47 | -| soft-aquamarine-bear |1angb56sircurmps45PN8S3xkp6UGWBicG4vLuxNdjjWLWKb| 8 |100000000000| staked | 10081 | 4.36 | 0.00 | 3.66 | 8.02 | -| quaint-silver-barbel |1bEYK1izp3oTmMyV8a3raiUHbAGnXr6KMRcSygK7MVoxMWbs| 5 |100000000000| staked | 10081 | 4.36 | 0.00 | 0.10 | 4.46 | -| deep-silver-flamingo |1bb9ZdQy3P1CmVt7jaW279wq3C1oPC2kF7h8nf8uJFw9hCiG| 16 |100000000000| staked | 10081 | 4.34 | 0.00 | 0.19 | 4.54 | -| lively-paisley-swift |1bjMHV8y6jcnL9bUrERLABya4WFL4HcDfjM7UWAsYiJpBNqg| 9 |100000000000| staked | 10081 | 2.46 | 0.00 | 0.00 | 2.46 | -| passive-hazel-fox |1aVoEyJEN9jfsynBt435MXGq57utYXB4mdVM9p7Vme52iZxM| 3 |100000000000| staked | 10081 | 1.95 | 0.00 | 0.00 | 1.95 | -+---------------------------+------------------------------------------------+-------------+------------+--------+-------+-------------+----------+------------------+------------+ -``` - -- `name` Validator name. These will be cut-off if using Docker due to console width limitations. -- `owner_address` Validator address -- `last_heartbeat` The age, in blocks, of the last heartbeat received -- `stake` Stake amount -- `status` `staked` or `unstaked` -- `version` Version of `miner` being reported from the client -- `tenure_penalty` As defined above -- `dkg_penalty` As defined above -- `performance_penalty` This is a combination of both the Seen and BBA penalties as defined above -- `total_penalty` This is the simple addition of `tenure_penalty`, `dkg_penalty` and `performance_penalty` - -You can get the Docker console width limitation by adding `--format csv` to the `miner` command to receive a csv formatted output that should not be cut off. This is useful for scripting output into other systems, especially combined with `| grep 3word-validator-name` commands to filter output: - -`miner ledger validators --format csv | grep 3word-validator-name` - -**Viewing the Current Consensus Group** - -Similar functionality can be found in querying the current consensus group: - -``` -miner hbbft perf -``` - -This produces the following output: - -``` -+---------------------------+---------------+----------+--------+---------+------+-------+ -| name |bba_completions|seen_votes|last_bba|last_seen|tenure|penalty| -+---------------------------+---------------+----------+--------+---------+------+-------+ -| zealous-jade-shark | 6/8 | 382/382 | 0 | 0 | 2.91 | 3.11 | -|interesting-topaz-alligator| 6/8 | 382/382 | 0 | 0 | 6.35 | 6.74 | -| flat-butter-tuna | 6/8 | 382/382 | 0 | 0 | 4.83 | 5.03 | -| shallow-lava-tortoise | 6/8 | 382/382 | 0 | 0 | 3.94 | 4.14 | -| generous-sky-tortoise | 6/8 | 382/382 | 0 | 0 | 1.00 | 1.20 | -| macho-white-corgi | 6/8 | 382/382 | 0 | 0 | 1.00 | 1.20 | -| perfect-taffy-cottonmouth | 6/8 | 382/382 | 0 | 0 | 4.36 | 4.75 | -| dizzy-saffron-sparrow | 6/8 | 382/382 | 0 | 0 | 4.34 | 4.63 | -| melodic-yellow-alligator | 6/8 | 382/382 | 0 | 0 | 5.34 | 5.63 | -+---------------------------+---------------+----------+--------+---------+------+-------+ -``` - -- `name` Validator name -- `bba_completions` Shows a metric for BBA competions, as defined above. -- `seen_votes` Shows a tally of seen votes across the consensus group, as defined above. -- `last_bba` Number of recent BBA failures -- `last_seen` Number of recent seen failures -- `tenure` Curent `tenure_penalty` of the validator -- `penalty` The current `total_penalty` as defined above diff --git a/docs/mine-hnt/validators/requirements.mdx b/docs/mine-hnt/validators/requirements.mdx deleted file mode 100644 index 599c4f43c..000000000 --- a/docs/mine-hnt/validators/requirements.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -id: validators-requirements -title: Technical Requirements -sidebar_label: Technical Requirements -slug: /mine-hnt/validators/requirements ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Based on early tests, validator node requirements include: - -- Operating system: - - Planning on running from docker: Any linux based system capable of running docker - - Planning on running from source: Ubuntu 20.04 LTS -- CPU: - - Intel, AMD or ARM based processor 3.0 GHz or above with 4 cores or equivalent. - - In testnet, scores of [GeekBench 5](https://www.geekbench.com/) Multi-Core of greater than 2,200 have performed well - - For Intel and AMD systems, [AVX2 or AVX support](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions) is required. Verify your CPU supports these extensions by checking `grep avx /proc/cpuinfo` and verifying that AVX support is included in the output. - - These recommendations may change for mainnet as the size of consensus groups grow and hotspot transactions are added -- Memory: 8 GB or above -- Storage: 256 GB or more for mainnet. 64GB is sufficient for testnet. It is recommended that you keep your validator data on a separate disk. -- If using AWS, a t2.xlarge or c5a.xlarge EC2 instance or equivalent is recommended. If using another cloud provider, like GCP, Azure, or Digital Ocean, an instance with similar capabilities should be the target. -- Static IP address with ports `2154`(TCP) and `8080`(TCP) opened in your firewall with a route available to your validator host. -- Running on stable network connection free of things like proxies, NAT, etc. The load is largely symmetrical when producing blocks, so good upstream connectivity recommended. -- It is [discouraged to run Validators at home](/mine-hnt/validators/faqs-resources-providers/#technical). The one exception to this is if you live at an actual data center. If that's the case, you're allowed to run Validators at home. - -- Overall Baselining (do this after the validator is caught up to the tip of the chain, and running normally for a few hours) - - Review the underlying hardware your provider is using. You can review your instance cpu speeds by using `cat /proc/cpuinfo | egrep -i "name|stepping|Mhz" | sort | uniq -c`. Some providers use the Turbo speeds as marketing and others the regular speed of the processor. - - Install sar package using `sudo apt install sysstat` - - Confirm that sar is enabled in `/etc/default/sysstat` review that the `ENABLED` line is set to `true`. - - Review the cron job and is set to the correct schedule that you would like to collect stats on. You can `sudo vi etc/cron.d/sysstat` file to adjust the default of collecting every 10 minutes `*/10 ...`. - - You can review your CPU steal using `sar` and looking at the `%steal` column. Averages of over 1% you should think about moving providers. You can also see this metric in `top` look for the `st` cpu metric on the second line. - - You can review your IOPS using `sar -b` - - You can review your Disk Bandwidth using `sar -d -p | egrep "sd[a-z]|DEV"` NOTE: this example command line is assumes `/dev/sd` device names. Your instance may have disks with different device names, so change this command as needed. - - You can review your Disk Latency with `sar -d -p | egrep "sd[a-z]|DEV"` review the `await` which should be < 10ms - - Review your Absorb and Commit Block times and they should be < 2500ms on average, not including the rewards blocks that will be much higher. To check ongoing times you can use `tail -f log/console.log | grep -E 'add_block|absorb_and_commit'` - - Once your validator is caught up you can use `grep -E 'add_block|absorb_and_commit' log/console.log | awk '{print $6 $8 }' | sed ':a;N;$!ba;s/\ngossipped/ /g'` as a historical listing of your console.log - - If you believe you are having trouble getting the advertised disk performance you can install and run the `fio` package to give you a full baseline of disk performance. Make sure to not be in a Consensus Group while benchmarking using `fio`. You can do this by running `miner info in_consensus`. diff --git a/docs/mine-hnt/validators/testnet/deployment-guide.mdx b/docs/mine-hnt/validators/testnet/deployment-guide.mdx deleted file mode 100644 index 3e8a96b03..000000000 --- a/docs/mine-hnt/validators/testnet/deployment-guide.mdx +++ /dev/null @@ -1,556 +0,0 @@ ---- -id: validators-testnet-deployment-guide -title: Validator Deployment Guide (Testnet) -sidebar_label: Deployment Guide -slug: /mine-hnt/validators/testnet/deployment-guide ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -This guide will cover the end-to-end process of deploying a Helium Validator on Testnet. It assumes you're starting from scratch. At the end, you'll have a Helium Validator deployed on the Network. - -:::info - -- This guide reflects deploying to the Testnet ONLY. -- Please review the [Expectations for Running a Validator on Testnet](/mine-hnt/validators) prior to beginning this process. - -::: - -## Prerequisites - -To successfully deploy a Helium Validator, you'll need to do the following: - -- Install the [Helium CLI Wallet](https://github.com/helium/helium-wallet-rs). You are welcome to build from source, but easiest to download the latest binary release. -- Deploy a virtual server on a cloud service like AWS, GCP, Azure, or Digital Ocean. Or deploy a physical server on which to run the validator. [The recommended hardware and networking requirements can be found here](/mine-hnt/validators/requirements/). - -## Create Testnet Wallet - -Once you have your [Helium CLI Wallet](https://github.com/helium/helium-wallet-rs) installed locally, it's time to create your Testnet Wallet. Run the following command to create it. (This command format assumes you're using the executable. If you've built the wallet from source it'll look slightly different.) - -:::warning - -It is a best practice to create your Helium CLI wallet on a separate machine from the one where you will run your Validator. - -::: - -``` -helium-wallet create basic --network testnet -``` - -You'll be prompted to supply a new passphrase to complete it. This is used to encrypt/decrypt the `wallet.key` file, and is needed to sign transactions. **Don't lose it.** - -This command will produce a `wallet.key` file on your machine, along with output similar to the following: - -``` -+-----------------------------------------------------+---------+--------+------------+ -| Address | Sharded | Verify | PwHash | -+-----------------------------------------------------+---------+--------+------------+ -| 1aP7nm6mGLMFtgiHQQxbPgKcBwnuQ6ehgTgTN8zjFuxByzJ8eA5 | false | true | Argon2id13 | -+-----------------------------------------------------+---------+--------+------------+ -``` - -Next, run the `info` command to get all the relevant details. - -``` -helium-wallet info -``` - -The output will look similar to this: - -``` -+--------------------+-----------------------------------------------------+ -| Key | Value | -+--------------------+-----------------------------------------------------+ -| Address | 1aP7nm6mGLMFtgiHQQxbPgKcBwnuQ6ehgTgTN8zjFuxByzJ8eA5 | -+--------------------+-----------------------------------------------------+ -| Network | testnet | -+--------------------+-----------------------------------------------------+ -| Type | ed25519 | -+--------------------+-----------------------------------------------------+ -| Sharded | false | -+--------------------+-----------------------------------------------------+ -| PwHash | Argon2id13 | -+--------------------+-----------------------------------------------------+ -| Balance | 0.00000000 | -+--------------------+-----------------------------------------------------+ -| DC Balance | 0 | -+--------------------+-----------------------------------------------------+ -| Securities Balance | 0.00000000 | -+--------------------+-----------------------------------------------------+ -``` - -Note the `Balance | 0.00000000`. - -Sad? Yes. But don't fret. It's only temporary. The next step is to acquire some Testnet Tokens (TNT). Lucky for you, they are free. - -## Acquire TNT from the Testnet Faucet - -Running a Validator requires a stake. This stake is `10000` tokens per Validator. For the Testnet we are using TNTs. - -To acquire them, head to [faucet.helium.wtf](https://faucet.helium.wtf/) and input your the public key from the wallet you just create. **Use your public wallet address. If you copy and paste the one above the TNT will be sent to someone else.** - -Once you've input your address, the Faucet will deliver just over `10000` TNT to your Testnet Wallet. This can take up to 10 minutes so please be patient. Make a cup of coffee, issue a compelling tweet, then check your wallet balance using the `balance` command: - -``` -helium-wallet balance -``` - -If all went to plan, you'll see this: - -``` -+-----------------------------------------------------+----------------+--------------+-----------------+ -| Address | Balance | Data Credits | Security Tokens | -+-----------------------------------------------------+----------------+--------------+-----------------+ -| 1aP7nm6mGLMFtgiHQQxbPgKcBwnuQ6ehgTgTN8zjFuxByzJ8eA5 | 10005.00000000 | 0 | 0.00000000 | -+-----------------------------------------------------+----------------+--------------+-----------------+ -``` - -Glorious. You have the `10000` TNT to stake one validator, and a bit extra to cover the transaction fees. Now it's time to get your Validator running. - -## Run a Validator - -With TNT in hand, it's time to deploy and run the actual Validator (can also be referred to as `miner` as the validator is part of the `miner` code base). - -:::warning - -If you haven't already, please review the [Validator Technical Requirements](/mine-hnt/validators/requirements). Specifically, on non-ARM systems `AVX` support is required. Verify that it exists on your host system by running the following: - -``` -grep avx /proc/cpuinfo -``` - -If nothing is returned from this command, your host system does not have AVX support and your validator may not be stable. - -::: - -You have two options for deploying the Validator. You just need to do ONE of the following: - -- [Deploy the Validator Using Docker](#deploy-the-miner-using-docker). Recommended if you are unfamiliar with building software. -- [Build the Validator form Source](#deploy-miner-from-source) - -### Deploy the Validator Using Docker - RECOMMENDED - -Start by updating your packager manager registry: - -``` -sudo apt-get update -``` - -And install Docker itself. (If needed, full directions on installing Docker on Ubuntu [can be found here](https://docs.docker.com/engine/install/ubuntu/).) - -``` -sudo apt-get install docker.io -``` - -To avoid needing to use Docker with `sudo` privileges, add your user to the docker group, replacing $USER with your username here: - -``` -sudo usermod -aG docker $USER -``` - -Log in and out of your account to apply these changes. You are now ready to use Docker. - -Now that docker is installed and ready, let's run the Validator. - -#### Run the Docker Container - -Before running the container for the first time, it is mandatory to pick a "system mount point". This allows you to easily maintain your Validator's blockchain identity - specifically it `swarm keys` - and blockchain state through image updates. Without doing this, you will lose these items when upgrading docker images. - -The validator directory should be created on a persistent EBS volume (if you're using AWS) or something similar that lives across server lifetimes. - -``` -mkdir $HOME/validator_data -``` - -You can then use the `run` command to start your container for the first time: - -``` -docker run -d --init \ ---restart always \ ---publish 2154:2154/tcp \ ---publish 8080:8080/tcp \ ---name validator \ ---mount type=bind,source=$HOME/validator_data,target=/var/data \ -quay.io/team-helium/validator:latest-val-amd64 -``` - -- `-d` option runs in detached mode, which makes the command return or not; you may want to omit if you have a daemon manager running the docker for you. -- `--init` to indicate that an init process should be used as the PID 1 in the container. This ensures the usual responsibilities of an init system, such as reaping zombie processes, are performed inside the created container. When `docker exec` commands are run, it's possible for these to create zombie processes on the host. This eliminates that issue. You can read more about this [here](https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/) and [here](https://docs.docker.com/engine/reference/commandline/run/). -- `--restart always` asks Docker to keep the image running, starting the image on boot and restarting the image if it crashes. Depending on how you installed Docker in your system, it'll start on boot. In the AWS AMI above, we use systemd (systemctl status docker to check). -- `--publish 2154:2154/tcp` maps the port 2154 on the docker container to 2154 on the host machine. This allows inbound connections on port 2154 to the host machine to be routed to the validator container. In addition to this mapping, it is up to you to ensure that this port is available from the public internet to the host machine. This will require modifying firewall and/or security group settings in your cloud provider of choice. -- `--publish 8080:8080/tcp` maps the port 8080 on the docker container to 8080 on the host machine. This allows inbound connections on port 8080 to the host machine to be routed to the validator container. In addition to this mapping, it is up to you to ensure that this port is available from the public internet to the host machine. This will require modifying firewall and/or security group settings in your cloud provider of choice. -- `--name validator` names the container, which makes interacting with the docker easier, but feel free to name the container whatever you want. -- `--mount` the parameters above will mount the container's `/var/data/` directory to the systems directory `$HOME/validator_data`. You will want this folder to be persistent across runs of the docker container as it will contain both the blockchain data and the miner key of your validator. -- `quay.io/team-helium/validator:latest-val-amd64` Lastly, this points to the docker **_image_** for the Validator that is tagged as the "latest" for the amd64 architecture. For arm architectures, replace with `latest-val-arm64`. - -Additional flags that may be helpful: - -- `-e "NAT_INTERNAL_IP=192.168.0.139"` If your host machine is behind a firewall that is performing network address translation (NAT), adding this flag will assist the Validator to quickly determine the IP address of the host machine. Replace the IP with yours from `ip addr`. This goes hand-in-hand with the following flag: -- `-e "NAT_EXTERNAL_IP=$( curl -s ipv4.icanhazip.com )"` This also assists the Validator in quickly identifying the external IP of the NAT. The `curl` commmand simply queries an external provider and returns the public IP address of the interface. You can remove this and replace with your external IP if it is known and will not change (static IP). -- Similar commands are available with `NAT_INTERNAL_PORT` and `NAT_EXTERNAL_PORT` if any port translations are occuring. If not, these may be omitted. - -Once you run the command above, docker will retrieve the latest Validator image, and start the docker process. Barring any errors, your Validator is running. - -#### Configure your Docker to update the Validator automatically - RECOMMENDED - -Having all Testnet Validators running the latest release of Validator software is crucial to quickly test code additions, changes, and bug fixes. Having an out-of-date Validators can increase election times or even stall the chain depending on the changes made. - -To ensure that each Validator gets updated quickly without your manual involvement, we will use a docker container process called [Watchtower](https://containrrr.dev/watchtower/). This is a docker container that, based on an interval, reviews the running containers to see if there is an updated image available for the container. If so, it stops the running container, and creates a new container with the updated image. - -:::info - -Watchtower simply reviews the `docker run` commands that were used to launch the running containers and checks for newer images for these containers. Therefore it is imperative that your validator `docker run` command reference the `latest-val-amd64` or `latest-val-arm64` image tag or **it will never update**. - -::: - -Start watchtower with the following command: - -``` -docker run -d \ ---restart always \ ---name watchtower \ --v /var/run/docker.sock:/var/run/docker.sock \ -containrrr/watchtower \ ---cleanup \ ---interval 1800 -``` - -- `-v /var/run/docker.sock:/var/run/docker.sock` A volume flag to allow the watchtower container to monitor running containers. -- `containrrr/watchtower` The Image of the watchtower container -- `--cleanup` Passes a flag into the watchtower container. This instructs watchtower to remove old images after updating. -- `--interval 1800` Poll interval (in seconds). This value controls how frequently watchtower will poll for new images. For Testnet, the recommendation is to check for an updated image every 30 minutes. - -Additional flags that may be helpful: - -- `validator` Include the name of the container as the last line in the command above. Including this at the end simply tells watchtower to only monitor the validator container and not any of the other containers running on your docker server. This is included here for convenience if there are other docker containers running on the host. If the validator is the only service running, this can be omitted. - -That's it! Watchtower will check to ensure the running validator has the latest image and will automatically stop, update, and run your container if required. Watchtower will also monitor and update the watchtower image itself. - -Finally, you may be asking if there's a method to know if watchtower was successful in identifying an upgrade and installing it. Read through the [Watchtower notifications options](https://containrrr.dev/watchtower/notifications/) page how you can extend this guide further and receive notifications through Slack, Teams, Discord, Pushover, email or other methods. - -:::info - -If you choose to not run Watchtower for automatic updates of the Docker image during Testnet, please watch and respond to upgrade requests on the `#validators-announcements` channel on the [Helium Discord](https://discord.gg/helium) server in a timely manner. - -::: - -#### Upgrade your Docker container manually - Not needed if running watchtower - -As mentioned, we anticipate numerous, frequent updates during Testnet and recommend using the [latest miner tag found here](https://quay.io/repository/team-helium/validator?tag=latest&tab=tags). - -To upgrade your docker container to the latest version: - -``` -docker stop validator && docker rm validator - -docker pull quay.io/team-helium/validator:latest-val-amd64 - -docker image prune -f -``` - -These commands will stop the running container, then delete the container. Pull an updated Validator docker image from the repository. Delete any out of date Validator docker images. - -Finally, re-launch docker with the same command as above under the Run the Docker Container section. - -#### Interact with the Validator within the Container - -You may want to interrogate the Validator or interact with it. Docker's `exec` command enables this. For example: - -``` -docker exec validator miner info height -``` - -As shown above, you can prepend `docker exec validator` to any of the commands documented or create an alias such as - -``` -alias miner="docker exec validator miner" -``` - -And start the container again as described above, but with the new release tag. - -And thanks to the `--mount option`, the blockchain data and the validator keys are preserved through updates. - -:::info - -Now that you have your Validator running, you need to [actually Stake tokens to make it official.](#stake-tokens-to-your-validator) - -::: - -### Deploy Miner from Source - -Ok, brave soul. Here's what you'll need to build and deploy the miner from source: - -- miner -- Erlang package (the latest 22 or 23 versions are supported, the 24 release candidate will NOT work) -- `libwxgtk` package -- git - -Before we get started, make sure you're fully up to date: - -``` -sudo apt-get update -y -``` - -Next, let's install all the things. Start by cloning the `validator` branch of `miner`: - -``` -git clone -b pevm/validators https://github.com/helium/miner.git -``` - -Then proceed to get you some Erlang (here we're specifying `22.3.1`): - -``` -wget https://packages.erlang-solutions.com/erlang/debian/pool/esl-erlang_22.3.1-1~ubuntu~bionic_amd64.deb -``` - -Next, get the `libwxgtk` package: - -``` -wget http://mirrors.kernel.org/ubuntu/pool/universe/w/wxwidgets3.0/libwxgtk3.0-0v5_3.0.4+dfsg-3_amd64.deb -``` - -And finish things off by acquiring a some wonderful dependencies: - -``` -sudo apt install -y libdbus-1-dev autoconf automake libtool flex libgmp-dev cmake libsodium-dev libssl-dev bison libsnappy-dev libclang-dev doxygen make cargo g++ libsctp1 libncurses5 libwxbase3.0-0v5 build-essential cmake libdbus-1-dev mosh vim parallel -``` - -Then we need to unpack and install all of this stuff. Start with `libwxgtk`: - -``` -sudo dpkg -i libwxgtk3.0-0v5_3.0.4+dfsg-3_amd64.deb -sudo apt update -y -``` - -Then onto Erlang. First `unpack` then `install`: - -``` -sudo dpkg -i esl-erlang_22.3.1-1~ubuntu~bionic_amd64.deb -``` - -``` -sudo apt-get install -f -``` - -Then navigate to your `miner` directory: - -``` -cd miner -``` - -Build the `miner` - -``` -./rebar3 as test_validator release -``` - -Then start the `miner`: - -``` -_build/test_validator/rel/miner/bin/miner start -``` - -#### Load the Genesis Block - -One last step. When building from source, you'll need to manually load the genesis block once your miner is deployed and running. To do this, run the following: - -``` -wget https://snapshots.helium.wtf/genesis.testnet -miner genesis load -``` - -Note that in the above `miner` command, the `miner` binary here is nested within `_build/validator/rel/miner/bin/miner`. - -## Stake Tokens to Your Validator - -Now that your Validator node is running, the final step in the process is to formally stake TNT to your Validator. As part of the staking process the Validator address needs to both be in the staking transaction and sign the transaction. After a wallet stakes a validator node, the wallet becomes that node’s owner, has control over that validator node, and receives rewards. - -First, double check your wallet balance to make sure you have the `10000` TNT required to stake, along with a few extra to cover the transaction fees. (The faucet provides all of this.) - -``` -helium-wallet balance - -+-----------------------------------------------------+----------------+--------------+-----------------+ -| Address | Balance | Data Credits | Security Tokens | -+-----------------------------------------------------+----------------+--------------+-----------------+ -| 1aP7nm6mGLMFtgiHQQxbPgKcBwnuQ6ehgTgTN8zjFuxByzJ8eA5 | 10005.00000000 | 0 | 0.00000000 | -+-----------------------------------------------------+----------------+--------------+-----------------+ -``` - -To stake tokens, we need to get the validator node address. Obtain it using the following: - -``` -miner peer addr -``` - -The resulting output will look like this (except with your specific validator address). The string after `/p2p/` is your Validator address: - -``` -/p2p/1YwLbGTCEhVbwKEehRVQRC8N3q35ydXTH1B6BQys5FB1paHssdR -``` - -We can now use this address with the Helium Wallet CLI `validators stake` command to formally stake the `10000` TNT required. Here's the full command using the Validator address from above as an example. (**Make sure you replace it with yours.**) - -``` -helium-wallet validators stake one 1YwLbGTCEhVbwKEehRVQRC8N3q35ydXTH1B6BQys5FB1paHssdR 10000 --commit -``` - -After running this, you'll need to input your wallet passphrase to sign the transaction. - -And with that, you're done. Congratulations! You're running a Helium Network Validator. - -## Verifying Validator Victory - -Now that you're up and running with a Validator, there are a few things you can examine to make sure things are hunky dory. - -### Time Expectations - -The blockchain takes time. The distributed nature of verifying transactions into the blockchain takes time. The validator information gossiped on the blockchain takes time. APIs that run to update the [explorer](https://explorer.helium.wtf) are scheduled and have intervals. Basically, you won't be able to run the validator and instantly see that everything is "good". - -After the validator has been up and running for 15 minutes, proceed with some of the steps below. - -### Check the API - -The [Validator API](/api/blockchain/validators) provides several useful calls to help monitor your Validator and the state of the Testnet. - -``` -https://testnet-api.helium.wtf/v1/validators/ -``` - -or - -``` -https://testnet-api.helium.wtf/v1/validators/ -``` - -will be very useful. - -You should see JSON output that looks similar to this. You are looking for `"online": "online"` and `"stake_status": "staked"` - -``` -{ - "data": { - "version_heartbeat": 2, - "status": { - "online": "online", - "listen_addrs": [ - "/ip4/1.2.3.4/tcp/2154" - ], - "height": xxxx - }, - "stake_status": "staked", - "stake": 1000000000000, - "owner": "1aHpEUzcsBvjw1xv8PnoYAYM5yrodqbXKwBitHS8hamWT4TQVDp", - "last_heartbeat": xxxx, - "block": xxx, - "address": "1ZobTUK43hjTwTvwihEoCvh3SuuvfGp9AAR85c8mQdpULjntYWH" - } -} -``` - -### Status commands to run on the validator server. - -Note that you may need to adjust these if you're running in Docker. - -``` -miner info p2p_status - -+---------+------+ -| name |result| -+---------+------+ -|connected| yes | -|dialable | yes | -|nat_type | none | -| height | 2447 | -+---------+------+ -``` - -- `connected` means you have at least one connection to a peer (outgoing connections OK) -- `dialable` means peers can reach you (incoming connections OK) -- `nat_type` of `none` is best for validators. Anything else means the validator code thinks it is behind some kind of NAT -- `height` is the currently synced block - -``` -miner peer book -s - -+------------------------------------------------+-------------+----------+---------+---+----------+ -| address | name |listen_add|connectio|nat|last_updat| -+------------------------------------------------+-------------+----------+---------+---+----------+ -|/p2p/1YwLbGTCEhVbwKEehRVQRC8N3q35ydXTH1B6BQys5FB|short-umber-b| 1 | 4 |non| 111.88s | -+------------------------------------------------+-------------+----------+---------+---+----------+ - -+----------------------------+ -| listen_addrs (prioritized) | -+----------------------------+ -|/ip4/173.230.156.39/tcp/2154| -+----------------------------+ - -+-----------------+--------------------+---------------------------------------+-------------------+ -| local | remote | p2p | name | -+-----------------+--------------------+---------------------------------------+-------------------+ -|/ip4/172.17.0.2/t|/ip4/50.16.94.64/tcp|/p2p/1Y9MoitLaEbXPdrZZogURSNQ54eXcp2Ljv|agreeable-tweed-pir| -|/ip4/172.17.0.2/t|/ip4/143.110.235.209|/p2p/1YAFBayNk8bXkkEpqXdxu73kFTjtMqXKTy|prehistoric-hemp-ra| -|/ip4/172.17.0.2/t|/ip4/73.2.34.208/tcp|/p2p/1YEC3g9Hep4hzbDwLFbJ4SqrthTcjGDWdP|wonderful-arctic-ch| -|/ip4/172.17.0.2/t|/ip4/172.90.214.198/|/p2p/1YLJC8DSN6SF17S9nXfYEwTXKtoXpgqBSX|howling-ultraviolet| -|/ip4/172.17.0.2/t|/ip4/13.59.168.136/t|/p2p/1YZhCNPj181YL21aHECXLS1zvDzVY43px9|macho-chocolate-but| -+-----------------+--------------------+---------------------------------------+-------------------+ -``` - -You're looking for `listen_addrs`. If you don't have at least one, your validator hasn't settled on how to tell other peers to reach it. Often this can take 15-30min, sometimes longer. - -### Check the Explorer - -Head over to the [Helium Testnet Explorer's Validators Page](https://explorer.helium.wtf/validators) and search for your validator. This may take 10 to 15 minutes from the time that your Validator is both online and staked. You should see your 3-word validators name (short-umber-bull in the example above) listed. It may be easier to sort by #, decending, as your new Validator will be near the top of the list. Remember you can view the name of your validator through `miner info summary` or just `miner info name`. - -Thank you for being a part of the Helium Validators initiative. - -## What to Do When There Is a Chain Restart - -You may be here because there was an alert on `#validators-announcements` on the [Helium Discord Server](https://discord.gg/helium) that the chain has been restarted. This short guide will walk you through the reasons and steps for what to do to get back on the new chain. - -### What happened and why? - -The goal of the Validator initiative is to ultimately bring together a more robust Helium network through a resiliant consensus group model – ensuring that transactions are verified and blocks are added to the blockchain. To build resiliency means that it's the job of the Testnet process to rigorously _test_ the functionality and capabilities of the validator network. - -The announcement in `#validators-announcements` means that this stress testing has stalled the chain. This means that either the concensus group is unable to elect a new group, or that the group has stopped making blocks, or another reason for the chain to fail. In these cases, there is a "restart" of the chain, beginning with a new [genesis block](https://www.investopedia.com/terms/g/genesis-block.asp) and starting the block count from `1`. The next chain will contain additional fixes and functionality to build robustness, and the testing will continue. - -What this means is that your validator will not participate in the new chain without the steps taken below. - -### How do you know if there was a chain restart? - -There are a few things you will notice may happen if you're "off chain". - -- You read an announcement on `#validators-announcement` -- Your validator block height (`miner info height`) is higher than the block height reported on [explorer](https://explorer.helium.wtf) -- Your validator block height is not moving. -- Your wallet had TNT in it before, but now it's showing `0` -- The version of your validator seems to be way behind other versions reported on explorer - -### Steps to Get Back On the Current Chain - -Getting back on chain is easy now that you've got everything installed: - -#### Fund the Wallet - -- You do not need to delete and re-create the wallet. The wallet balance will show `0`, since this is a new blockchain and you have no TNT. If you happen to run `helium-wallet balance` and receive an error, give it a few minutes. The API may still be restarting after pointing to the new chain. Your wallet password is the same. -- When the balance shows `0`, add funds to your wallet from the [Faucet](https://faucet.helium.wtf/) exactly how you performed the task earlier. Follow the [Acquire TNT from the Testnet Faucet](#acquire-tnt-from-the-testnet-faucet) directions. - -#### Reset the Validator - Docker Edition - -- `docker stop validator && docker rm validator` - Stop the running container, delete the container. -- `cd` into the `validator_data` directory you setup earlier in the Deploy step above. Then run `sudo rm -rf blockchain* ledger.db state_channels.db log checkpoints` This will delete everything in this folder except for the `miner` folder. Please be sure you're in the correct folder before running `rm` commands. -- The `miner` folder contains a single `swarm_key` file. If you want to keep the 3-word name of your miner, keep this file. If you want a new one, you can delete this file as well. -- There will be a new validator version when the chain is relaunched, so force pull the new docker image version prior to starting the validator. `docker pull quay.io/team-helium/validator:latest-val-amd64` -- Restart the validator with your `docker run` command that you used [during the install](#deploy-the-validator-using-docker---recommended). -- Watchtower should still be running from our install and will continue to update the docker image automatically. - -#### Reset the Validator - From Source - -- Stop the validator, delete the entire `miner` folder - saving the `swarm_key` file in `/miner/_build/validator/rel/miner/data/miner` if you like. Pull from source with the updated version tag, start the validator. -- Load the new genesis block `wget https://snapshots.helium.wtf/genesis.testnet` `miner genesis load `. - -#### Restake - -- Follow the same process from [Stake Tokens to Your Validator](#stake-tokens-to-your-validator) to stake the 10,000 TNT received from the faucet for your Testnet validator. If you kept the `swarm_key` file above, your validator node address will be the same. If you deleted that file, you'll have to ensure you have the new node address by running `miner peer addr` as outlined in that section. - -That's it! You're back on the new chain and should see similar output as defined in [Verifying Validator Victory](#verifying-validator-victory). diff --git a/docs/mine-hnt/validators/testnet/design.mdx b/docs/mine-hnt/validators/testnet/design.mdx deleted file mode 100644 index 7a15e4e73..000000000 --- a/docs/mine-hnt/validators/testnet/design.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -id: validators-testnet-design -title: Validators Design (Testnet) -sidebar_label: Design -slug: /mine-hnt/validators/testnet/design ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -A few things are slightly modified from what will eventually be Mainnet. Specifically: - -* Developers need Testnet Network Tokens (TNT) to stake test validator nodes. You can get them [via the Faucet](https://faucet.helium.wtf) but, before you do that, read the [Validator Deployment Guide](/mine-hnt/validators/testnet/deployment-guide) so you know how to use them. -* The Testnet Consensus Group will be sized dynamically based on the number of active testnet participants. -* The cooldown period - defined as the number of blocks after unstaking when the validator node doesn't earn rewards, and the stake is returned to the owner's wallet - is shortened to 180 blocks (or approximately 3 hours). On Mainnet this period will be 250,000 blocks (or approximately 5.8 months). diff --git a/docs/mine-hnt/validators/testnet/expectations.mdx b/docs/mine-hnt/validators/testnet/expectations.mdx deleted file mode 100644 index ed9c4d42f..000000000 --- a/docs/mine-hnt/validators/testnet/expectations.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -id: validators-testnet-expectations -title: Validator Expectations (Testnet) -sidebar_label: Expectations -slug: /mine-hnt/validators/testnet/expectations ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -As Validators will play an important role in the expansion, stability and success of the Helium network moving forward, it's important to set expectations for running a Validator, especially during the Testnet process. - -In participating in Testnet, the expectations are that you will: - -- Join the [Helium Discord](https://discord.gg/helium) server to take part in the real-time Validator development. Participate in the `#validator` channel, but more importantly subscribe to alerts in `#validators-announcements`. `#validators-announcements` will provide you with important, timely information for upgrades and feedback during this process. -- Be attentive to upgrade the Validator software when requested through `#validators-announcements`. This may include tasks that will require you to delete & re-stake your Validator instance, or perform other tasks that will assist the team in bringing the best product to the network. -- Be proficient in command-line driven linux-based operating systems, comfortable working with cloud based service providers (AWS, Azure, Linode, DigitalOcean, or GCP, etc.), comfortable with working with firewall rules / NAT and other basic networking components, and experienced in working with docker images and controls. - -The Helium team as well as the greater Helium community is continually attemping to make this process as clear and easy to understand as possible. However, during this time you can expect much change. - -:::warning - -We understand that not everyone will be able to meet these expectations. It may be better to wait for the public availability of validators. There will be future announcements on the availability of staking your own validator on mainnet. - -::: diff --git a/docs/mine-hnt/validators/testnet/test-cases.mdx b/docs/mine-hnt/validators/testnet/test-cases.mdx deleted file mode 100644 index 27b80df19..000000000 --- a/docs/mine-hnt/validators/testnet/test-cases.mdx +++ /dev/null @@ -1,26 +0,0 @@ ---- -id: validators-testnet-test-cases -title: Test Cases -sidebar_label: Test Cases -slug: /mine-hnt/validators/testnet/test-cases ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Perform the following test cases to help with testing: - -* Set up a wallet -* Set up a validator node -* Stake testnet network tokens (TNT) -* Observe wallet receives rewards -* Unstake TNT, observe: - * no longer in consensus group - * no longer receiving rewards -* Take validator offline - * prior to consensus group - * during consensus group -* Restake owner wallet -* Transfer ownership of stake to different validator node (same wallet, different wallet) -* Set up wallet tied to multiple validator nodes - -Use the ```#validator``` channel on our [Discord](https://discord.gg/helium) server to provide feedback and report issues. diff --git a/docs/mine-hnt/validators/testnet/wallet.mdx b/docs/mine-hnt/validators/testnet/wallet.mdx deleted file mode 100644 index 1d60ce056..000000000 --- a/docs/mine-hnt/validators/testnet/wallet.mdx +++ /dev/null @@ -1,193 +0,0 @@ ---- -id: validators-testnet-wallet -title: Configure a Wallet (Testnet) -sidebar_label: Configure a Wallet -slug: /mine-hnt/validators/testnet/wallet ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -You’ll need an owner wallet to: - -- Stake your Testnet Network Tokens (TNT) -- Receive validator node consensus group rewards - -:::info -You can have a single wallet for multiple validator nodes. However multiple wallets for a single validator node is not supported. A single stake transaction from a single wallet must be used to stake a validator. - -::: - -:::warning - -Do NOT run or store the helium-wallet or wallet.key file on your validator. Backup the wallet.key file and protect the password used to create the wallet. - -::: - -Download the command line wallet application from the [Helium wallet-rs github release page](https://github.com/helium/helium-wallet-rs/releases) and choose the appropriate architecture for your environment. Download the associated architecture .checksum file. - -Before running wallet commands, verify the integrity of the downloaded helium-wallet archive. For example, run `sha256sum helium-wallet-v1.6.4-x86-64-macos.tar.gz` and verify the resulting checksum matches the checksum provided in the `helium-wallet-v1.6.4-x86-64-macos.checksum` file. - -The `sha256sum` binary is included in linux and MacOS distributions. For Windows users, run `certUtil -hashfile .\helium-wallet-v1.6.4-x86-64-win.zip SHA256` to produce the sha256sum. - -## Wallet Commands - -At any time use `-h` or `--help` to get more help for a command. - -### Create a Wallet - -`./helium-wallet create basic --network testnet` - -#### Create or Use Wallet without Password Input - -For security reasons, it is generally recommended that you type in your password every time. Storing the password in an environmental variable makes it very easy for the password to get compromised. Sometimes though, despite the security risks, you may want to interact with the CLI without inputting the password. In this case, using the environmental variable `HELIUM_WALLET_PASSWORD` enables this. - -``` -HELIUM_WALLET_PASSWORD=p4ssw0rd ./helium-wallet create basic --network testnet -``` - -### View wallet balance and public key - -`./helium-wallet info` view public key and TNT balance. You’ll need this public key address to obtain TNT needed for staking. - -To obtain TNT tokens visit [faucet.helium.wtf](https://faucet.helium.wtf/). - -:::warning - -Always make sure to inspect the transaction _before_ adding the **--commit** option to sign and submit it to the api. There is no undo. - -::: - -### Stake Tokens - -After you have received your TNT you need to stake these tokens. - -As part of the staking process the validator node address needs to be in the staking transaction and also needs to sign the transaction. After a wallet stakes a validator node, the wallet becomes that node’s owner, has control over that validator node, and receives rewards. - -#### To stake tokens perform the following: - -- Obtain the validator node address: - - - On the validator, run `miner peer addr`. This will produce something like: `/p2p/112sSfUCQrVNAfFKVZWUSCeLs67wH8o1xz4yj4nKSPJKBT8bUkXi` - - In this example the part following the final slash is the validator node's public address: `112sSfUCQrVNAfFKVZWUSCeLs67wH8o1xz4yj4nKSPJKBT8bUkXi`. - -- Stake single Validator with the TNT: - - `./helium-wallet validators stake one 10000` - -Use `--commit` after preview to submit the transaction to network. - -### List Associated Validators - -It's possible to view a list of associated validators to a wallet, along with their current status. `./helium-wallet validators list` will produce a table similar to below: - -``` -+-----------------------------------------------------+-----------------------------------------------------+----------------+--------+ -| Address | Owner | Stake | Status | -+-----------------------------------------------------+-----------------------------------------------------+----------------+--------+ -| 1Za3L1R32qPJJ546kteo7WP9t2DzWtTMw5u9jKfpJxZ9bswTgVG | 1a58oCFw79zAZCdkVBvnFSjqx7QM5FzSW5ppMVCf1HJeu8g1ywS | 10000.00000000 | staked | -+-----------------------------------------------------+-----------------------------------------------------+----------------+--------+ -``` - -This can be helpful in verifying staked validators or validators currently in cooldown after being unstaked. - -### Unstake Tokens - -If you unstake tokens the validator node enters a stake cooldown period. During this cooldown period the validator node will not earn rewards and at the end of the cooldown period (currently 250,000 blocks or approximately 5.7 months in mainnet) your initial staking amount will be released to the wallet. - -To ensure the operator understands this unstake operation is not reversible and cannot be shortened, there are additional calculations to be performed in the unstake command. You need to include the stake release block height which should be at least the current block height plus the cooldown period, and 5-10 blocks to allow for chain processing delays. - -For example, if the current block height was 5000, you'd add 250,000 for the stake withdrawl cooldown period, plus an additional 10 blocks to allow for chain processing delays. Therefore the `stake-release-height` = `5000 + 250000 + 10` or `255010`. - -:::info - -For testnet, the cooldown period is shortened to 180 blocks, approximately 3 hours. In the above calculation, replace `250000` with `180`. - -::: - -The cooldown length, in blocks, is called `stake_withdrawal_cooldown` and is a chain variable. This variable is viewable by running `miner ledger variables stake_withdrawal_cooldown`. - -#### To unstake tokens from a validator node perform the following: - -Obtain the validator node public address as described in [the stake command](#stake-tokens) and calculate the `stake-release-height` as defined above. - -`./helium-wallet validators unstake --stake-release-height ` - -Use `--commit` after previewing to submit the transaction to network. If you wait too long to commit, you may need to recalculate the `stake-release-height` value. - -To check the status of the unstake transaction, it's possible to copy the received hash into the Explorer, or query the [API transaction](http://localhost:3000/api/blockchain/transactions). A successful unstake transaction will also change the status to `cooldown` when viewing [associated validators](#list-associated-validators) to the wallet. - -:::warning - -Once the unstake command is committed, this cannot be reversed. The validator will cease earning rewards and the stake amount will not be returned to the staking wallet until the 250,000 block cooldown period has completed. - -::: - -:::info - -Once a validator has been successfully unstaked, it cannot be staked again. The validator may be stopped and deleted, including the `swarm_key`. Wallet commands to stake this validator's public address again will fail. - -::: - -### Transfer stake - -A validator node's stake can be transferred to other validator nodes in the same wallet or a different one. - -If the stake is transferred to a validator node in a different wallet, the owner of the other wallet must accept the transfer to complete the transaction. - -#### To transfer stake to a new validator node in the same wallet: - -`./helium-wallet validators transfer create --new-address --old-address ` - -Use `--commit` after previewing to submit the transaction to network. - -This will produce an output similar to the following: - -``` - -{ - "amount": 0.0, - "fee": 55000, - "hash": "q4Q7WTT0lD-EyjVFsW8hhdIw8Js339TgZpwTdA8_uPs", - "new_address": "1ZFavPP8drcqAXJPT6mLuZQqwjWNhWGr9vJ3Ajs3uJyFGW7sUMX", - "new_owner": "current", - "old_address": "1YpifvrQWUFoHDGyYZoA2FAxmXPNcMNjnRd27uv81t8CzBBNW85", - "old_owner": "1aXQ6WyNkibzhHXCFYiJQAa3BEkJnbZFsuezo4qjpW7FAgDw9Xx", - "txn": "8gGvAQohEF7t+Kbveqj9hsmO9c/3krgGUVnL8rHv8Eg29JMiE8IGEiEQl2RGoxd+aznItHIVxL7Qizw0ng3t4tcA2kZA7mPqJMcaIRE+/nQNU16ZXpbzMmszzlSw+AiGAXeKg0q7kx1DdLlY7ypAM4Zz4UOX4tKcg2y079UGPhQ99hi8lSZwAwAUjxNMO9jGk5pGA1wP1BqidFWqtcPrIGuom+mdrOQLdEuBU0rFBDjYrQM=" -} - -``` - -#### To transfer stake to a new validator node in a different wallet: - -`./helium-wallet --format json validators transfer create --new-address --old-address --new-owner ` - -**Note: you must transfer the stake to a new validator node. ** - -This will produce an output similar to the following: - -``` -{ - "amount": 0.0, - "fee": 60000, - "hash": null, - "new_address": "1YeCAsuBq3fDTv8x4iB1fJn9zBbopHhjhXGpvVwN43JDptqMT11", - "new_owner": "1bBTWn843DwTXTyH3hbSMmDoJXHCU1D1U8cAYRdVE5rDnaS7fLb", - "old_address": "1ZFavPP8drcqAXJPT6mLuZQqwjWNhWGr9vJ3Ajs3uJyFGW7sUMX", - "old_owner": "1aXQ6WyNkibzhHXCFYiJQAa3BEkJnbZFsuezo4qjpW7FAgDw9Xx", - "txn": "8gHSAQohEJdkRqMXfms5yLRyFcS+0Is8NJ4N7eLXANpGQO5j6iTHEiEQRwd/IDnFy67A2NbC3IyYvLZUrsAojyJH85aeNi3SLA0aIRE+/nQNU16ZXpbzMmszzlSw+AiGAXeKg0q7kx1DdLlY7yIhEZVpU2QzwJ1SmikaTlSEyKCQ5mCRx/xOIUAsw5MYPIsWKkD3+X75w1+267InX30CD077Y8X3JK31FEg/X1bSpFehIQa6eY/DqfDEfDjLyq6UHpxsfBEE8M0zGs9okipefnAOOODUAw==" -} -``` - -You'll then need to send the txn value (a base64 string) to the new owner to be accepted. - -#### To accept the transfer the new owner performs the following: - -`./helium-wallet validators transfer accept --commit ` - -:::info - -Once a validator has had a stake transferred from it, it cannot be staked again. The validator may be deleted, including the `swarm_key`. Wallet commands to stake this validator's public address again will fail. - -::: - -More general wallet commands [here](/wallets/cli-wallet). diff --git a/docs/mine-hnt/validators/troubleshooting.mdx b/docs/mine-hnt/validators/troubleshooting.mdx deleted file mode 100644 index a3a3e226d..000000000 --- a/docs/mine-hnt/validators/troubleshooting.mdx +++ /dev/null @@ -1,117 +0,0 @@ ---- -id: validators-troubleshooting -title: Troubleshooting -sidebar_label: Troubleshooting -slug: /mine-hnt/validators/troubleshooting ---- - -**NOTE**: If you build the Validator from source, the paths below may be different for you. For the following Docker example, `/var/data` is inside the docker container which is mapped to your `validator_data` directory on the host system and `validator_data` is in your $HOME directory. It is also assumed that you've added `alias miner='docker exec validator miner'` to `~/.bashrc`. - -# Troubleshooting - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -There is a ```#validator``` [Discord](https://discord.gg/helium) channel available to reach other validator participants. Also use this channel to share feedback and report issues. - -## Confirm you are running the latest Validator version -Upgrade instructions can be found [here](https://docs.helium.com/mine-hnt/validators/mainnet/deployment-guide/#:~:text=a%20timely%20manner.-,Upgrade%20your%20Docker%20container,-To%20do%20manual) as well as the link to the latest miner tag. - -## View logs -* Tailing the `console.log` is always helpful to get an idea of what's going on. Assuming your data is mounted at `$HOME/validator_data` - * Run: ```tail -f $HOME/validator_data/log/console.log``` - -* This can be run directly on the Docker container as well: - * ```docker exec validator tail -f /var/data/log/console.log``` - -## Compromised server -If you find that the server has been compromised just wipe it (save the blocks to avoid having to resync the entire blockchain), close the hole, stand up a new validator and then transfer the stake to it. - -## Syncing to the blockchain -Syncing to the blockchain could be impacted for the following reasons: -* slow internet connection -* your validator is disconnecting -* you just launched an AMI instance (if using AWS) - -## Check block absorb times -* Run ```tail -f $HOME/validator_data/log/console.log | grep -E 'add_block|absorb_and_commit'``` and monitor it for several minutes to confirm blocks are being absorbed - * The fastest validators have a `validation took` time between 1,000 and 3,000ms, on average. Absorb times higher than this are not out of the norm, but consistently higher absorb times can indicate an issue with your Internet connectivity, disk or CPU speed. Absorb times approaching 60 seconds may prevent your validator from catching up to the tip of the chain, as new blocks are created approximately every 60s. - * Note: If you just loaded a snapshot or upgraded the miner version, absorb times may be higher than usual, so wait several hours before determining your average absorb time. - -## Validator low disk space -* If your validator is running low on disk space and you cannot increase it, it is safe to delete everything under the `$HOME/validator_data` **EXCEPT** for `$HOME/validator_data/miner` where your `swarm_key` is located. This is also a good time to backup your `swarm_key` if you haven't already. -* Simply stop your docker validator container, remove all the files/directories noted above, start the docker validator containter and follow the steps to [Grab the latest blessed snapshot from Helium](#grab-the-latest-blessed-snapshot-from-helium). -* Note: Deleting above data will also require you to load a snapshot and resync to the tip of the chain. If your validator height is already at or above the latest available snapshot height, as shown by `miner info height`, it is to your benefit to first create a snapshot by running `miner snapshot take filenamehere` so that you can load the snapshot after freeing up disk space. Snapshot files are currently ~400MB in size. -* If your current block height is behind the latest snapshot, you can simply follow the steps in the next section after freeing up space. - -## Grab the latest blessed snapshot from Helium - -Helium hosts snapshots for download for the convenience of syncing validators. You may download snapshot by following these steps: - -* First determine the height of the snapshot you would like to download: - * The list of latest snapshots which have been agreed upon by the Consensus Group is available from the API at [https://api.helium.io/v1/snapshots](https://api.helium.io/v1/snapshots) - * Additionally, the latest manually blessed snapshot used by hotspots to sync from is available at [https://snapshots.helium.wtf/mainnet/latest-snap.json](https://snapshots.helium.wtf/mainnet/latest-snap.json). Note: this link may include snapshots generated by Helium or the Helium ETL that were not agreed upon by the Consensus Group and may not have been tested to work on validators. -* Choose the block height you want to start from and download the snapshot from Helium: - * `curl -O https://snapshots.helium.wtf/mainnet/snap-` -* Move that file into your `validator_data` directory. -* Load snapshot from the file you curl'd: ```miner snapshot load /var/data/snap-```. - * This command may return error: ```RPC to 'val_miner@127.0.0.1' failed: timeout``` but the snapshot load actually continues to run in the background. - * You can confirm that the snapshot load has completed by running ```miner info height``` every few minutes until it successfully shows a block height >= the snapshot height you loaded. You can then move on to the next step. -* Confirm sync state is `active` via `miner repair sync_state`. - * If not active, you can resume transaction syncing via ```miner repair sync_resume```. -* Run ```miner info height``` every few minutes to confirm your block height is increasing. -* [Check your block absorb times](#check-block-absorb-times) - -## Grab a snapshot from another Validator - -**Make sure you trust the Validator that you take your snapshot from, shenanigans could ensue! This an advanced procedure use with caution!** - -* On the source Validator run `miner info p2p_status`. -* Temporarily pause transaction sync via ```miner repair sync_pause```. -* Cancel any in-progress transaction sync via ```miner repair sync_cancel```. -* On the source Validator take a snapshot via `miner snapshot take /var/data/snap-` using the height you determined from the first step. -* On the source Validator resume transaction syncing via ```miner repair sync_resume```. -* Move the `/var/data/snap-` file into the `validator_data` directory on the destination Validator. -* Load snapshot from the file you copied to the destination validator: ```miner snapshot load /var/data/snap-```. - * This command may return error: ```RPC to 'val_miner@127.0.0.1' failed: timeout``` but the snapshot load actually continues to run in the background. - * You can confirm that the snapshot load has completed by running ```miner info height``` every few minutes until it successfully shows a block height >= the snapshot height you loaded. You can then move on to the next step. -* Confirm sync state is `active` via `miner repair sync_state`. - * If not active, you can resume transaction syncing via ```miner repair sync_resume```. -* Run ```miner info height``` every few minutes to confirm your block height is increasing. -* [Check your block absorb times](#check-block-absorb-times) - -## Validator stuck at a block -If your validator appears to be stuck at a particular block and no longer syncing, you may need to take manual action for your validator to make progress. - -1. Reset the validator. You can reference this [testnet step](https://docs.helium.com/mine-hnt/validators/testnet/deployment-guide/#steps-to-get-back-on-the-current-chain) for commands. - -## Performance and DKG Penalties -If you aren't yet familiar with the penalty system, check out [Validator Penalties and Impact on Rewards](https://docs.helium.com/mine-hnt/validators/penalties/). - -Low-grade Performance and DKG penalties are very noisy and difficult to troubleshoot. - -Based on early data, it appears that if your validator has penalties where the sum (Performance + DKG) is less than (Tenure), your validator is performant in-line with expectations. - -The most common cause of Perf/DKG penalties is bad luck (due to bad peers or otherwise). - -A few other penalty root causes exist, each requiring detailed monitoring capabilities to troubleshoot. - -For the time/blocks when your validator accrued penalties, check your metrics dashboard (e.g., Grafana). -* CPU steal: was this spiking when you were in the CG? Is this at an elevated level generally (<1% is normal)? If regularly high, change hosting providers. -* Internet connectivity issues: did rate of network ingress / egress plateau or fall off while in consensus group? Check if your network usage is throttled. -* Slow disk write speeds: do your disk write speeds exceed 4ms/op (not a fixed line, just a level where "you could get dinged")? See if you can improve disk quality. -* Other metrics: memory usage, disk volume, disk i/o, write latency - -If you don't have a metrics dashboard and think a non-luck element may have caused your penalty, please set up metrics monitoring. - -Two options are [Tedder's miner_exporter](https://github.com/tedder/miner_exporter) and the [PaulVMo miner_exporter fork](https://github.com/PaulVMo/miner_exporter), which can be used in conjunction with Grafana (and Prometheus's built-in node_exporter) for detailed validator monitoring. - -Baselining your instance via command line tools is also documented here [Baselining Your Validator](https://docs.helium.com/mine-hnt/validators/requirements). - -## Resources - -* [HIP 25](https://github.com/helium/HIP/blob/master/0025-validators.md)- where it all started the approved validator proposal -* [HIP 25 explainer video](https://www.youtube.com/watch?v=qOEAxXaANkI&t=1s)- starring validator core developer -* [Frequently asked questions](https://github.com/helium/HIP/blob/master/0025-validators.md#frequently-asked-questions) -* [Wallet software repo](https://github.com/helium/helium-wallet-rs) -* [Validator node (miner) software repo](https://github.com/helium/miner) -* [helium.com/stake](https://www.helium.com/stake)- state your intention to stake once mainnet goes live diff --git a/docs/mine-hnt/validators/validators.mdx b/docs/mine-hnt/validators/validators.mdx deleted file mode 100644 index a7fb7b33a..000000000 --- a/docs/mine-hnt/validators/validators.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: validators -title: Validators -sidebar_label: Validators -slug: /mine-hnt/validators ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - - - -:::tip - -HNT staking has been enabled for Validators on Mainnet! - -::: - -Validators are a new entity on the Helium Blockchain that perform the work of the consensus group including verifying transactions and adding new blocks to the blockchain. - -## Mainnet - -* [Mainnet Deployment Guide](/mine-hnt/validators/mainnet/deployment-guide) - How to get up and running with your Validator on Mainnet. This guide covers staking, running, updating, and monitoring. -* [Validator Mainnet Explorer](https://explorer.helium.com/validators) - The easiest way to monitor the Validator magic on Mainnet. -* [Validator Releases](/mine-hnt/validators/mainnet/validators-release) - A description of the type and cadence for Validator releases. -* [Wallet Commands](/mine-hnt/validators/mainnet/wallet) - Additional wallet commands for use with validators. - -:::warning - -**Testnet to Mainnet Migration** - -There is no direct migration path to move Testnet Validators to Mainnet. To deploy on Mainnet, follow the deployment guide listed above. - -::: - -## Testnet - -* [Expectations](/mine-hnt/validators/testnet/expectations) - Read this guide first. These are the expectations of Testnet validators. -* [Design](/mine-hnt/validators/testnet/design) - Differences between the Testnet and the Mainnet. -* [Testnet Deployment Guide](/mine-hnt/validators/testnet/deployment-guide) - How to get up and running with your Testnet validator. Including staking, running, updating, and monitoring. -* [Wallet Commands](/mine-hnt/validators/testnet/wallet) - Additional wallet commands for use with validators. -* [Test Cases](/mine-hnt/validators/testnet/test-cases) - Test cases and areas of focus for the Testnet. -* [Testnet Explorer](https://explorer.helium.wtf/validators) - There is a new Explorer being developed by Helium and the community. - -## General Resources - -* [Technical Requirements](/mine-hnt/validators/requirements) - Information on the hardware, software, and network recommendations on hosting a validator. -* [Monitoring](/mine-hnt/validators/monitoring) - Monitoring a Validator -* [Troubleshooting](/mine-hnt/validators/troubleshooting) - Troubleshooting help and additional resources. -* [Penalties](/mine-hnt/validators/penalties) - Overview of validator penalties. -* [FAQs and Resources](/mine-hnt/validators/faqs-resources-providers) - Videos, FAQS, and details on commercial staking providers active in the community. diff --git a/docs/network-data/api-providers.mdx b/docs/network-data/api-providers.mdx new file mode 100644 index 000000000..63a56db11 --- /dev/null +++ b/docs/network-data/api-providers.mdx @@ -0,0 +1,55 @@ +--- +id: api-providers +title: Helium API Providers +pagination_label: API Providers +sidebar_label: API Providers +description: Helium API Provider Documentation +image: https://docs.helium.com/img/link-image.png +slug: /network-data/api-providers +--- + +## Helium Entity API + +Helium provides a basic API for accessing high-level data about entities on the network. + +- [Entity API Documentation](/network-data/entity-api) + +## Third-Party API Providers + +Helium's open on-chain data and Oracles enable third-party API providers to offer rich, +production-grade access to network data. These providers power robust applications and services in +the Helium ecosystem. + +### HeliumGeek + +HeliumGeek delivers a production-grade Helium API that blends on-chain and off-chain intelligence +into a single, reliable service. The same endpoints that drive our mobile apps and fleet management +platform power rewards tracking, Hotspot health monitoring, performance tracking, and custom vector +map tiles with confidence, giving us hands-on insight into what Helium operators really need. + +By focusing exclusively on Helium, we absorb every protocol change and publish new data the moment +it becomes available. Customers and clients lean on us for live dashboards and community explorers +because we operate the API around the clock, bolster it with proactive monitoring, and back it with +a track record of accuracy and stability that has supported the ecosystem since 2021. + +Flexible paid plans align with deployments ranging from boutique operations to nationwide fleets, +ensuring the infrastructure scales without sacrificing responsiveness or support. Our independent +funding model keeps the platform sustainable, while we still extend complimentary access to research +collaborations and other strategic partners that benefit the broader Helium community. + +- Website: [https://https://heliumgeek.com/api](https://https://heliumgeek.com/api/) +- API Documentation: [https://docs.heliumgeek.com](https://docs.heliumgeek.com) + +### Relay + +Relay API provides an easy access to all Helium Oracle, on-chain, and historical data via simple +REST endpoints. The API is public and free to use with the Community plan, sponsored by Helium +Foundation. Community can get instant access to data like Hotspot earnings, Hotspot information, +mobile data offload, and much more. + +Relay API also provides paid plans to help support users who are looking to access data at scale. +Paid plans offer higher monthly API call limits, premium features, and allow to fetch all historical +data, including from Helium L1. + +- Website: [https://www.relaywireless.com](https://www.relaywireless.com) +- API Documentation: [https://docs.relaywireless.com](https://docs.relaywireless.com) diff --git a/docs/network-data/entity-api.mdx b/docs/network-data/entity-api.mdx new file mode 100644 index 000000000..2343ffed6 --- /dev/null +++ b/docs/network-data/entity-api.mdx @@ -0,0 +1,692 @@ +--- +id: entity-api +title: Entity API Documentation +pagination_label: Entity API +sidebar_label: Entity API +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /network-data/entity-api +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# Entity API + +The Entity API is provided free of charge by Helium. The data provided focuses on infrequently +changing attributes of Hotspots such as their owner and asserted location. This API is provided +without any guarantees of uptime or support, and is intended for light use cases.For more in-depth +analysis, refer to [Oracles](/network-data/oracle-data) and +[Solana on-chain data](/network-data/solana-data). + +In the interest of anonymity, the latitude/longitude data provided by the API is obfuscated to +[H3](https://h3geo.org/docs/core-library/restable/) resolution 8 rather than resolution 12 stored +on-chain on Solana. + +:::note Active/Inactive Status + +Active or Inactive status is deprecated for this API and will return `false` for all Hotspots on all +routes. + +::: + +## Wallet Info by Wallet Public Key + +``` +GET https://entities.nft.helium.io/v2/wallet/:walletPublicKey +``` + +Get wallet information by wallet public key including Hotspot count, list of Hotspot records, and +token account balances. + + + + +`Path Parameters` + +| Param | Type | Note | +| ---------------------------- | -------- | ---------------------------------------- | +| Wallet public key (required) | _string_ | Solana public key/address for the wallet | + + + + +`200: OK` + +```json +{ + "hotspots_count": 1, + "hotspots": [ + { + "name": "string", + "description": "string", + "image": "string", + "asset_id": "string", + "key_to_asset_key": "string", + "entity_key_b64": "string", + "key_serialization": "string", + "entity_key_str": "string", + "hotspot_infos": { + "iot": { + "address": "string", // Solana address + "street": "string", + "city": "string", + "state": "string", + "country": "string", + "is_active": "boolean", //Deprecated, always false + "location": "string", // Obfuscated + "dc_onboarding_fee_paid": "string", + "elevation": 0, + "gain": 0, + "created_at": "string", + "asset": "string", + "lat": 0, // Obfuscated + "long": 0 // Obfuscated + }, + "mobile": { + "location": null + } + }, + "attributes": [ + { + "trait_type": "ecc_compact", + "value": "string" + }, + { + "trait_type": "entity_key_string", + "value": "string" + }, + { + "trait_type": "entity_key", + "value": "string" + }, + { + "trait_type": "rewardable", + "value": "boolean" + }, + { + "trait_type": "networks", + "value": ["string"] + }, + { + "trait_type": "iot_city", + "value": "string" + }, + { + "trait_type": "iot_state", + "value": "string" + }, + { + "trait_type": "iot_country", + "value": "string" + }, + { + "trait_type": "iot_lat", // Obfuscated + "value": 0 + }, + { + "trait_type": "iot_long", // Obfuscated + "value": 0 + } + ] + } + ], + "balances": [ + { + "mint": "hntyVP6YFm1Hg25TN9WGLqM12b8TQmcknKrdu1oxWux", + "balance": "0" + }, + { + "mint": "mb1eu7TzEc71KxDpsmsKoucSSuuoGLv1drys1oP2jh6", + "balance": "0" + }, + { + "mint": "iotEVVZLEywoTn1QdwNPddxPWszn3zFhEot3MfL9fns", + "balance": "0" + }, + { + "mint": "dcuc8Amr83Wz27ZkQ2K9NS6r8zRpf1J6cvArEBDZDmm", + "balance": "0" + } + ] +} +``` + +`500: Error` + +```json +{ + "statusCode": 500, + "error": "Internal Server Error", + "message": "string" +} +``` + + + + +## Hotspot Pagination Metadata + +``` +GET https://entities.nft.helium.io/v2/hotspots/pagination-metadata?subnetwork= +``` + +Get general information about the pagination of Hotspots in a particular subnetwork including +pagination page size, total number of Hotspots, and total number of pages. + + + + +`Query Parameters` + +| Param | Type | Note | +| --------------------- | -------- | ------------------------------------- | +| Subnetwork (required) | _string_ | Name of subnetwork (iot, mobile, etc) | + + + + +`200: OK` + +```json +{ + "pageSize": 0, + "totalItems": 0, + "totalPages": 0 +} +``` + +`400: Error` + +```json +{ + "statusCode": 400, + "error": "Bad Request", + "message": "string" +} +``` + +`500: Error` + +```json +{ + "statusCode": 500, + "error": "Internal Server Error", + "message": "string" +} +``` + + + + +## List Hotspots by Subnetwork + +``` +GET https://entities.nft.helium.io/v2/hotspots?subnetwork=&cursor= +``` + +Get a list of key-value pairs denoting Hotspots in a particular subnetwork. If the returned `cursor` +field is a non-null value, more results are available. If no cursor is provided (e.g., if the URL +does not include the `&cursor=` query string component), then the first page of results is +returned along with a cursor value for the subsequent page. + + + + +`Query Parameters` + +| Param | Type | Note | +| --------------------- | -------- | --------------------------------------------- | +| Subnetwork (required) | _string_ | Name of subnetwork (iot, mobile, etc.) | +| Cursor (optional) | _string_ | Cursor for the next page of Hotspots to fetch | + + + + +`200: OK` + +```json +{ + "cursor": "string", // Or null if there are no more Hotspots to fetch + "items": [ + { + "key_to_asset_key": "string", + "entity_key_str": "string", + "is_active": "boolean", //Deprecated, always false + "lat": 0, + "long": 0 + }, + { + "key_to_asset_key": "string", + "entity_key_str": "string", + "is_active": "boolean", //Deprecated, always false + "lat": 0, + "long": 0 + }, + { + "key_to_asset_key": "string", + "entity_key_str": "string", + "is_active": "boolean", //Deprecated, always false + "lat": 0, + "long": 0 + } + ] +} +``` + +`400: Error` + +```json +{ + "statusCode": 400, + "error": "Bad Request", + "message": "string" +} +``` + +`500: Error` + +```json +{ + "statusCode": 500, + "error": "Internal Server Error", + "message": "string" +} +``` + + + + +## Hotspot Info by Key to Asset Key + +``` +GET https://entities.nft.helium.io/v1/:keyToAssetKey +``` + +``` +GET https://entities.nft.helium.io/v2/hotspot/:keyToAssetKey +``` + +Get Hotspot records based on the key to asset value. Both the `/v1` and `/v2/hotspot` routes return +identical results and are merely provided for backward compatibility. + + + + +`Path Parameters` + +| Param | Type | Note | +| ----------------------- | -------- | -------------------------------------------- | +| Key to asset (required) | _string_ | Public key of on-chain `KeyToAssetV0` struct | + + + + +`200: OK` + +```json +{ + "name": "string", + "description": "string", + "image": "string", + "asset_id": "string", + "key_to_asset_key": "string", + "entity_key_b64": "string", + "key_serialization": "string", + "entity_key_str": "string", + "hotspot_infos": { + "iot": { + "address": "string", // Solana address + "street": "string", + "city": "string", + "state": "string", + "country": "string", + "is_active": "boolean", // Deprecated, always false + "location": "string", // Obfuscated + "dc_onboarding_fee_paid": "string", + "elevation": 0, + "gain": 0, + "created_at": "string", + "asset": "string", + "lat": 0, // Obfuscated + "long": 0 // Obfuscated + }, + "mobile": { + "location": null + } + }, + "attributes": [ + { + "trait_type": "ecc_compact", + "value": "string" + }, + { + "trait_type": "entity_key_string", + "value": "string" + }, + { + "trait_type": "entity_key", + "value": "string" + }, + { + "trait_type": "rewardable", + "value": "boolean" + }, + { + "trait_type": "networks", + "value": ["string"] + }, + { + "trait_type": "iot_city", + "value": "string" + }, + { + "trait_type": "iot_state", + "value": "string" + }, + { + "trait_type": "iot_country", + "value": "string" + }, + { + "trait_type": "iot_lat", // Obfuscated + "value": 0 + }, + { + "trait_type": "iot_long", // Obfuscated + "value": 0 + } + ] +} +``` + +`404: Error` + +```json +{ + "statusCode": 404, + "error": "Not Found", + "message": "string" +} +``` + +`500: Error` + +```json +{ + "statusCode": 500, + "error": "Internal Server Error", + "message": "string" +} +``` + + + + +## Hotspot Info by Entity/ECC Compact Key + +``` +GET https://entities.nft.helium.io/:eccCompact +``` + +Get Hotspot records based on the entity / ECC compact key value. + + + + +`Path Parameters` + +| Param | Type | Note | +| ------------------------ | -------- | --------------------------------------- | +| Entity / ECC compact key | _string_ | Legacy Helium L1 address of the Hotspot | + + + + +`200: OK` + +```json +{ + "name": "string", + "description": "string", + "image": "string", + "asset_id": "string", + "key_to_asset_key": "string", + "entity_key_b64": "string", + "key_serialization": "string", + "entity_key_str": "string", + "hotspot_infos": { + "iot": { + "address": "string", // Solana address + "street": "string", + "city": "string", + "state": "string", + "country": "string", + "is_active": "boolean", // Deprecated, always false + "location": "string", // Obfuscated + "dc_onboarding_fee_paid": "string", + "elevation": 0, + "gain": 0, + "created_at": "string", + "asset": "string", + "lat": 0, // Obfuscated + "long": 0 // Obfuscated + }, + "mobile": { + "location": null + } + }, + "attributes": [ + { + "trait_type": "ecc_compact", + "value": "string" + }, + { + "trait_type": "entity_key_string", + "value": "string" + }, + { + "trait_type": "entity_key", + "value": "string" + }, + { + "trait_type": "rewardable", + "value": "boolean" + }, + { + "trait_type": "networks", + "value": ["string"] + }, + { + "trait_type": "iot_city", + "value": "string" + }, + { + "trait_type": "iot_state", + "value": "string" + }, + { + "trait_type": "iot_country", + "value": "string" + }, + { + "trait_type": "iot_lat", // Obfuscated + "value": 0 + }, + { + "trait_type": "iot_long", // Obfuscated + "value": 0 + } + ] +} +``` + +`404: Error` + +```json +{ + "statusCode": 404, + "error": "Not Found", + "message": "string" +} +``` + +`500: Error` + +```json +{ + "statusCode": 500, + "error": "Internal Server Error", + "message": "string" +} +``` + + + + +## List OUI Organization Info + +``` +GET https://entities.nft.helium.io/v2/oui/all +``` + +Get a list of OUIs registered on the Helium Network and corresponding organization info. + + + + +`200: OK` + +```json +{ + "orgs": [ + { + "oui": 1, + "owner": "string", // Org admin key + "payer": "string", // Key only used for DC payments + "escrow": "string", // Escrow account key + "delegate_keys": [ + // List of keys allowed some specific actions, see services. + "string" + ], + "locked": "boolean" // Is org locked because of no payment + }, + { + "oui": 2, + "owner": "string", + "payer": "string", + "escrow": "string", + "delegate_keys": ["string"], + "locked": "boolean" + }, + { + "oui": 3, + "owner": "string", + "payer": "string", + "escrow": "string", + "delegate_keys": ["string"], + "locked": "boolean" + } + ] +} +``` + +`500: Error` + +```json +{ + "statusCode": 500, + "error": "Internal Server Error", + "message": "string" +} +``` + + + + +## OUI Organization Info by OUI ID + +``` +GET https://entities.nft.helium.io/v2/oui/:id +``` + +Get an OUI registered on the Helium Network and corresponding organization info by the OUI ID. + + + + +`Path Parameters` + +| Param | Type | Note | +| ----------------- | -------- | ---------------------------------------- | +| OUI ID (required) | _string_ | ID of the OUI (e.g., 1) for getting info | + + + + +`200: OK` + +```json +{ + "oui": 1, // OUI ID + "owner": "string", // Org admin key + "payer": "string", // Key only used for DC payments + "escrow": "string", // Escrow account key + "delegate_keys": [ + // List of keys allowed some specific actions, see services. + "string" + ], + "locked": "boolean" // Is org locked because of no payment +} +``` + +`400: Error` + +```json +{ + "statusCode": 400, + "error": "Bad Request", + "message": "string" +} +``` + +`500: Error` + +```json +{ + "statusCode": 500, + "error": "Internal Server Error", + "message": "string" +} +``` + + + diff --git a/docs/network-data/legacy-blockchain-data.mdx b/docs/network-data/legacy-blockchain-data.mdx new file mode 100644 index 000000000..a380bcf6e --- /dev/null +++ b/docs/network-data/legacy-blockchain-data.mdx @@ -0,0 +1,24 @@ +--- +id: legacy-blockchain-data +title: Legacy Blockchain Data +pagination_label: Legacy Blockchain Data +sidebar_label: Legacy Blockchain Data +description: Legacy Blockchain Data Documentation +image: https://docs.helium.com/img/link-image.png +slug: /network-data/legacy-blockchain-data +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +Helium initially operated on its own custom L1 blockchain. On April 18, 2023, Helium completed a +migration to the Solana. + +A snapshot of the Helium L1 data is available on a requestor-pays basis on AWS in the +`foundation-prod-etl-artifacts-v2` S3 bucket. + +Additionally, the snapshot is also available as a torrent. + +| Torrent | Magnet Link | +| ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Helium L1 Archive - Postgres Snapshot](/helium-l1-archive-postgres.torrent) (3.1 TB) | [Magnet Link](magnet:?xt=urn:btih:ac508205c440ac66d18d2f1755a7eb682a6c6549&dn=foundation-prod-etl-artifacts-v2&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.auctor.tv%3A6969%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969%2Fannounce&tr=https%3A%2F%2Fopentracker.i2p.rocks%3A443%2Fannounce&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A6969%2Fannounce&tr=http%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.moeking.me%3A6969%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Fuploads.gamecoast.net%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.tiny-vps.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.skyts.net%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker-udp.gbitt.info%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.tracker.ink%3A6969%2Fannounce&tr=udp%3A%2F%2Fmovies.zsw.ca%3A6969%2Fannounce&tr=udp%3A%2F%2Fbt1.archive.org%3A6969%2Fannounce&tr=https%3A%2F%2Ftracker.tamersunion.org%3A443%2Fannounce&tr=https%3A%2F%2Ftracker.gbitt.info%3A443%2Fannounce) | +| [Helium L1 Transactions & Blocks - CSV Export](/Helium_Txns_Archive.torrent) (724 GB) | [Magnet Link](magnet:?xt=urn:btih:090ff75cd0a834818c46f5a48483f45b37ac0199&dn=HeliumTxns&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.tracker.ink%3A6969%2Fannounce&tr=http%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.auctor.tv%3A6969%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969%2Fannounce&tr=https%3A%2F%2Fopentracker.i2p.rocks%3A443%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.moeking.me%3A6969%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker-udp.gbitt.info%3A80%2Fannounce&tr=https%3A%2F%2Ftracker.tamersunion.org%3A443%2Fannounce&tr=https%3A%2F%2Ftracker.gbitt.info%3A443%2Fannounce&tr=http%3A%2F%2Ftracker.gbitt.info%3A80%2Fannounce&tr=udp%3A%2F%2Fuploads.gamecoast.net%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.tiny-vps.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.skyts.net%3A6969%2Fannounce&tr=udp%3A%2F%2Fretracker01-msk-virt.corbina.net%3A80%2Fannounce&tr=udp%3A%2F%2Fopentracker.io%3A6969%2Fannounce) | diff --git a/docs/network-data/network-data.mdx b/docs/network-data/network-data.mdx new file mode 100644 index 000000000..1034148e6 --- /dev/null +++ b/docs/network-data/network-data.mdx @@ -0,0 +1,34 @@ +--- +id: network-data +title: Helium Network Data +pagination_label: Network Data +sidebar_label: Introduction +description: Helium Network Data Documentation +image: https://docs.helium.com/img/link-image.png +slug: /network-data/network-data +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +The Helium Network operates a hybrid architecture, combining on-chain data stored on the Solana +blockchain with data stored in network Oracles. + +On-chain data includes information about Hotspots, wallet and account state, tokens, and other +attributes that pertain to the Helium Network. + +Oracles store additional network data that is not practical to store on-chain, such as Hotspot +earnings, witness data, and other time-series information. + +Review the relevant documents for a deeper dive into each data source: + +- [Solana Data](/network-data/solana-data) +- [Oracles](/network-data/oracle-data) + +In addition to the raw data sources, Helium and third-party providers offer APIs that provide +convenient access to network data: + +- [Helium API Providers](/network-data/api-providers) + +Data from Helium's legacy blockchain (Helium L1) is also available for historical reference: + +- [Legacy Blockchain Data](/network-data/legacy-blockchain-data) diff --git a/docs/network-data/oracle-data.mdx b/docs/network-data/oracle-data.mdx new file mode 100644 index 000000000..b7848ddfb --- /dev/null +++ b/docs/network-data/oracle-data.mdx @@ -0,0 +1,242 @@ +--- +id: oracle-data +title: Helium Oracle Data +pagination_label: Oracle Data +sidebar_label: Oracle Data +description: Helium Oracle Data Documentation +image: https://docs.helium.com/img/link-image.png +slug: /network-data/oracle-data +--- + +The Helium Network operates Oracles that perform various tasks backing Proof-of-Coverage and data +transfer for the LoRaWAN (IOT), Mobile, and any future networks. These Oracles provide extensive +logs for analysis of the Helium subnetworks. + +The Helium Oracles handle all data about the network, except for transactions handled by the +[Helium Program Libraries](https://github.com/helium/helium-program-library) on Solana. + +## Accessing Oracle Data + +Data is directly accessible from the `foundation-poc-data-requester-pays` bucket in AWS `us-west-2` +under the top-level data category prefixes listed below. All data in the S3 bucket uses 'Requestor +Pays', meaning you pay for data transfer and AWS API costs. Amazon will charge you for: + +1. Storage costs on any destination buckets +2. Egress fees if the data leaves `us-west-2` +3. `PUT`, `COPY`, `POST`, and `LIST` requests + +For more information on accessing data from an AWS requester pays bucket, refer to the +[Downloading objects in Requester Pays buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ObjectsinRequesterPaysBuckets.html) +guide provided by AWS. + +| Top-Level Data Category Prefixes | +| ----------------------------------- | +| `foundation-iot-entropy` | +| `foundation-iot-ingest` | +| `foundation-iot-packet-ingest` | +| `foundation-iot-packet-verifier` | +| `foundation-iot-verified-rewards` | +| `foundation-mobile-ingest` | +| `foundation-mobile-packet-verifier` | +| `foundation-mobile-price` | +| `foundation-mobile-verified` | + +Under each top-level data category prefix, the related PoC data files are provided in the prefix +structure noted below: + +`s3://foundation-poc-data-requester-pays//..gz` + +When working with this bucket, keeping data in `us-west-2` and being pragmatic about which AWS S3 +access patterns are used will greatly reduce the cost burden for accessing the PoC data. + +Regarding access patterns, one approach to minimize the quantity of S3 API calls over time - and +save money - is to use the `aws s3api list-objects-v2` command and specify the `--start-after` and +`--prefix` parameters. In particular, the `aws s3api list-objects-v2` command can be invoked +iteratively over time with the `--start-after` parameter set to the +`top-level data category prefix` + `filename` of the last file received and the `--prefix` parameter +set to the `top-level data category` + `file prefix` of desired file, as indicated below: + +```bash +aws s3api list-objects-v2 --bucket foundation-poc-data-requester-pays --start-after --prefix --request-payer requester +``` + +For example, if you were to execute the `aws s3api list-objects-v2` command against a `foo` prefix +of an `example` bucket, and the most recent file you received was `bar.1681917512317.gz`, in a +subsequent invocation of `aws s3api list-objects-v2` you could set the `--start-after` flag to +`foo/bar.1681917512317.gz` and the `--prefix` flag to `foo/bar` to return a list of `bar` type files +subsequent to `bar.1681917512317.gz`. In doing so, your total API calls in the second invocation of +`aws s3api list-objects-v2` would be limited to only the files subsequent to `bar.1681917512317.gz`, +rather than for all files in the bucket. From there, you can iterate over the returned list of files +and perform additional S3 API commands such as `aws s3api copy-object` to copy files based on the +file list. + +## Oracle Data File Format + +The raw PoC data stored in the `foundation-poc-data-requester-pays` bucket is in encoded protobuf +format in `.gz` compressed files. The table below provides the top-level data category prefixes, the +file types comprised within each data category prefix, the file prefixes beginning each filename, +the filename patterns for each of the file types, and links to the corresponding protobuf used to +decode the data. + +| Category | File Type | File Prefix | Filename | Protobuf Definition | +| :---------------------------------- | :--------------------------------------- | :-------------------------------------------- | :------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `foundation-iot-entropy` | `EntropyReport` | `entropy_report` | `entropy_report..gz` | [`entropy.proto`
(Line 5: `entropy_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/entropy.proto#L5) | +| `foundation-iot-ingest` | `IotBeaconIngestReport` | `iot_beacon_ingest_report` | `iot_beacon_ingest_report..gz` | [`service/poc_lora.proto`
(Line 97: `lora_beacon_ingest_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_lora.proto#L97) | +| `foundation-iot-ingest` | `IotWitnessIngestReport` | `iot_witness_ingest_report` | `iot_witness_ingest_report..gz` | [`service/poc_lora.proto`
(Line 104: `lora_witness_ingest_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_lora.proto#L104) | +| `foundation-iot-packet-ingest` | `PacketReport` | `packetreport` | `packetreport..gz` | [`service/packet_router.proto`
(Line 8: `packet_router_packet_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/packet_router.proto#L8) | +| `foundation-iot-packet-verifier` | `InvalidPacket` | `invalid_packet` | `invalid_packet..gz` | [`service/packet_verifier.proto`
(Line 13: `invalid_packet`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/packet_verifier.proto#L13) | +| `foundation-iot-packet-verifier` | `IotValidPacket` | `iot_valid_packet` | `iot_valid_packet..gz` | [`service/packet_verifier.proto`
(Line 5: `valid_packet`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/packet_verifier.proto#L5) | +| `foundation-iot-verified-rewards` | `IotRewardShare` | `iot_reward_share` | `iot_reward_share..gz` | [`service/poc_lora.proto`
(Line 239: `iot_reward_share`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_lora.proto#L239) | +| `foundation-iot-verified-rewards` | `IotPoc` | `iot_poc` | `iot_poc..gz` | [`service/poc_lora.proto`
(Line 216: `lora_poc_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_lora.proto#L216) | +| `foundation-iot-verified-rewards` | `IotInvalidBeaconReport` | `iot_invalid_beacon` | `iot_invalid_beacon..gz` | [`service/poc_lora.proto`
(Line 153: `lora_invalid_beacon_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_lora.proto#L153) | +| `foundation-iot-verified-rewards` | `IotInvalidWitnessReport` | `iot_invalid_witness` | `iot_invalid_witness..gz` | [`service/poc_lora.proto`
(Line 173: `lora_invalid_witness_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_lora.proto#L173) | +| `foundation-iot-verified-rewards` | `GatewayRewardShare` | `gateway_reward_share`(Deprecated 4/18/23) | `gateway_reward_share..gz` | [`service/poc_lora.proto`
(Line 171: `gateway_reward_share`)](https://github.com/helium/proto/blob/149997d2a74e08679e56c2c892d7e46f2d0d1c46/src/service/poc_lora.proto#L171) | +| `foundation-iot-verified-rewards` | `RewardManifest` | `reward_manifest` | `reward_manifest..gz` | [`reward_manifest.proto`
(Line 5: `reward_manifest`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/reward_manifest.proto#L5) | +| `foundation-iot-verified-rewards` | `NonRewardablePacket` | `non_rewardable_packet` | `non_rewardable_packet..gz` | [`service/poc_lora.proto`
(Line 47: `non_rewardable_packet`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_lora.proto#L47) | +| `foundation-mobile-ingest` | `CellHeartbeatIngestReport` | `cell_heartbeat` | `cell_heartbeat..gz` | [`service/poc_mobile.proto`
(Line 65: `cell_heartbeat_ingest_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L65) | +| `foundation-mobile-ingest` | `CellSpeedtestIngestReport` | `cell_speedtest` | `cell_speedtest..gz` | [`service/poc_mobile.proto`
(Line 25: `speedtest_ingest_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L25) | +| `foundation-mobile-ingest` | `DataTransferSessionIngestReport` | `data_transfer_session_ingest_report` | `data_transfer_session_ingest_report..gz` | [`service/poc_mobile.proto`
(Line 366: `data_transfer_session_ingest_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L366) | +| `foundation-mobile-ingest` | `Heartbeat` | `heartbeat` | `heartbeat..gz` | [`service/poc_mobile.proto`
(Line 181: `heartbeat`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L181) | +| `foundation-mobile-ingest` | `SpeedtestIngestReport` | `speedtest_report` | `speedtest_report..gz` | [`service/poc_mobile.proto`
(Line 25: `speedtest_ingest_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L25) | +| `foundation-mobile-ingest` | `SubscriberLocationIngestReport` | `subscriber_location_report` | `subscriber_location_report..gz` | [`service/poc_mobile.proto`
(Line 92: `subscriber_location_ingest_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L92) | +| `foundation-mobile-packet-verifier` | `InvalidDataTransferSessionIngestReport` | `invalid_data_transfer_session_ingest_report` | `invalid_data_transfer_session_ingest_report..gz` | [`service/poc_mobile.proto`
(Line 372: `invalid_data_transfer_ingest_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L372) | +| `foundation-mobile-packet-verifier` | `ValidDataTransferSession` | `valid_data_transfer_session` | `valid_data_transfer_session..gz` | [`service/packet_verifier.proto`
(Line 24: `valid_data_transfer_session`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/packet_verifier.proto#L24) | +| `foundation-mobile-price` | `PriceReport` | `price_report` | `price_report..gz` | [`price_report.proto`
(Line 7: `price_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/price_report.proto#L7) | +| `foundation-mobile-verified` | `ValidatedHeartbeat` | `validated_heartbeat` | `validated_heartbeat..gz` | [`service/poc_mobile.proto`
(Line 181: `heartbeat`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L181) | +| `foundation-mobile-verified` | `SpeedtestAvg` | `speedtest_avg` | `speedtest_avg..gz` | [`service/poc_mobile.proto`
(Line L226: `speedtest_avg`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L226) | +| `foundation-mobile-verified` | `VerifiedSpeedtest` | `verified_speedtest` | `verified_speedtest..gz` | [`service/poc_mobile.proto`
(Line L36: `verified_speedtest`)](https://github.com/helium/proto/blob/6cfd6dc952349e31187c7071dbbcd86780eb97e6/src/service/poc_mobile.proto#L36) | +| `foundation-mobile-verified` | `VerifiedSubscriberLocationIngestReport` | `verified_subscriber_location_report` | `verified_subscriber_location_report..gz` | [`service/poc_mobile.proto`
(Line 140: `verified_subscriber_location_ingest_report_v1`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L140) | +| `foundation-mobile-verified` | `RadioRewardShare` | `radio_reward_share` | `radio_reward_share..gz` | [`service/poc_mobile.proto`
(Line 247: `radio_reward_share`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L247) | +| `foundation-mobile-verified` | `MobileRewardShare` | `mobile_reward_share` | `mobile_reward_share..gz` | [`service/poc_mobile.proto`
(Line 295: `mobile_reward_share`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/service/poc_mobile.proto#L295) | +| `foundation-mobile-verified` | `RewardManifest` | `reward_manifest` | `reward_manifest..gz` | [`reward_manifest.proto`
(Line 5: `reward_manifest`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/reward_manifest.proto#L5) | +| `foundation-mobile-verified` | `SubnetworkRewards` | `subnetwork_rewards` | `subnetwork_rewards..gz` | [`blockchain_txn_subnetwork_rewards_v1.proto`
(Line 11: `subnetwork_rewards`)](https://github.com/helium/proto/blob/953da03fd03f1f655e7c27328f068fa9654d1954/src/blockchain_txn_subnetwork_rewards_v1.proto#L11) | +| `foundation-mobile-verified` | `InvalidShares` | `invalid_shares` | `invalid_shares..gz` | | +| `foundation-mobile-verified` | `Shares` | `shares` | `shares..gz` | | + +## Reading Bytestream Data + +To store the massive amount of data generated by the Oracles, the output is stored as zipped +bytestreams (one bytestream per `.gz` file). To 'unpack' this data, you'll first need the associated +Protobuf from [github.com/helium/proto](https://github.com/helium/proto) (also listed above). + +Once uncompressed, the file is a series of 4-byte prefix length encoded binary followed by the +associated message. More concretely, you'll need to repeatedly read the first 4 bytes and decode +that as a big-endian u32. Then use that u32 number as the number of subsequent bytes to read. Decode +those subsequent bytes using the associated proto definition. Repeat this process until you've read +the entire file. + +**Important Note:** Simply trying to pass the contents of the uncompressed files into the protobuf +decoder will fail. + +### Javascript Example + +```protobuf +// poc_mobile.proto +// copied from https://github.com/helium/proto/blob/master/src/service/poc_mobile.proto#L31 + +syntax = "proto3"; + +package helium.poc_mobile; + +message cell_heartbeat_req_v1 { + // Public key of the hotspot + bytes pub_key = 1; + string hotspot_type = 2; + uint32 cell_id = 3; + // Timestamp of heartbeat in seconds from unix epoch + uint64 timestamp = 4; + double lat = 5; + double lon = 6; + bool operation_mode = 7; + string cbsd_category = 8; + string cbsd_id = 9; + + bytes signature = 10; +} +``` + +```js +// oracle-data-reader-example.js + +// assumes you've downloaded and unzipped the below file +const fileBuffer = fs.readFileSync('./cell_heartbeat.1667919103443') + +protobuf.load('mobile.proto', function (err, root) { + if (err) throw err + + // Obtain a message type + var CellHeartbeat = root.lookupType('helium.poc_mobile.cell_heartbeat_req_v1') + + let offset = 0 + while (offset < fileBuffer.length) { + // the first 4 bytes tell you how long the message is + const messageLength = fileBuffer.readInt32BE(offset) + const bufferMessage = fileBuffer.subarray(offset + 4, offset + messageLength + 4) + try { + var decodedMessage = CellHeartbeat.decode(bufferMessage) + console.log(decodedMessage) + } catch (e) { + console.log('error', e) + } + offset += messageLength + 4 + } +}) +``` + +### Rust Example + +This leverages existing Rust dependencies used by the Oracles. + +```toml +# Cargo.toml +[package] +name = "oracle-data-reader-example" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = {version = "1", features = ["backtrace"]} +file-store = {git = "https://github.com/helium/oracles", branch = "main"} +futures = "*" +serde = {version = "1", features=["derive"]} +serde_json = "1" +tokio = { version = "1", default-features = false, features = [ + "fs", + "macros", + "signal", + "rt-multi-thread", + "rt", + "process", + "time" +] } +tokio-util = "0" +``` + +```rust +# main.rs +use anyhow::Result; +use file_store::{heartbeat::CellHeartbeat, traits::MsgDecode, file_source}; +use futures::{ StreamExt}; +use serde_json::json; + +fn print_json(value: &T) -> Result<()> { + println!("{}", serde_json::to_string_pretty(value)?); + Ok(()) +} + +#[tokio::main] +async fn main() -> Result<()> { + // assumes you have cell_heartbeat.1667919103443.gz in folder + let mut file_stream = file_source::source(["cell_heartbeat.1667919103443.gz"]); + + while let Some(result) = file_stream.next().await { + let msg = result?; + let heartbeat = CellHeartbeat::decode(msg)?; + print_json(&json!(heartbeat))?; + } + Ok(()) +} +``` + +A more fleshed-out example can be found in +[this sample oracle observer repo](https://github.com/dewi-alliance/oracle-observer-sample/tree/main/oracle-ingestor-lambda). diff --git a/docs/network-data/solana-data.mdx b/docs/network-data/solana-data.mdx new file mode 100644 index 000000000..c7be07bf6 --- /dev/null +++ b/docs/network-data/solana-data.mdx @@ -0,0 +1,326 @@ +--- +id: solana-data +title: Helium Data on Solana +pagination_label: Solana Data +sidebar_label: Solana Data +description: Helium Data on Solana Documentation +image: https://docs.helium.com/img/link-image.png +slug: /network-data/solana-data +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + + + +This guide exists to give an overview of Helium data on Solana, and some general Solana programming +semantics. For a more in-depth guide, check out +[The Solana Cookbook](https://solanacookbook.com/core-concepts/accounts.html) + +## Reading Data + +At its core, Solana is just a giant Key/Value store. A public key is the key, and there's some blob +of data at that value. That blob of data is called an Account. You can imagine Public Keys like a +primary key in a traditional database. + +For example, let's consider this public key: `6r4x69WHPPDzUuMpJ7vwSUiU6e73KJqeoPyZ8nHQTmFP` + +If we check the +[Solana Explorer, under Anchor Data](https://explorer.solana.com/address/6r4x69WHPPDzUuMpJ7vwSUiU6e73KJqeoPyZ8nHQTmFP/anchor-account?cluster=devnet) +for this account, we can see that this is a `DaoV0` on the devnet `helium-sub-daos` contract. + +![Dao in Explorer](/img/solana/dao-in-explorer.png) + +Scrolling up we can see that it is, in fact, owned by the Helium subnetwork's program: + +![Program Owner](/img/solana/program-owner.png) + +This means that only the `helium-sub-daos` program can make changes to this account. On other +chains, a Program may be called a Smart Contract. Accounts are either owned by a program or owned by +the system program. An account owned by the System Program is generally either a Wallet (holding +SOL), or an account that has yet to be initialized. + +On Solana, a Wallet is just an account with some amount of SOL tokens in it, owned by the system +program. The owner of that Wallet controls the private key to that account, and so can sign +transactions as that public key. + +### PDAs + +Program Derived Addresses (PDAs) are home to accounts that are designed to be controlled by a +specific program. With PDAs, programs can programmatically sign for certain addresses without +needing a private key. PDAs serve as the foundation for Cross-Program Invocation, which allows +Solana apps to be composable with one another. + +A PDA is a Public Key that is derived from some set of seeds and a given program ID. Think of it as +a one-way hashing to a new address. So, for example, + + +```js +getProgramAddress([Buffer.from("helium", "utf8")], helium_sub_daos.programId) +``` + +will always return the same address. Better yet, the `helium_sub_daos` is able to sign transactions +as if it held the private key to this PDA. + +As you will see, the Helium programming model depends heavily on PDAs as indexes into the +blockchain. + +If you imagine the world of Helium Data on Solana as a Graph, PDAs let us hook into particular +subgraphs. + +A great example of this is the relationship between the Helium `dao` and the `hnt` mint address. The +`DaoV0` definition from earlier exists at address: + + +```js +import { daoKey } from "@helium/helium-sub-daos-sdk" + +const daoAddr = daoKey(new PublicKey("...hnt mint..."))[0]; +``` + +:::note Helium PDAs and Mints + +You'll notice that if you trace the graph of Helium PDAs, they always lead back to the address of +either the HNT token mint, or the subnetwork token mint. + +This design is intentional. Rather than making DAOs, subnetworks, etc global, we opted to make them +dependent on the specific mints being used. This allows us to set up testing scenarios in which we +use a testing token alongside the real tokens. This design also allows for easier reuse of our +contracts throughout the Solana community. + +::: + +### Aside - Tokens + +To understand the Helium model on Solana, it's important to understand how tokens work on Solana. + +You might imagine a Wallet is some kind of account (data struct) holding all of your tokens. This is +not the case! + +Instead, a Wallet is really a collection of `TokenAccount`s (Accounts whose data is a +`TokenAccount`). The token account itself has a reference to its owner, which is the Wallet. Note +that `TokenAccount.owner` is different than the `Account.owner`. In this case, the Program that is +allowed to make changes to a token account is the Token Program. That is the `Account.owner`. +Whereas the owning wallet of the `TokenAccount` is the `TokenAccount.owner`. You can see a token +account for a testing token we created +[here](https://explorer.solana.com/address/BM9kx8NZGNThVr6HnBJo1CR5Jvk5Zc3EEy7wWztaJHS2?cluster=devnet) + +Every token, whether it be USDC, HNT, or MOBILE has a definition. This is called the token `Mint`. +You can also see this key on the token account above. This includes definitions like current supply, +mint authority, freeze authority, and decimals. + +A common confusion on Solana is understanding Accounts vs Token Accounts, owners vs Token Account +owners. + +#### Associated Token Accounts + +Associated token accounts are often the first use of PDAs you will see as a developer on Solana. + +Given the above model, it is possible for a given wallet to have multiple token accounts for the +same token. That is both messy and hard to index. Early in the days of Solana, a program called +`associated-token` emerged. `Associated-token` says that the account for a given Wallet and mint can +be derived by: + + +```js + PublicKey.findProgramAddress( + [wallet.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), mint.toBuffer()], + ASSOCIATED_TOKEN_PROGRAM_ID + ) +``` + +Generally, token accounts are created through the `associated-token` program so that they can be +guaranteed to be accessed at an easy-to-find address. + +### Fetching Data + +The classic way of fetching data on Solana is to use @solana/web3.js connection object. + + +```js +import { PublicKey, Connection } from "@solana/web3.js" + +const connection = new Connection("...rpc url...") +const account = await connection.getAccountInfo(new PublicKey("...")) + +console.log(account.data) +``` + +This will get you the binary data of any account stored on chain; however, you will need to decode +the data yourself. Most programs come with their own SDKs for reading and deserializing data. For +example, SPL Token (the token program), comes with @solana/spl-token + + +```js +import { PublicKey } from "@solana/web3.js" +import { getAccount, getAssociatedTokenAddressSync } from "@solana/spl-token" + +const mint = new PublicKey("...wallet...") +const wallet = new PublicKey("...wallet...") +const tokenAddress = getAssociatedTokenAddressSync(mint, wallet) +const tokenAccount = await getAccount(connection, tokenAddress) + +console.log(tokenAcount.amount, tokenAccount.owner) +``` + +In the case of Helium programs, they all use a framework called +[Anchor](https://github.com/coral-xyz/anchor), which amongst other things generate SDKs for us. + +You can use the SDKs as follows: + + +```js +import { init } from "@helium/helium-sub-daos-sdk"; +import * as anchor from "@coral-xyz/anchor"; + +anchor.setProvider(anchor.AnchorProvider.local("...rpc url...")); +const provider = anchor.getProvider() as anchor.AnchorProvider; +const program = await init(provider) + +const daoAccount = await program.account.daoV0.fetch(new PublicKey("...dao key...")) +``` + +## Sending Transactions + +Transactions are how we modify data on Solana. All Helium SDKs use the standard +[Anchor](https://github.com/coral-xyz/anchor) SDK. + +That means the interface to all instructions are predictable. You should be able to look at either +our IDLs, or the programs themselves, and see what accounts need to be passed to generate +instructions. + +The best way to understand how to take certain actions against Helium on Solana is to look at +[our tests](https://github.com/helium/helium-program-library/tree/master/tests). + +For example, to submit a Data Credit delegation, the code may look something like this: + + +```js +import { subDaoKey } from "@helium/helium-sub-daos-sdk"; +import { init as initDc } from "@helium/data-credits-sdk"; +import * as anchor from "@coral-xyz/anchor"; + +anchor.setProvider(anchor.AnchorProvider.local("...rpc url...")); +const provider = anchor.getProvider() as anchor.AnchorProvider; + +const iotMint = new PublicKey("...iot mint..."); +const iotSubDao = subDaoKey(iotMint)[0] + +const dcProgram = await initDc(provider) + +await program.methods + .delegateDataCreditsV0({ + amount: toBN(10, 0), + routerKey: "router key", + }) + .accounts({ + subDao: iotSubDao, + }) + .rpc(); +``` + +## RPC & RPC Nodes + +An RPC is an application's gateway to the Solana cluster. RPC Nodes do not participate in consensus +and instead are dedicated to data requests. + +All the RPCs used in the Solana Migration follow the Solana chain and will index the NFT data that +Core Developers created in Compression NFTs. This is one reason the Helium Network can mint a +million or more NFTs on Solana. + +You may need to run an RPC service to access public Solana clusters. Many services are free, and +others are paid. The Foundation uses Helius as their RPC Provider, and it’s useful to use a PRC +provider that is familiar with compression. They will all support this at some point. + +You can read more about RPC & RPC Nodes [here](https://solana.com/rpc). + +## Helium Programs on Solana + +The code for all of these Programs is open source, and available in the +[helium-program-library](https://github.com/helium/helium-program-library) repository on Github. + +:::info Program Audits + +The Helium Programs have been audited by [sec3](https://www.sec3.dev/). The audit report was +published March 20, 2023. The audit report is available from sec3 on their +[GitHub reports repo](https://github.com/sec3-service/reports/blob/master/reports/sec3_helium_program_library_report.pdf). + +::: + +#### circuit_breaker + +- Program ID: `circAbx64bbsscPbQzZAUvuXpHqrCe6fLMzc2uKXz9g` +- Generic program wrapping sensitive mint authorities and token accounts in the Helium system to + prevent large movements in the case of an exploit or bug. + +#### data_credits + +- Program ID: `credMBJhYFzfn7NxBMdU4aUqFggAjgztaCcv2Fo6fPT` +- Manages the purchase, delegation, and burning of data credits. + +#### helium_entity_manager + +- Program ID: `hemjuPXBpNvggtaUnN1MwT3wrdhttKEfosTcc2P9Pg8` +- Handles the issuance of NFTs representing entities that are rewardable on the Helium network, such + as Hotspots and mappers. + +#### helium_sub_daos + +- Program ID: `hdaoVTCqhfHHo75XdAMxBKdUqvq1i5bF23sisBqVgGR` +- Manages the DAO/subnetwork structure proposed in HIP-51, including the minting of tokens to + subnetworks, HST holders, and the `lazy_distributor` for PoC earnings. + +#### lazy_distributor + +- Program ID: `1azyuavdMyvsivtNxPoz6SucD18eDHeXzFCUPq5XU7w` +- Allows off-chain Oracles to distribute PoC rewards to rewardable assets (such as Hotspots) that + are represented as NFTs. + +#### lazy_transactions + +- Program ID: `1atrmQs3eq1N2FEYWu6tyTXbCjP4uQwExpjtnhXtS8h` +- Used in the initial migration to Solana, this program allows compressing many transactions into a + merkle root to be executed lazily. This guarantees all transactions are executed exactly once. + +#### treasury_management + +- Program ID: `treaf4wWBBty3fHdyBpo35Mz84M8k3heKXmjmi9vFt5` +- Manages the treasury of each subnetwork as proposed in HIP-51, allowing DNT tokens to be swapped + for HNT according to a formula. + +#### voter_stake_registry + +- Program ID: `hvsrNC3NKbcryqDs2DocYHZ9yPKEVzdSjQG6RVtK1s8` +- Handles voting power via veHNT in Helium Governance. + +--- + +## Packages (JS/Typescript) + +| Name | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | +| [@helium/circuit-breaker-sdk](https://github.com/helium/helium-program-library/tree/master/packages/circuit-breaker-sdk) | SDK to circuit breaker program | +| [@helium/data-credits-sdk](https://github.com/helium/helium-program-library/tree/master/packages/data-credits-sdk) | SDK to the data credits program | +| [@helium/distributor-oracle](https://github.com/helium/helium-program-library/tree/master/packages/distributor-oracle) | SDK for interacting with the lazy-distributor oracles to claim rewards | +| [@helium/helium-entity-manager-sdk](https://github.com/helium/helium-program-library/tree/master/packages/helium-entity-manager-sdk) | SDK to the Helium entity manager program | +| [@helium/helium-sub-daos-sdk](https://github.com/helium/helium-program-library/tree/master/packages/helium-sub-daos-sdk) | SDK to Helium sub daos program | +| [@helium/idls](https://github.com/helium/helium-program-library/tree/master/packages/idls) | IDLs containing the typescript definitions for the raw anchor SDKs of our programs | +| [@helium/lazy-distributor-sdk](https://github.com/helium/helium-program-library/tree/master/packages/lazy-distributor-sdk) | SDK to the lazy distributor program | +| [@helium/lazy-transactions-sdk](https://github.com/helium/helium-program-library/tree/master/packages/lazy-transactions-sdk) | SDK to lazy transactions program | +| [@helium/spl-utils](https://github.com/helium/helium-program-library/tree/master/packages/spl-utils) | General utils for interacting with Solana, tokens, etc | +| [@helium/treasury-management-sdk](https://github.com/helium/helium-program-library/tree/master/packages/treasury-management-sdk) | SDK to the treasury management program | +| [@helium/voter-stake-registry-sdk](https://github.com/helium/helium-program-library/tree/master/packages/voter-stake-registry-sdk) | SDK to the voter stake registry program | + +--- + +## Important Addresses and Links + +All the tokens are on the `TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA` Program. + +The mint IDs are as follows: + +| Name | ID | +| ------ | ------------------------------------------- | +| HNT | hntyVP6YFm1Hg25TN9WGLqM12b8TQmcknKrdu1oxWux | +| MOBILE | mb1eu7TzEc71KxDpsmsKoucSSuuoGLv1drys1oP2jh6 | +| IOT | iotEVVZLEywoTn1QdwNPddxPWszn3zFhEot3MfL9fns | +| DC | dcuc8Amr83Wz27ZkQ2K9NS6r8zRpf1J6cvArEBDZDmm | diff --git a/docs/network-data/solana/compression-nfts.mdx b/docs/network-data/solana/compression-nfts.mdx new file mode 100644 index 000000000..1cd77256f --- /dev/null +++ b/docs/network-data/solana/compression-nfts.mdx @@ -0,0 +1,62 @@ +--- +id: compression-nfts +title: Compression NFTs +pagination_label: Compression NFTs +sidebar_label: Compression NFTs +description: Helium Compression NFTs Documentation +image: https://docs.helium.com/img/link-image.png +slug: /network-data/solana/compression-nfts +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +A new development on the Solana Blockchain has been +[Compression NFTs](https://www.metaplex.com/posts/expanding-digital-assets-with-compression-for-nfts). + +With normal NFTs on Solana, each token is stored on-chain as a distinct spl-token mint, with +decimals of 0 and supply of 1. This mint has some metadata attached to it, as well as a token +account representing the ownership of the token. In total, this leads to 4 accounts with a cost of +0.01197616 SOL in rent. Multiplying this by millions of Hotspots leads to not only a high cost but +also a large usage of storage space on the blockchain. + +Enter: Compression NFTs. Compression NFTs use a Concurrent Merkle Tree to compress millions of NFTs +into one 32-byte hash. Clients executing transactions on compressed NFTs can send a cryptographic +proof to the blockchain that verifies the NFT and ownership. In other words, instead of sending a +transaction with: + +```rust + +... +pub mint: Account<'info, Mint>, +pub metadata: Account<'info, Metadata>, +pub master_edition: Account<'info, MasterEdition>, +#[account( + constraint = token_account.amount >= 1, + token::owner = owner +)] +pub token_account: Account<'info, TokenAccount>, +pub owner: Signer<'info> +... +``` + +You can instead send: + +```rust + +pub struct ProofArgs { + pub hash: Vec, // The 32 byte hash of the NFT + pub root: [u8; 32], // The root of the merkle tree + pub index: u32, // The index of the item in the tree + pub proof: Vec> // An array of 32 byte proofs proving that the `hash` is part of the `root` +} + +... +pub merkle_tree: UncheckedAccount<'info>, +... + +``` + +While this can make the transaction size larger, the amount of data stored on-chain is tiny. While +this may look difficult, this is all neatly packed in the Metaplex Digital Asset API. This API runs +on multiple RPC providers and allows you to hit convenient functions like `get_assets_by_owner` and +`get_asset_proof` so that you never have to worry about the underlying concurrent merkle algorithm. diff --git a/docs/network-data/solana/helium-program-library.mdx b/docs/network-data/solana/helium-program-library.mdx new file mode 100644 index 000000000..d2b6c998d --- /dev/null +++ b/docs/network-data/solana/helium-program-library.mdx @@ -0,0 +1,49 @@ +--- +id: helium-program-library +title: Helium Program Library +pagination_label: Helium Program Library +sidebar_label: Helium Program Library +description: Helium Program Library +image: https://docs.helium.com/img/link-image.png +slug: /network-data/solana/helium-program-library +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +HPL Preview + +## Overview + +The Helium Program Library (HPL) is a collection of programs that enable the Helium Network to +operate on the Solana blockchain. The HPL is designed to be a comprehensive resource for developers +looking to build on the Helium Network, providing a suite of solana programs and tools to facilitate +the seamless integration of the Helium Network with the Solana blockchain. + +## Features + +The Helium Program Library (HPL) offers a wide range of features to support the Helium Network's +integration with the Solana blockchain. These features include: + +- **Solana Programs**: The HPL provides a comprehensive suite of programs designed to facilitate the + seamless operation of the Helium Network on the Solana blockchain. These programs are designed to + be easily accessible and customizable, allowing developers to build on the Helium Network with + ease. + +- **Documentation**: The HPL offers extensive documentation to support developers in interfacing + with the Helium Network on the Solana blockchain. This documentation includes detailed guides, + tutorials, and examples to help developers get started with building on the Helium Network. + +- **Tools**: The HPL provides a range of tools to support developers in building on the Helium + Network. + +## Getting Started + +To get started with the Helium Program Library (HPL), developers can access the HPL documentation +and at [hpl.helium.com](https://hpl.helium.com). The HPL documentation provides detailed guides, +tutorials, and examples to help developers get started with building on the Helium Network. + +The HPL GitHub repository can be found at https://github.com/helium/helium-program-library. diff --git a/docs/network-data/solana/rewardable-entities.mdx b/docs/network-data/solana/rewardable-entities.mdx new file mode 100644 index 000000000..e11363bb9 --- /dev/null +++ b/docs/network-data/solana/rewardable-entities.mdx @@ -0,0 +1,371 @@ +--- +id: rewardable-entities +title: Rewardable Entities +pagination_label: Rewardable Entities +sidebar_label: Hotspots on Solana +description: Helium Rewardable Entities Documentation +image: https://docs.helium.com/img/link-image.png +slug: /network-data/solana/rewardable-entities +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +All actors in the network that receive tokens are considered "Rewardable Entities." + +A rewardable entity on the Helium Network is represented on Solana as an NFT (Non-Fungible Token). + +NFTs are ideal for this job as they represent ownership in a way that is easily transferable and +recognized by all major wallets. + +## Fetching Rewardable Entities + +All rewardable entities are created by the `helium-entity-manager` program. Further, they exist +under a collection that is managed by the Maker of that entity. The easiest way to fetch all Helium +entities for a given wallet is to filter by the `helium-entity-manager-creator` + +We can get this address by running + + +```js +import { daoKey } from "@helium/helium-sub-daos-sdk"; +import { entityCreatorKey } from "@helium/helium-entity-manager-sdk"; + +const hntMint = new PublicKey('...hnt mint...') +const dao = daoKey(hntMint)[[0]] +const creator = entityCreatorKey(dao)[0] +``` + +This should output: `Fv5hf1Fg58htfC7YEXKNEfkpuogUUQDDTLgjGWxxv48H` + +Now, we can use the Metaplex Digital Asset API to get rewardable entities my wallet +(`BcJzP2hEYgzjUwpHEtS6RhuqGfEJVx8Rq3MejujAAWrR`) owns: + +```bash +curl --request POST \ + --url https://rpc-devnet.aws.metaplex.com/ \ + --header 'Content-Type: application/json' \ + --data '{ + "jsonrpc": "2.0", + "method": "search_assets", + "id": "get-assets-op-1", + "params": { + "ownerAddress": "BcJzP2hEYgzjUwpHEtS6RhuqGfEJVx8Rq3MejujAAWrR", + "page": 0, + "creatorAddress": "Fv5hf1Fg58htfC7YEXKNEfkpuogUUQDDTLgjGWxxv48H", + "creatorVerified": true, + "sortBy": {"sortBy": "created", "sortDirection": "asc"} + } + }' +``` + +### Hotspots and ECC Compact Keys + +Hotspots on the Helium Network currently are uniquely identified by their ECC Compact Public Keys. + +At onboarding time, Hotspots can sign an onboard transaction proving physical ownership of the +device. + +As such, the Helium Solana implementation enforces that all NFTs are unique by ECC Compact keys. + +If you have an asset id of an NFT on Solana, you can get the ECC Compact Key by fetching the digital +asset and pulling out the last value from the content.json_uri. + +For example: + + +```js +import { getAsset } from "@helium/spl-utils"; + +const asset = await getAsset(rpcUrl, new PublicKey("...asset id...")); + +const eccCompactKey = asset.content.json_uri.split("/").slice(-1)[0]; +``` + +If you have only an ECC Compact key and would like to find the NFT, you can use the `KeyToAssetV0` +struct that is stored on-chain: + + +```js +import { daoKey } from "@helium/helium-sub-daos-sdk" +import { keyToAssetKey, init } from "@helium/helium-entity-manager-sdk" + +// Declare constants +const hntMint = new PublicKey("...hnt mint...") +const dao = daoKey(hntMint)[0] +const eccKey = "...ecc compact key..." + +// Init program +const program = await init(provider); + +// Get the asset id from the KeyToAssetV0 account on-chain +const keyToAssetPkey = keyToAssetKey(dao, eccKey)[0] +const keyToAssetAcc = await program.account.keyToAssetV0.fetch(keyToAssetPkey); +const assetId = keyToAssetAcc.asset; + +// Now get the asset from the metaplex asset api +const asset = await getAsset(rpcUrl, assetId) +``` + +## Onboarding Rewardable Entities + +The onboarding flow for an entity is generally that a customer purchases the hardware from a Maker, +and then self-onboards to the network. Because all hardware is created by approved Makers, the +onboard transaction must be approved by the Maker. This uses a similar flow to the legacy +onboarding-server of the Helium blockchain. + +Makers are approved for specific subnetworks. A maker that creates IoT Hotspots cannot necessarily +onboard Mobile Hotspots. Each network subnetwork must approve makers to issue rewardable entities. + +The following test shows the full flow of onboarding a Hotspot using the onboarding server. + +The [React Native Helium](https://github.com/helium/react-native-helium) SDK should greatly simplify +this process. + + + + +```js +import Address from "@helium/address"; +import { Keypair } from "@helium/crypto"; +import { sendAndConfirmWithRetry } from "@helium/spl-utils"; +import { AddGatewayV1 } from "@helium/transactions"; +import { accountProviders } from "@metaplex-foundation/mpl-bubblegum"; +import { + Connection, + PublicKey, + Transaction, + Keypair as SolanaKeypair, +} from "@solana/web3.js"; +import axios from "axios"; +import { BN } from "bn.js"; + +function random(len: number): string { + return new Array(len).join().replace(/(.|$)/g, function () { + return ((Math.random() * 36) | 0).toString(36); + }); +} + +function sleep(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +describe("onboarding server", () => { + let me: Keypair; + let gateway: Keypair; + const maker = Address.fromB58( + "ENTER YOUR MAKER ADDRESS" + ); + let onboardingKey: string; + + let base = "https://onboarding.web.test-helium.com"; + before(async () => { + me = await Keypair.makeRandom(); + gateway = await Keypair.makeRandom(); + onboardingKey = gateway.address.b58; + const result = await axios.post( + `${base}/api/v2/hotspots`, + { + onboardingKey, + macWlan0: random(10), + macEth0: random(10), + rpiSerial: random(10), + heliumSerial: random(10), + batch: "example-batch", + }, + { + headers: { + authorization: "ENTER YOUR MAKER AUTH KEYS" + }, + } + ); + + await sleep(2000); + }); + + it("should run issue txs", async () => { + const hotspot = ( + await axios.get(`${base}/api/v2/hotspots/${onboardingKey}`) + ).data.data; + console.log(hotspot); + console.log(me.privateKey); + const solanaKeypair = SolanaKeypair.fromSecretKey(me.privateKey); + console.log("Solana pubkey: ", solanaKeypair.publicKey.toBase58()) + + await sleep(2000); + + const result = await axios.post( + `${base}/api/v3/transactions/create-hotspot`, + { + location: new BN(1).toString(), + transaction: ( + await new AddGatewayV1({ + owner: me.address, + gateway: gateway.address, + payer: maker, + }).sign({ + gateway, + }) + ).toString(), + } + ); + + const connection = new Connection("https://api.devnet.solana.com"); + const { solanaTransactions } = result.data.data; + for (const solanaTransaction of solanaTransactions) { + const txid = await sendAndConfirmWithRetry( + connection, + Buffer.from(solanaTransaction), + { skipPreflight: true }, + "confirmed" + ); + console.log(txid.txid); + } + + let tries = 0; + let onboardResult: any; + while (tries < 10 && !onboardResult) { + try { + onboardResult = await axios.post( + `${base}/api/v3/transactions/mobile/onboard`, + { + entityKey: onboardingKey, + } + ); + } catch { + console.log(`Hotspot may not exist yet ${tries}`); + tries++; + await sleep(2000); // Wait for Hotspot to be indexed into asset api + } + } + + + for (const solanaTransaction of onboardResult!.data.data + .solanaTransactions) { + const tx = Transaction.from(Buffer.from(solanaTransaction)); + tx.partialSign(solanaKeypair) + const txid = await sendAndConfirmWithRetry( + connection, + tx.serialize(), + { skipPreflight: true }, + "confirmed" + ); + console.log(txid.txid); + } + + const updateResult = await axios.post( + `${base}/api/v3/transactions/mobile/update-metadata`, + { + entityKey: onboardingKey, + location: new BN(1).toString(), + elevation: 2, + gain: 11, + wallet: solanaKeypair.publicKey.toBase58() + } + ); + + for (const solanaTransaction of updateResult.data.data.solanaTransactions) { + const tx = Transaction.from(Buffer.from(solanaTransaction)); + tx.partialSign(solanaKeypair) + const txid = await sendAndConfirmWithRetry( + connection, + tx.serialize(), + { skipPreflight: true }, + "confirmed" + ); + console.log(txid.txid); + } + }); +}); +``` + +## Claiming Rewards on Rewardable Entities + +A system of oracles keeps track of the rewards owed to each Rewardable Entity. For example, in the +IoT network there are oracles that keep track of the HNT tokens earned by each Hotspot for PoC. + +These oracles are responsible ONLY for tracking the total lifetime rewards associated with a +Hotspot. This frees the oracles from any kind of dependence on the blockchain. They don't care about +the issuance or movement of tokens. + +The `lazy-distributor` program keeps track of, for each Hotspot, how much of the total lifetime +rewards have been claimed. Claiming rewards, then, consists of two steps: + +1. Ask oracles to update the on-chain state to reflect the latest lifetime rewards for this Hotspot. +2. Issue the difference between the total lifetime rewards and total claimed rewards to the Hotspot + owner. + +In practice, we have made it so that this can all happen in a singular transaction for PoC rewards. +Staking rewards will happen in transactions combining up to 4 days of rewards. + +### Finding Current Rewards + +Oracles work off of a restful API that involves + +1. Grabbing lifetime rewards for all oracles. +2. Constructing a transaction to set the rewards and passing the transaction to each oracle to + partially sign. +3. Submitting the fully signed transaction to Solana. + +The SDK simplifies this process into two functions, `getCurrentRewards` and `formTransaction`. + +If you have interest in using the REST api, you can see the relatively simple client code +[here](https://github.com/helium/helium-program-library/blob/master/packages/distributor-oracle/src/client.ts) + +To fetch rewards across all oracles for a given asset id: + + +```js +import { init, lazyDistributorKey } from "@helium/lazy-distributor-sdk"; +import { getCurrentRewards } from "@helium/distributor-oracle"; +import * as anchor from "@coral-xyz/anchor"; + +anchor.setProvider(anchor.AnchorProvider.local("...rpc url...")); +const provider = anchor.getProvider() as anchor.AnchorProvider; +const program = await init(provider) + +const iotMint = new PublicKey("...iot mint...") +const assetId = new PublicKey("...asset id...") +const lazyDistributorPkey = lazyDistributorKey(iotMint)[0]; +const rewards = await getCurrentRewards(program, lazyDistributorPkey, assetId); + +rewards.map(reward => { + console.log(`Oracle ${reward.oracleKey} stating lifetime rewards of ${reward.currentRewards}`); +}) +``` + +### Claiming Rewards + +:::info + +The claim example in this section requires a connection to an RPC node (provider) that understands +compressed NFTs. This is an advanced feature that is not yet supported by Solana's public RPC +servers. **This example will not work unless you use an appropriate RPC provider such as +[Helius](https://www.helius.xyz/).** + +::: + +You can then get a transaction to submit to the Solana blockchain using those rewards: + + +```js + +import { formTransaction } from "@helium/distributor-oracle"; +import { sendAndConfirmWithRetry } from "@helium/spl-utils"; + +const tx = await formTransaction({ + program, + provider, + rewards, // from above + hotspot: assetId, + lazyDistributor: lazyDistributorPkey, +}) + +const signed = await provider.wallet.signTransaction(tx); + +await sendAndConfirmWithRetry( + provider.connection, + Buffer.from(signed.serialize()), + { skipPreflight: true }, + 'confirmed', +); +``` diff --git a/docs/network-iot/hotspots-iot/data-only-hotspots.mdx b/docs/network-iot/hotspots-iot/data-only-hotspots.mdx new file mode 100644 index 000000000..415a641d2 --- /dev/null +++ b/docs/network-iot/hotspots-iot/data-only-hotspots.mdx @@ -0,0 +1,105 @@ +--- +id: data-only-hotspots +title: Data-Only Hotspots +pagination_label: Data-Only Hotspots +sidebar_label: Introduction +description: Helium Data-Only Hotspot Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/data-only-hotspots +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + + +
+
+ +Any LoRaWAN gateway can be used to transfer data through the Helium Network. Data-only Hotspots are +eligible for **network data transfer rewards** but not **Proof-of-Coverage rewards**. This class of +Hotspot offers a flexible path for companies and organizations looking to leverage the Helium +Network for their IoT needs. + +Since data-only Hotspots do not earn Proof-of-Coverage rewards, they may be permissionlessly added +to the network. When added to the blockchain, they will earn HNT for transferring network data. + +## Basic Architecture + +The [gateway-rs](https://github.com/helium/gateway-rs) client backs both data-only Hotspots as well +as Proof-of-Coverage enabled IoT Hotspots. Gateway-rs is designed to run alongside a packet +forwarder and handles communications with the Helium Packet Router. + +```mermaid +graph LR; + subgraph Gateway["Helium-Enabled Gateway (Hotspot)"] + PacketForwarder["Packet
Forwarder"] + HeliumGateway["Helium
Gateway-rs"] + + PacketForwarder -- "Semtech GWMP
over UDP" --> HeliumGateway + end + + HeliumRouter["Helium
Packet Router"] + LNS["LoRaWAN
Network Server"] + + HeliumGateway -- "gRPC" --> HeliumRouter + HeliumRouter --> LNS +``` + +The articles in this section will outline the 'Gateway' highlighted portion of the above diagram. + +### Packet Forwarder + +Gateway-rs is designed to interact with the +[Semtech Packet Forwarder](https://github.com/helium/packet_forwarder). If no packet forwarder is +installed on the target hardware, follow the manufacturer's instructions using their documentation +or one of the tutorials below. + +- [Dragino LPS8/DLOS8](/iot/data-only/dragino-data-only-hotspot) +- [RAKwireless Concentrator (RAK2245/RAK2247/RAK2287) + Raspberry Pi](/iot/data-only/rak-concentrators) + - [Using Balena: RAKwireless RAK2287 Concentrator + Raspberry Pi](/iot/data-only/balena-data-only-hotspot) +- [RAKwireless WisGate Edge Lite 2](https://github.com/HoBoWAN/Helium-Data-Only-Hotspot/blob/main/README.md) +- [Seeed Studio SenseCAP M2](https://wiki.seeedstudio.com/Network/SenseCAP_Network/SenseCAP_M2_Data_Only-Helium_gateway/SenseCAP_M2_Data_Only_Quick_Start/) + +### Gateway-rs + +Gateway-rs is the lightweight client that handles message signing and communications with Helium +Packet Router, the backbone of the IoT Network. + +Gateway-rs is designed to be installed directly adjacent to the packet forwarder on the gateway. For +the latest releases and build notes, refer to the repository +[readme](https://github.com/helium/gateway-rs/blob/main/README.md) on GitHub. + +For guidance on using gateway-rs, view the +[Data-Only Hotspot Onboarding](/iot/data-only-hotspots-onboarding) section. + +## Transactions & Cost + +A data-only Hotspot is capable of transferring network traffic without being onboarded. However, +rewards for data transfer will not be issued. + +To enable the Helium Network to reward a data-only Hotspot for network traffic and to report a +location, two criteria must be met: + +1. The data-only Hotspot must be 'onboarded' to the network. + The **Add Hotspot** transaction links the Hotspot's key (`swarm_key`) to a user's + [account](/wallets) and makes the Hotspot known to the network. This allows the Hotspot to be + rewarded for data transfer. +1. The specific location of the Hotspot should be declared. + This allows the network define regional parameters and aids in location-solving for certain + sensor applications. The **Assert Location** transaction provides the physical location + (lat/long), elevation (in meters), and antenna EIRP (in dBi) data for the Hotspot. A Hotspot must + be onboarded before its location can be asserted. + +The network fees are as follows: + +- **Add Data-Only Hotspot**: 50,000 Data Credits (USD \$0.50) +- **Assert Location**: 50,000 Data Credits (USD \$0.50) + +These fees are paid using [Data Credits](/tokens/data-credit). + +Transactions are submitted using the [CLI Wallet](/wallets/cli-wallet). The CLI Wallet should +**not** be installed on the gateway, doing so could expose account keys to the open internet if the +gateway is not properly secured. Existing accounts generated using the Helium Wallet App can be +[imported to the CLI](/wallets/cli-wallet#import-seed-phrase-account-into-cli). + +For guidance on submitting these transactions, view the +[Data-Only Hotspot Onboarding](/iot/data-only-hotspots-onboarding) section. diff --git a/docs/network-iot/hotspots-iot/data-only-onboarding.mdx b/docs/network-iot/hotspots-iot/data-only-onboarding.mdx new file mode 100644 index 000000000..507d233c1 --- /dev/null +++ b/docs/network-iot/hotspots-iot/data-only-onboarding.mdx @@ -0,0 +1,330 @@ +--- +id: data-only-hotspots-onboarding +title: Data-Only Hotspot Onboarding +pagination_label: Data-Only Hotspot Onboarding +sidebar_label: Data-Only Hotspot Onboarding +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/data-only-hotspots-onboarding +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +# Data-Only Hotspot Onboarding + + +
+
+ +This guide walks through the process of onboarding a Data-Only Hotspot to the Helium Network. The +onboarding procedure expects a gateway configured with the Semtech Packet Forwarder and Helium +Gateway-rs. + +## Prerequisites + +- LoRaWAN Gateway with Gateway-rs installed. +- Helium Wallet CLI with a funded account imported. +- Token balances to onboard a Data-Only Hotspot. + - 100,000 ($1) Data Credits (DCs) comprised of + - 50,000 ($0.50) Data-Only Onboard + - 50,000 ($0.50) Data-Only Location Assert + - SOL (Solana's native cryptocurrency) to cover transaction fees (~0.01 Sol) + +## Installing Gateway-rs + +If the gateway is already configured with gateway-rs, skip to +[Prepare the Helium Wallet CLI](#prepare-the-helium-wallet-cli). + +If the gateway does not already have gateway-rs installed, follow these steps to install and +configure it. +For more in-depth guides, refer to the available tutorials. + +### Running From a Release + +Compiled releases are available directly from GitHub. + +- https://github.com/helium/gateway-rs/releases + +### Building From Source + +Build the program from source. The build chain for gateway-rs is +[Rust](https://www.rust-lang.org/tools/install). + +```sh title="Install Rust" +curl https://sh.rustup.rs -sSf | sh +``` + +```sh title="Add Rust to shell" +source "$HOME/.cargo/env" +``` + +```sh title="Install protobuf compiler" +sudo apt-get update && sudo apt-get install protobuf-compiler +``` + +```sh title="Clone the gateway-rs repository" +git clone https://github.com/helium/gateway-rs.git +``` + +```sh title="Build gateway-rs from within the gateway-rs directory" +cd gateway-rs/ +cargo build --release +``` + +The compiled `helium_gateway` program will be available in the `gateway-rs/target/release/` +directory. + +## Prepare Gateway-rs + +To simplify running the `helium_gateway` program, place it in a folder that is easily accessible or +in the `/usr/bin/` directory. Placing `helium_gateway` in this bin directory will automatically add +it to the shell path. + +```sh title="Copying the helium_gateway program to /usr/bin/" +sudo cp gateway-rs/target/release/helium_gateway /usr/bin/ +``` + +```sh title="Running the helium_gateway program after adding it to /usr/bin/" +$ helium_gateway --version +> helium_gateway 1.1.1 +``` + +### Configure `settings.toml` + +From the downloaded release or built source, copy the settings.toml file into a directory where it +will not be overwritten and can be easily found. + +The default path is `/etc/helium_gateway/settings.toml`. If using a different path, pass the +location of the settings.toml file to helium_gateway using the `-c` flag. + +```sh title="Initialize the default directory for Helium Gateway" +sudo mkdir /etc/helium_gateway +``` + +```sh title="Make a copy of settings.toml in the default directory" +sudo cp gateway-rs/config/settings.toml /etc/helium_gateway/ +``` + +For the subsequent steps, a command-line-based text editor is used. + +```sh title="Edit the copied settings.toml file" +sudo nano /etc/helium_gateway/settings.toml +``` + +#### [Optional] Region Plan + +Setting the gateway's region is only required if the Hotspot is not added and asserted to the +blockchain. For onboarded Hotspots, the region is retrieved via the asserted location stored +on-chain. The Hotspot will not transfer data unless one of these criteria is met. + +```toml title="Uncomment this line by removing the #. Set the appropriate region" +# region = "US915" +``` + +Determine the region plan that should be used. The selected region plan must match the region plan +in the Semtech Packet Forwarder. + +#### [Optional] Define `gateway_key.bin` Location + +The default path is `/etc/helium_gateway/gateway_key.bin`. If using a different path, update the key +location in `settings.toml`. + +The `gateway_key.bin` file stores the information used to identify the Hotspot on the network. The +key file will allow gateway-rs to securely sign all messages transferred from the Hotspot. Key +signing allows the Helium Network to confirm that data payloads are delivered from verifiable +sources. The gateway_key will be generated during the first run of the server if no existing key is +found. + +```toml +# File based: +keypair = "/etc/helium_gateway/gateway_key.bin" +``` + +It's advised to backup the `gateway_key.bin` file, especially if it needs to be recovered after the +onboarding process. + +### First Run + +With gateway-rs installed on the gateway, initialize the key for the Hotspot. If creating the +gateway_key in /etc/helium_gateway/, `sudo` may be required on first run to create the key file. + +```sh title="Generate a swarm_key by running gateway-rs." +sudo helium_gateway server +``` + +
+ +
Example successful result after first running Gateway-rs
+
+ +### Continued Operation + +Gateway-rs will not automatically run at system start. To make gateway-rs automatically run, create +a system service. + +```sh title="Create a service file for gateway-rs" +sudo nano /etc/systemd/system/gateway-rs.service +``` + +Define the system user to execute the service (Line 9). + +```service {9} showLineNumbers title="Create this service at /etc/systemd/system/gateway-rs.service" +# /etc/systemd/system/gateway-rs.service +[Unit] +Description=Helium Gateway + +[Service] +ExecStart=helium_gateway server +Restart=on-failure +RestartSec=15 +User= + +[Install] +WantedBy=multi-user.target +``` + +Once the service is written, activate it using the following commands. + +```sh title="Activate the service" +sudo systemctl enable gateway-rs.service +``` + +```sh title="Start the service" +sudo systemctl start gateway-rs.service +``` + +```sh title="View logs for gateway-rs" +sudo journalctl -fu gateway-rs +``` + +If there are errors in the service, edit it by first stopping the service +(`systemctl stop gateway-rs.service`), then editing it +(`sudo nano /etc/systemd/system/gateway-rs.service`). After changes are made, rerun the above +commands to test and monitor. + +## Prepare the Helium Wallet CLI + +The Helium Wallet CLI will be used to sign and submit the transaction generated. The Helium Wallet +CLI should not be installed on the Hotspot. + +For details on setting up the Helium Wallet CLI and using an existing account, see the +[CLI Wallet](/wallets/cli-wallet) documentation. + +```sh title="Get Helium address for the imported account" +./helium-wallet -f wallet.key info +``` + +The `info` command will return the wallet addresses for both the Solana blockchain and the legacy +Helium L1. + +```json +{ + "address": { + "helium": "", + "solana": "" + }, + "pwhash": "Argon2id13", + "sharded": false +} +``` + +## Generate the `add` Transaction Using Gateway-rs + +Connect to the Hotspot using SSH or the interface provided by the hardware manufacturer. + +Gateway-rs provides tooling to generate a transaction using the gateway_key. Use the Solana address +for the `` and `` fields. + +```sh title="Generate an Add Hotspot Transaction" +helium_gateway add --owner --payer +``` + +The owner and payer accounts can both be the same. To onboard the Hotspot, the payer account will +need to sign the transaction and pay the DC onboarding fee. The owner will be the recipient of the +Hotspot. + +The add command will generate the transaction that can be used in the onboarding step. + +```json {6} title="Add transaction result" +{ + "address": "", + "mode": "dataonly", + "owner": "", + "payer": "", + "txn": "" +} +``` + +## Onboarding With The Command Line Interface Wallet + +Onboarding is done using the [Helium CLI Wallet](/wallets/cli-wallet). + +The Helium CLI Wallet will not automatically convert HNT to Data Credits. Make sure the paying +account has at least 50,000 Data Credits available to complete the add transaction. The transactions +take place on the Solana blockchain, so a small amount of SOL is also required to cover Solana fees. + +```sh +helium-wallet hotspots add iot --commit +``` + +The CLI will return a Solana transaction hash for the on-chain event. This transaction can be looked +up using a Solana block explorer such as [Solana Explorer](https://explorer.solana.com/) or +[Solscan](https://solscan.io/). + +```json +{ + "result": "ok", + "txid": "" +} +``` + +## Asserting With The Command Line Interface Wallet + +To assert the location of the Hotspot using the Helium CLI Wallet, use the command +`helium-wallet hotspots update`. + +Make sure the paying account has at least 50,000 Data Credits available to complete the location +assert transaction. The transactions take place on the Solana blockchain, so a small amount of SOL +is also required to cover Solana fees. + +Before running the assert command, get the public key from the Data-Only Hotspot. + +```sh +helium_gateway key info +``` + +The `key info` command will return the Hotspot's 'animal name' along with the Hotspot's public key. + +```json +{ + "name": "angry-purple-tiger", + "key": "11TL62V8NYvSTXmV5CZCjaucskvNR1Fdar1Pg4Hzmzk5tk2JBac", + "onboarding": "11TL62V8NYvSTXmV5CZCjaucskvNR1Fdar1Pg4Hzmzk5tk2JBac" +} +``` + +Use the "key" value along with the Hotspot's physical latitude and longitude to assert its location +to the network. A utility such as [latlong.net](https://www.latlong.net) is helpful for looking up +coordinates. Gain is set in dBm and elevation is set in meters. + +``` +helium-wallet hotspots update iot --lat=37.771150 --lon=-122.419200 --gain 1.2 --elevation 7 --commit +``` + +`--elevation` and `--gain` are optional values and can be updated at any time without further fees +as long as the lat/lon values remain the same. Use the built-in help command, +`helium-wallet hotspots update --help` for more info. + +:::important Location Availability + +While Hotspot metadata like RSSI or pubkey are reported immediately, it may take up to 24 hours for +the location information to be processed and reflected in the LNS. + +::: diff --git a/docs/network-iot/hotspots-iot/data-only/balena-data-only-hotspot.mdx b/docs/network-iot/hotspots-iot/data-only/balena-data-only-hotspot.mdx new file mode 100644 index 000000000..2be7b9f13 --- /dev/null +++ b/docs/network-iot/hotspots-iot/data-only/balena-data-only-hotspot.mdx @@ -0,0 +1,143 @@ +--- +id: balena-data-only-hotspot +title: Data-Only Hotspot with balena + Raspberry Pi + RAK Concentrator RAK2287 +pagination_label: Balena Data-Only Tutorial +sidebar_label: Balena Data-Only Tutorial +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/data-only/balena-data-only-hotspot +--- + +# Data-Only Hotspot Setup with balena + Raspberry Pi + RAK2287 + +import useBaseUrl from '@docusaurus/useBaseUrl' + +A data-only Hotspot is a type of Hotspot that participates on the Helium Network by transferring +data from the end devices (LoRaWAN nodes). The data-only Hotspots are eligible for network data +transfer rewards but not Proof-of-Coverage rewards. + +This guide covers all the steps needed to set up a data-only Hotspot using a Raspberry Pi and a RAK +concentrator (RAK2287) and the Pi Hat running on balena. This configuration can be achieved by +installing the **_gatewayrs_** and **_packet forwarder_** services open sourced by +[Nebra](https://github.com/nebraltd) and using balenaOS and [balenaCloud](https://balena.io). + +## Getting started + +### Hardware + +- Raspberry Pi 0/2/3/4 or balenaFin +- SD card in case of the Raspberry Pi +- [RAK 2287 LoRa concentrator SPI based](https://store.rakwireless.com/products/rak2287-lpwan-gateway-concentrator-module) + and [RAK2287 Pi HAT](https://store.rakwireless.com/products/rak2287-pi-hat) + +:::important + +To use the concentrator module with a Raspberry Pi HAT, you must make sure to order the variation +with the SPI interface. + +::: + +### Software + +- [balena.io account](https://dashboard.balena-cloud.com/) +- [balenaEtcher](https://balena.io/etcher) + +## Deploy the code + +Running this data-only Hotspot with balena.io is as simple as deploying it to a balenaCloud +application. You can do it in just one click by using the button below: + +[![](https://www.balena.io/deploy.png)](https://dashboard.balena-cloud.com/deploy?repoUrl=https://github.com/mpous/helium-data-hotspot) + +Follow the instructions, click `Add a Device` and flash an SD card with that balenaOS image +downloaded from balenaCloud. Enjoy the magic 🌟Over-The-Air🌟! + +Find the [repository with the source code](https://github.com/mpous/helium-data-hotspot) if you +would like to clone and deploy from your computer or you would like to contribute. + +## Configure the device + +### Device Variables + +Once the device is online on balenaCloud and the services `packet-forwarder` and `gateway-rs` are +downloaded and installed, go to `Device Variables`. + +- Create the variable for all the services `VARIANT` with your hardware definition. During the test + is being used a Raspberry Pi 4 with RAK2287 LoRa concentrator and the `VARIANT` is defined + `DIY-RAK2287`. This `VARIANT` is compatible with any Raspberry Pi. You can find the list of + hardware compatible combinations on + [GitHub](https://github.com/NebraLtd/helium-hardware-definitions). + +- Create the variable for all the services `REGION_OVERRIDE` with your LoRa region (e.g. `EU868`). + You can find a list of LoRa regions compatible on [GitHub](https://github.com/NebraLtd/hm-pktfwd). + +### Test the Helium Data-Only Hotspot + +Once the Device Variables are properly set up, the Hotspot should be running showing some errors on +connecting to the network on the balenaCloud Logs. + +To check that the Hotspot has been generated correctly, go to the `Terminal` and select the +`gateway-rs` service, then introduce: + +`helium_gateway key info` + +And you will get something like this: + +`{ "address": , "name": }` + +At this point, your data-only Hotspot is ready to join the Helium IoT Network. + +### Join the Helium IoT Network with your Data-Only Hotspot + +To join the Helium IoT Network, at the moment only the Helium CLI Wallet can be used. The Helium +Wallet App is still not compatible with the data-only Hotspots. Follow +[these instructions](https://github.com/mpous/helium-data-hotspot/#join-the-helium-blockchain-with-your-data-only-hotspot) +to add your data-only Hotspot on the Helium IoT Network. + +## Check the Data-Only Hotspot + +Now that the data-only Hotspot has been added to the Helium IoT Network it should be visible in the +Helium Wallet. + +If you create a Helium Device, then go to the [Helium Console](https://console.helium.com) and +Inspect packages from your device to confirm that the data-only Hotspot is the one that relays the +data from your Devices. You also will be able to see on the balenaCloud logs that UPLINK messages +have been relayed to the Helium OUI. + +## Manage your gateway_key + +It's extremely important that at this point, with the Hotspot added on the Helium IoT Network you +backup the `gateway_key`. If you lose this key, you will not be able to use this hotspot anymore in +case there is a problem on your Hotspot (SD card corrupted, etc.). + +### Backup your gateway_key.bin file + +Follow these instructions to back up your `gateway_key.bin` file of your Hotspot. + +- Open an SSH session to the "host-os" on balenaCloud Terminal. +- Type this command and keep note of the (YOUR INSTANCE)\_miner-storage: + `ls /var/lib/docker/volumes`. +- Type this command to get a link to download the gateway key (note to replace the YOUR INSTANCE + part with the container number that you got from the previous command). + `curl -F "file=@/var/lib/docker/volumes/(YOUR INSTANCE)_miner-storage/_data#/gateway_key.bin" https://file.io` +- Use the outputted file.io link to securely download your swarm key. The link only works **one** + time. + +### Restore your gateway_key.bin file on your new file + +Follow these instructions to restore your `gateway_key.bin` key into your new hotspot. + +- Open an SSH session to the "host-os" on balenaCloud Terminal. +- Type this command and keep note of the (YOUR INSTANCE)\_miner-storage information: + `ls /var/lib/docker/volumes`. +- Navigate to where the swarm_key is stored + `cd /var/lib/docker/volumes/(YOUR INSTANCE)_miner-storage/_data#/`. +- Remove the original `gateway_key.bin` file `rm gateway_key.bin`. +- Reboot miner and you will see it restored and working. +- Upload your `gateway_key.bin` that you wish to restore onto file.io and do + `curl -LJO [FILE.IO UPLOAD LINK]`. + +## Contributions + +Thank you to Nebra for developing and balenifying the Helium Hotspot, Helium developers community, +Jose from RAK, Travis and Joseph from balena to work on the dbus + conman issues. diff --git a/docs/network-iot/hotspots-iot/data-only/dragino-data-only-hotspot.mdx b/docs/network-iot/hotspots-iot/data-only/dragino-data-only-hotspot.mdx new file mode 100644 index 000000000..ecdd68c3f --- /dev/null +++ b/docs/network-iot/hotspots-iot/data-only/dragino-data-only-hotspot.mdx @@ -0,0 +1,133 @@ +--- +id: dragino-data-only-hotspot +title: Dragino LPS80/DLOS8 Data-Only Tutorial +pagination_label: Dragino Data-Only Tutorial +sidebar_label: Dragino Data-Only Tutorial +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/data-only/dragino-data-only-hotspot +--- + +# Dragino LoRaWAN Gateway Setup + +import useBaseUrl from '@docusaurus/useBaseUrl' +import { YouTube } from 'mdx-embed' + +This guide provides instructions on how to configure an 8-channel Dragino LoRaWAN gateway such as +the LPS8 or DLOS8 to work with the Helium IoT Network. + +## Prerequisites + +Before configuring your Dragino to work with the Helium IoT Network, please confirm that it is +connected to the Internet and updated to the latest firmware. Refer to the user guide provided on +the [Dragino download site](http://www.dragino.com/downloads/index.php?dir=LoRa_Gateway/) for more +detailed instructions. + +## Configure LoRaWAN Frequency Plan + +To be able to send and receive LoRaWAN data, your Gateway must be configured to the frequency plan +specified for your region. You may be able to use the predefined frequency in the Dragino software +or in some cases may need to manually set them per the frequencies used by the Helium IoT Network in +your region. + +1. Log into the Dragino gateway web interface. In the standard Dragino firmware connect via your + browser at `http://:8000` once the Dragino is connected to your network. +2. Navigate to Lora > Lora from the Menu. +3. Under Radio Settings, select your region in the Frequency Plan drop-down and, if applicable, the + Frequency Sub Band. For example, in the US, select US915 for the frequency plan and 2 for the + sub-band. +4. If desired, set Static GPS coordinates. +5. Click Save & Apply. + +For some regions, it may be necessary to manually populate the Customized Channel Settings based on +the Helium frequencies for your region. Refer to the +[Helium sample LoRa packet forwarder global.conf files](https://github.com/helium/sx1302_hal/tree/helium/hotspot/packet_forwarder) +for your region as a guide to the values to use. You can check the values used by the pre-defined +frequency plans by viewing the global_conf.json file: `cat /etc/lora/global_conf.json`. + +_Example of customized channel settings using the US915 frequency plan for the Helium IoT Network_ + + + +## Configure LoRaWAN Settings + +Next, you will configure the LoRa packet forwarder on the Dragino to forward packets to the Helium +Gateway service which will be installed on the Dragino in the next step. + +1. From the Dragino web interface, navigate to LoRaWAN > LoRaWAN from the menu. +2. Select `Custom / Private LoRaWAN` from the Service Provider. +3. Set the Server Address to `127.0.0.1` and both Uplink and Downlink ports to `1680`. This will + configure the forwarder to use the default port used by Helium Gateway. + + + +4. Click Save & Apply. + +## Install Helium Gateway (gateway-rs) on the Dragino + +Finally, you will install the Helium Gateway service. This requires SSH access to the Dragino. + +1. Connect to the Dragino over SSH. By default, the standard Dragino firmware uses port 2222 for SSH + (the OpenVPN firmware uses port 22) and the root user has access. + `ssh root@ -p 2222`. +2. Copy the Helium Gateway package to the Dragino. The latest + [source code](https://github.com/helium/gateway-rs) and pre-built + [releases](https://github.com/helium/gateway-rs/releases) are available on GitHub. Option 1: + Download from GitHub: On the Dragino run `cd /tmp` and + `wget -O helium-gateway--dragino.ipk https://github.com/helium/gateway-rs/releases/download//helium-gateway--dragino.ipk`. + Option 2: Copy from another computer: Run this command from on the computer within the directory + containing the package `scp helium-gateway--dragino.ipk :/tmp/`. +3. Install the Helium Gateway package `opkg install /tmp/helium-gateway--dragino.ipk`. +4. Backup your key file `/etc/helium_gateway/gateway_key.bin` and keep in a safe place. This will be + needed to recover this Gateway especially if it is onboarded to the Helium IoT Network. + +Helium Gateway is now installed and should be running. Use the command `helium_gateway key info` to +view the public key address and animal name of your Gateway. + +## Verify + +Your Dragino gateway should now be set up and forwarding LoRaWAN data traffic to the Helium IoT +Network. + +Use the Dragino system log to verify that Helium Gateway has started. You can view the log in the +web interface or by using logread on the command line interface (e.g, +`logread | grep helium_gateway`). In the logs, you should see messages indicating helium_gateway is +starting. If you do not see these, try restarting the service (`/etc/init.d/helium_gateway restart`) +or reboot the Dragino as the messages may have rotated out of the log. + +_Example logs showing the Helium Gateway service starting_ + +``` +Thu Mar 25 19:43:06 2021 daemon.err helium_gateway[2031]: Mar 25 19:43:06.184 INFO starting server, key: , version: 1.0.0-alpha.4 +Thu Mar 25 19:43:06 2021 daemon.err helium_gateway[2031]: Mar 25 19:43:06.289 INFO starting, module: gateway +Thu Mar 25 19:43:06 2021 daemon.err helium_gateway[2031]: Mar 25 19:43:06.306 INFO starting, module: router +``` + +Additionally, the LoRa Packet Forwarder log can provide some clues as to whether the LoRaWAN server +configuration is correct. Search the system log for PULL_DATA messages and confirm that they are +acknowledged such as `REPORT~ # PULL_DATA sent: 1 (100.00% acknowledged)`. This indicates that the +packet forwarder is communicating with the Helium Gateway service running on the Dragino and is +getting replies from the service as expected. Note, this is not a foolproof way to confirm it is +configured correctly. By default, the LoRaWAN Server settings are configured for the TTN EU server +which will also provide acknowledgment. However, the absence of acknowledgment could indicate that +the LoRaWAN settings are not correct per the above. + +## Onboard as Data-Only Hotspot + +As part of the Hotspot project, a new class of Hotspots called "Data-Only Hotspots" can be added to +the Helium IoT Network, meaning Dragino LPS80/DLOS8 Hotspots can be added to the network. These +data-only Hotspots reward IOT tokens for transferring data but never for Proof-of-Coverage. This +onboarding process will require using the [Helium CLI Wallet](/wallets/cli-wallet/) to submit the +onboarding and assert location transactions. See +[Prepare the Helium Wallet CLI and further information](/iot/data-only-hotspots-onboarding#prepare-the-helium-wallet-cli) +for specific details on Hotspot onboarding. + +### Video Guide for Setup + + diff --git a/docs/network-iot/hotspots-iot/data-only/kerlink-data-only-hotspot.mdx b/docs/network-iot/hotspots-iot/data-only/kerlink-data-only-hotspot.mdx new file mode 100644 index 000000000..ea9e20028 --- /dev/null +++ b/docs/network-iot/hotspots-iot/data-only/kerlink-data-only-hotspot.mdx @@ -0,0 +1,20 @@ +--- +id: kerlink-data-only-hotspot +title: Kerlink Data-Only Hotspot Tutorial +pagination_label: Kerlink Data-Only Hotspot Tutorial +sidebar_label: Kerlink Data-Only Hotspot Tutorial +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/data-only/kerlink-data-only-hotspot +--- + +Kerlink gateways support running as Data-Only Hotspots on the Helium Network. + +Two guides are available depending on the Kerlink OS version: + +- For KerOS 5: https://github.com/BenoitDuffez/kerlink-data-only-gateway +- For KerOS 6: https://gitlab.com/dtuando1/keros-6-helium + +Once the Helium client is running on the Kerlink gateway, follow the steps in the +[Data-Only Hotspot Setup](/iot/data-only-hotspots-onboarding#prepare-the-helium-wallet-cli) guide to +complete the onboarding of the Hotspot. diff --git a/docs/network-iot/hotspots-iot/data-only/rak-concentrators.mdx b/docs/network-iot/hotspots-iot/data-only/rak-concentrators.mdx new file mode 100644 index 000000000..9b18e1969 --- /dev/null +++ b/docs/network-iot/hotspots-iot/data-only/rak-concentrators.mdx @@ -0,0 +1,365 @@ +--- +id: rak-concentrators +title: RAK Concentrator + Raspberry Pi Data-Only Tutorial +pagination_label: RAK Concentrator Data-Only Tutorial +sidebar_label: RAK Concentrator Data-Only Tutorial +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/data-only/rak-concentrators +--- + +# Data-Only Hotspot Setup with RAKwireless Concentrator + Raspberry Pi + +import useBaseUrl from '@docusaurus/useBaseUrl' +import { YouTube } from 'mdx-embed' + +This guide covers the steps needed to set up a Data-Only Hotspot using a WisLink RAK LPWAN +concentrator module and a Raspberry Pi. + +## Requirements + +- **Raspberry Pi:** Multiple families are supported, however, not all the models have been tested. + It's recommended to follow this guide with a Pi 3 or Pi 4. + +- **LoRaWAN Concentrator:** The concentrator module and Pi HAT to interface it with the Raspberry + Pi. The following table contains the links to concentrators and their HATs. + +| WisLink LPWAN Concentrator | Raspberry Pi HAT | +| --------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------: | +| [RAK2287](https://store.rakwireless.com/products/wislink-concentrator-module-sx1302-rak2287-lorawan?variant=41826859385030) | [RAK2287 Pi HAT](https://store.rakwireless.com/products/rak2287-pi-hat) | +| [RAK2247](https://store.rakwireless.com/products/rak2247-lpwan-gateway-concentrator-module?variant=39942873743558) | [RAK2247 Pi HAT](https://store.rakwireless.com/products/rak2247-pi-hat) | +| [RAK2245](https://store.rakwireless.com/products/rak2245-stamp-edition?variant=39942878494918) | Pi-compatible | + +:::important + +To use the concentrator module with a Raspberry Pi HAT, you must make sure to order the variation +with the SPI interface. + +::: + +## Packet Forwarder Preparation + +To prepare the hardware to become a Helium Data-Only Hotspot, it first must be configured to handle +LoRaWAN messages. To get started, install an operating system and set up the packet forwarder as +outlined in one of the two options below. + +LoRaWAN gateways are generally 'headless' computers. The +[Raspberry Pi Headless](https://www.raspberrypi.com/documentation/computers/configuration.html#setting-up-a-headless-raspberry-pi) +documentation is a helpful reference for initial setup. + +#### Option 1 + +Follow this +[installation procedure](https://github.com/RAKWireless/rak_common_for_gateway#installation-procedure) +if you are already familiar with the Raspberry Pi and the RAK concentrator modules. + +#### Option 2 + +Follow the Quick Start Guide for your concentrator on the +[RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisLink/#wislink-lpwan). +If using Wi-Fi for initial setup, it is recommended to initially configure the Raspberry Pi using +[Raspberry Pi Imager](https://www.youtube.com/watch?v=ntaXWS8Lk34). + +- [RAK2287 Quickstart](https://docs.rakwireless.com/Product-Categories/WisLink/RAK2287/Quickstart/) +- [RAK2247 Quickstart](https://docs.rakwireless.com/Product-Categories/WisLink/RAK2247/Quickstart/) +- [RAK2245 Quickstart](https://docs.rakwireless.com/Product-Categories/WisLink/RAK2245-Pi-HAT/Quickstart/) + +### Select the Region Plan + +Enter the gateway configuration interface by using the following command: + +``` +sudo gateway-config +``` + +Select the _Setup RAK Gateway Channel Plan_ option, then _Server is TTN_, and in the last step +choose the proper plan according to your country. To finish, press OK. + +
+ +
This image shows the option to select US915.
+
+
+ +### Verify If The Packet Forwarder Is Running + +When the LoRa packet forwarder is running as a service, some log messages are recorded in the +syslog. To inspect the logs, run the following command: + +``` +sudo tail -f /var/log/syslog | grep ttn-gateway +``` + +The log output should show something similar to: + +``` +rak-gateway ttn-gateway[1886]: JSON up: {"stat":{"time":"2021-07-21 16:25:00 GMT","rxnb":0,"rxok":0,"rxfw":0,"ackr":0.0,"dwnb":0,"txnb":0,"temp":0.0}} +rak-gateway ttn-gateway[1886]: INFO: [down] PULL_ACK received in 142 ms +rak-gateway ttn-gateway[1886]: INFO: [down] PULL_ACK received in 142 ms +rak-gateway ttn-gateway[1886]: INFO: [down] PULL_ACK received in 142 ms +rak-gateway ttn-gateway[1886]: ##### 2021-07-21 16:25:30 GMT ##### +rak-gateway ttn-gateway[1886]: ### [UPSTREAM] ### +rak-gateway ttn-gateway[1886]: # RF packets received by concentrator: 0 +rak-gateway ttn-gateway[1886]: # CRC_OK: 0.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00% +rak-gateway ttn-gateway[1886]: # RF packets forwarded: 0 (0 bytes) +rak-gateway ttn-gateway[1886]: # PUSH_DATA datagrams sent: 1 (122 bytes) +rak-gateway ttn-gateway[1886]: # PUSH_DATA acknowledged: 0.00% +rak-gateway ttn-gateway[1886]: ### [DOWNSTREAM] ### +rak-gateway ttn-gateway[1886]: # PULL_DATA sent: 3 (100.00% acknowledged) +rak-gateway ttn-gateway[1886]: # PULL_RESP(onse) datagrams received: 0 (0 bytes) +rak-gateway ttn-gateway[1886]: # RF packets sent to concentrator: 0 (0 bytes) +rak-gateway ttn-gateway[1886]: # TX errors: 0 +rak-gateway ttn-gateway[1886]: ### SX1302 Status ### +rak-gateway ttn-gateway[1886]: # SX1302 counter (INST): 210904434 +rak-gateway ttn-gateway[1886]: # SX1302 counter (PPS): 0 +rak-gateway ttn-gateway[1886]: # BEACON queued: 0 +rak-gateway ttn-gateway[1886]: # BEACON sent so far: 0 +rak-gateway ttn-gateway[1886]: # BEACON rejected: 0 +``` + +:::note + +`ttn-gateway` is just the name for the LoRa packet forwarder service in the configuration for these +RAK concentrators; this is a "legacy name" that doesn't change when using different network servers. + +::: + +### Edit the Packet Forwarder Settings + +You will need to edit some basic options in the packet forwarder configuration to forward the +packets to the address and port the helium_gateway service is listening to. + +Select the option _Edit packet-forwarder config_ within the _gateway-config_ interface. This option +will open the `global_conf.json` file using the nano editor. Then, set the `server_address` to +127.0.0.1 and the `serv_port_up` and `serv_port_down` to 1680, as follows: + +
+ +
+
+ +Close the editor by pressing CTRL + X simultaneously, press ENTER to save the file. + +Restart the packet forwarder to apply the changes by selecting the option _Restart packet-forwarder_ +within the _gateway-config_ interface. + +:::important + +Every time a new region is selected using the _Setup RAK Gateway Channel Plan_ option, these +settings are replaced with the default configuration. Make sure to keep this in mind if the region +is changed later. + +::: + +## Helium Gateway Service Installation + +### Downloading the Package + +Download the latest release from the [gateway-rs](https://github.com/helium/gateway-rs) repository +on GitHub, and set the `` according to +[the latest release](https://github.com/helium/gateway-rs/releases). You can download it in any +directory, for example `/tmp`. + +#### Option 1 + +Get from the repo directly to the Raspberry Pi by running the following commands: + +```sh +cd /tmp +wget https://github.com/helium/gateway-rs/releases/download//helium-gateway--armv7-unknown-linux-musleabihf.tar.gz +``` + +Expand the archive: + +```sh +tar -xf helium-gateway--armv7-unknown-linux-musleabihf.tar.gz +``` + +#### Option 2 + +You can also download it to your computer and pass it to the Raspberry Pi through the Secure Copy +Protocol (SCP): + +```sh +scp helium-gateway--armv7-unknown-linux-musleabihf.tar.gz pi@:/tmp/ +``` + +Through an SSH connection, expand the archive: + +```sh +tar -xf helium-gateway--armv7-unknown-linux-musleabihf.tar.gz +``` + +#### Option 3 + +Build the program from source. The build chain for gateway-rs is +[Rust](https://www.rust-lang.org/tools/install). While build times may be slower, gateway-rs can be +built directly on the Raspberry Pi. + +```sh title="Install Rust" +curl https://sh.rustup.rs -sSf | sh +``` + +```sh title="Add Rust to shell" +source "$HOME/.cargo/env" +``` + +```sh title="Install protobuf compiler" +sudo apt-get update && sudo apt-get install protobuf-compiler +``` + +```sh title="Clone the gateway-rs repo" +git clone https://github.com/helium/gateway-rs.git +``` + +[Increase Raspberry Pi Swap Space](https://pimylifeup.com/raspberry-pi-swap-file/) A clean Raspberry +Pi OS install may not have enough available RAM or swap space to build gateway-rs. Increase the swap +space of the Pi for a smooth build. + +```sh title="Build gateway-rs" +cd gateway-rs/ +cargo build --release +``` + +### Gateway Configuration + +After obtaining or building gateway-rs, move the `helium_gateway` executable file and +`settings.toml` file to places where they are easily accessible. + +#### Gateway Settings + +The `settings.toml` file handles the location of the keyfile used to sign messages as well as the +default region configuration for the Helium IoT Network. It is recommended to make a copy of the +settings.toml file that otherwise exists within the `gateway-rs/config/` folder. + +For simplicity in this guide, place the `settings.toml`file at the home path. + +```sh title="Make a copy of settings.toml" +cp gateway-rs/config/settings.toml ~/settings.toml +``` + +Similarly, edit `settings.toml` to match the intended path for `gateway_key.bin`. The +`gateway_key.bin` file is created at the defined directory on the first run of the gateway-rs +server. + +```toml title="Update the keypair path in settings.toml" +... +# File based: +keypair = "gateway_key.bin" +... +``` + +#### Create a Service + +Create a service to handle automatically starting gateway-rs. + +Update the paths in `ExecStart` for both the location of the `helium_gateway` binary and the +`settings.toml` file (Line 6). +Additionally, define the system user to execute the service (Line 9). + +```service {6,9} showLineNumbers title="Create this service at /etc/systemd/system/gateway-rs.service" +# /etc/systemd/system/gateway-rs.service +[Unit] +Description=Helium Gateway + +[Service] +ExecStart=helium_gateway -c
settings.toml server +Restart=on-failure +RestartSec=15 +User= + +[Install] +WantedBy=multi-user.target +``` + +Once the service is written and proper paths are set, activate it using the following commands: + +```sh title="Activate the service" +sudo systemctl enable gateway-rs.service +``` + +```sh title="Start the service" +sudo systemctl start gateway-rs.service +``` + +```sh title="View logs for gateway-rs" +sudo journalctl -fu gateway-rs +``` + +If there are errors in running the service edit it by first stopping the service +(`systemctl stop gateway-rs.service`), then editing it +(`sudo nano /etc/systemd/system/gateway-rs.service`). After changes are made, rerun the above +commands to test and monitor. + +### Region Configuration + +The region configuration for gateway-rs is a default. The on-chain asserted location of the Gateway +will override the definition in `settings.toml`. Updating the region in settings is optional as long +as the Data-Only Hotspot location is asserted.. + +## Verifying the Installation + +### Inspecting the Service Logs + +The service starts after installation automatically. You can check the execution logs by running the +following command: + +``` +sudo tail -f /var/log/syslog | grep helium_gateway +``` + +### Getting some Information about the Data-Only Hotspot + +Use the following command to get the public key address and animal name of your Data-Only Hotspot: + +``` +./helium_gateway -c ~/settings.toml key info +``` + +This command should give you an output like the following one: + +```json +{ + "address": , + "onboarding": , + "name": +} +``` + +#### Backup the gateway_key + +The `gateway_key.bin` file stores the information used to identify the Data-Only Hotspot on the +Helium IoT Network. It's highly advised to backup this file, especially if you need to recover it +later after the onboarding process. + +Using SCP could be an option to do the backup; that would be something like this: + +``` +scp pi@:/etc/helium_gateway/gateway_key.bin +``` + +If using Windows, a tool like [WinSCP](https://winscp.net/eng/index.php) will enable this +functionality. + +## Onboard the Data-Only Hotspot + +Refer to the [Data-Only Hotspot Onboarding](/iot/data-only-hotspots-onboarding) section to complete +the onboarding of the fully-configured Data-Only Hotspot. + +## Video Guide for Setup + +This Hands-on with RAKStars session follows the steps provided in this guide. + + diff --git a/docs/network-iot/learn/EduDevice.tsx b/docs/network-iot/learn/EduDevice.tsx new file mode 100644 index 000000000..d4321af85 --- /dev/null +++ b/docs/network-iot/learn/EduDevice.tsx @@ -0,0 +1,423 @@ +import { ApplicationServiceClient } from '@chirpstack/chirpstack-api-grpc-web/api/application_grpc_web_pb' +import { ListApplicationsRequest } from '@chirpstack/chirpstack-api-grpc-web/api/application_pb' +import { DeviceServiceClient } from '@chirpstack/chirpstack-api-grpc-web/api/device_grpc_web_pb' +import { + CreateDeviceKeysRequest, + CreateDeviceRequest, + Device, + DeviceKeys, +} from '@chirpstack/chirpstack-api-grpc-web/api/device_pb' +import { DeviceProfileServiceClient } from '@chirpstack/chirpstack-api-grpc-web/api/device_profile_grpc_web_pb' +import { ListDeviceProfilesRequest } from '@chirpstack/chirpstack-api-grpc-web/api/device_profile_pb' +import { InternalServiceClient } from '@chirpstack/chirpstack-api-grpc-web/api/internal_grpc_web_pb' +import { + LogItem, + LoginRequest, + StreamDeviceEventsRequest, +} from '@chirpstack/chirpstack-api-grpc-web/api/internal_pb' +import { Region } from '@chirpstack/chirpstack-api-grpc-web/common/common_pb' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import { EventEmitter } from 'events' +import google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb' +import * as grpcWeb from 'grpc-web' +import React, { useCallback, useEffect, useState } from 'react' +import { Alert, AlertIcon } from '../../../src/theme/components/Alert' +import styles from './build-a-device.module.css' + +const deviceEmitter = new EventEmitter() + +const generateRandomKey = () => { + let cryptoObj = window.crypto || window.Crypto + let b = new Uint8Array(8) + cryptoObj.getRandomValues(b) + let hexString = '' + b.forEach((num, index) => { + let hexVal = num.toString(16) + if (hexVal.length === 1) hexVal = '0' + hexVal + hexString += hexVal + }) + + return hexString +} + +const getHexArray = (key: string = '') => { + return key + .match(/[A-Fa-f0-9]{2}/g)! + .join(', ') + .toUpperCase() + .replace(/[A-Fa-f0-9]{2}/g, '0x$&') +} + +const DeviceInfoRow = ({ label, value }) => { + if (!value) + return ( +

+ + +

+ ) + return ( +

+ + e.target.select()} /> +

+ ) +} + +const useLogin = () => { + const { + siteConfig: { customFields }, + } = useDocusaurusContext() + const interalServiceClient = new InternalServiceClient(customFields.EDU_API_URL) + + return () => + new Promise((resolve, reject) => { + let req = new LoginRequest() + req.setEmail(customFields.EDU_EMAIL) + req.setPassword(customFields.EDU_PW) + interalServiceClient.login(req, {}, (error, resp) => { + if (error !== null) { + return reject(error) + } + return resolve(resp.getJwt()) + }) + }) +} + +const getRequestMeta = (jwt: string) => { + return { authorization: `Bearer ${jwt}` } +} + +const EnvChecker = ({ children }) => { + const { + siteConfig: { customFields }, + } = useDocusaurusContext() + if (!customFields.EDU_API_URL || !customFields.EDU_EMAIL || !customFields.EDU_PW) { + return ( + + +

Please configure your .env file to use the Educational LNS features

+
+ ) + } + + return children +} + +const CreateDeviceComponent = () => { + const { + siteConfig: { customFields }, + } = useDocusaurusContext() + console.log('url', customFields.EDU_API_URL) + const login = useLogin() + const [deviceInfo, setDeviceInfo] = useState({ devEui: '', joinEui: '', networkKey: '' }) + const [isLoading, setIsLoading] = useState(false) + + const createDevice = () => { + setIsLoading(true) + let jwt = '' + let tenants = [] + let applicationId = '' + let deviceProfileId = '' + const interalServiceClient = new InternalServiceClient(customFields.EDU_API_URL) + + const getTenantId = () => { + return tenants[0].getTenantId() + } + const loginWrapper = () => + login().then((loginJwt) => { + jwt = loginJwt as string + }) + + const getTenants = () => { + return new Promise((resolve, reject) => { + interalServiceClient.profile( + new google_protobuf_empty_pb.Empty(), + getRequestMeta(jwt), + (error, resp) => { + if (error !== null) { + reject(error) + } + tenants = resp.getTenantsList() + resolve(tenants) + }, + ) + }) + } + + const getDeviceApplications = () => + new Promise((resolve, reject) => { + const client = new ApplicationServiceClient(customFields.EDU_API_URL) + let req = new ListApplicationsRequest() + req.setTenantId(getTenantId()) + req.setLimit(10) + req.setOffset(0) + + client.list(req, getRequestMeta(jwt), (error, resp) => { + if (error !== null) { + return reject(error) + } + const deviceApplications = resp.toObject() + const targetApplication = deviceApplications.resultList.find( + (application) => application.name === 'Docs', + ) + if (!targetApplication) return reject('Target application not found') + applicationId = targetApplication.id + return resolve(applicationId) + }) + }) + + const getDeviceProfilesPage = () => + new Promise((resolve, reject) => { + const client = new DeviceProfileServiceClient(customFields.EDU_API_URL) + + let req = new ListDeviceProfilesRequest() + req.setTenantId(getTenantId()) + req.setLimit(10) + req.setOffset(0) + + client.list(req, getRequestMeta(jwt), (error, resp) => { + if (error !== null) { + return reject(error) + } + + const deviceProfiles = resp.toObject() + const targetProfile = deviceProfiles.resultList.find( + (deviceProfile) => deviceProfile.region === Region.US915, + ) + if (!targetProfile) return reject('Target profile not found') + + deviceProfileId = targetProfile.id + return resolve(deviceProfileId) + }) + }) + + const createDevice = () => + new Promise((resolve, reject) => { + const client = new DeviceServiceClient(customFields.EDU_API_URL) + let device = new Device() + + const devEui = generateRandomKey() + const joinEui = generateRandomKey() + + device.setApplicationId(applicationId) + device.setName(devEui) + device.setDescription('Randomly generated device') + device.setDevEui(devEui) + device.setDeviceProfileId(deviceProfileId) + device.setIsDisabled(false) + device.setSkipFcntCheck(false) + device.setJoinEui(joinEui) + + let req = new CreateDeviceRequest() + req.setDevice(device) + + client.create(req, getRequestMeta(jwt), (error) => { + if (error !== null) { + setIsLoading(false) + return reject(error) + } + + let req = new CreateDeviceKeysRequest() + let deviceKeys = new DeviceKeys() + const networkKey = generateRandomKey() + generateRandomKey() + deviceKeys.setDevEui(devEui) + deviceKeys.setNwkKey(networkKey) + req.setDeviceKeys(deviceKeys) + + client.createKeys(req, getRequestMeta(jwt), (error) => { + setIsLoading(false) + if (error !== null) { + return reject(error) + } + + setDeviceInfo({ + devEui, + joinEui, + networkKey, + }) + deviceEmitter.emit('deviceInfo', { devEui: devEui, jwt }) + + return resolve(device) + }) + }) + }) + + return loginWrapper() + .then(getTenants) + .then(() => Promise.all([getDeviceApplications(), getDeviceProfilesPage()])) + .then(createDevice) + } + + return ( + <> +
+ + + +
+ + + ) +} + +export const CreateDevice = () => ( + + + +) + +function DeviceEventLoggerComponent() { + const { + siteConfig: { customFields }, + } = useDocusaurusContext() + const login = useLogin() + const [jwt, setJwt] = useState('') + const [devEui, setDevEui] = useState('') + const [events, setEvents] = useState([]) + + useEffect(() => { + const setStreamInfo = ({ devEui, jwt }) => { + setJwt(jwt) + setDevEui(devEui) + } + deviceEmitter.on('deviceInfo', setStreamInfo) + return () => deviceEmitter.removeListener('deviceInfo', setStreamInfo) + }, []) + + const onMessage = useCallback((logItem: LogItem) => { + setEvents((e) => { + if ( + e.length === 0 || + parseInt(logItem.getId().replace('-', '')) > parseInt(e[0].id.replace('-', '')) + ) { + return [logItem.toObject(), ...e] + } + return e + }) + }, []) + + // get jwt when manual devEui entry + useEffect(() => { + if (devEui.length === 16 && !jwt) { + login().then(setJwt) + } + }, [jwt, devEui]) + + useEffect(() => { + if (devEui.length === 16 && !!jwt) { + const streamDeviceEvents = (callbackFunc: (resp: LogItem) => void): (() => void) => { + let req = new StreamDeviceEventsRequest() + req.setDevEui(devEui) + var stream: grpcWeb.ClientReadableStream | undefined = undefined + let retryCount = 0 + + let setup = () => { + const client = new InternalServiceClient(customFields.EDU_API_URL) + stream = client.streamDeviceEvents(req, getRequestMeta(jwt)) + + stream = stream.on('data', (resp) => { + callbackFunc(resp) + retryCount = 0 // reset retry count on successful data reception + }) + + stream = stream.on('end', function () { + retryCount++ + setTimeout(setup, Math.min(1000 * 2 ** retryCount, 30000)) // exponential backoff with max delay + }) + + stream = stream.on('error', function () { + retryCount++ + setTimeout(setup, Math.min(1000 * 2 ** retryCount, 30000)) // exponential backoff with max delay + }) + } + + setup() + + return () => { + if (stream) { + stream.cancel() + } + } + } + + let cancelFunc = streamDeviceEvents(onMessage) + + return () => { + cancelFunc() + } + } + }, [jwt, devEui, onMessage]) + + return ( + <> + {/*

Device Event Logger

*/} + {/*

jwt: {jwt}

*/} + + {!events.length && ( +
+ setDevEui(event.target.value)} + /> +

No events yet.

+
+ )} + +
+ {events + .filter((event) => event.description !== 'log') + .map((event) => ( +
+
+

+ {event.description === 'join' + ? '🔄 Joining' + : event.description === 'up' + ? '⬆️ Uplink' + : event.description === 'down' + ? '⬇️ Downlink' + : event.description === 'status' + ? '*️⃣ Status' + : `🛜 ${event.description}`} +

+

+ {new Date(event.time?.seconds! * 1000).toLocaleString()} +

+
+
    + {event.propertiesMap.map(([key, value], index) => ( +
  • + + {key === 'DR' + ? 'Data Rate' + : key === 'FCnt' + ? 'Frame Count' + : key === 'FPort' + ? 'Frame Port' + : key} + :{' '} + + {value} +
  • + ))} +
+
+ ))} +
+ + ) +} + +export const DeviceEventLogger = () => ( + + + +) diff --git a/docs/network-iot/learn/build-a-device.mdx b/docs/network-iot/learn/build-a-device.mdx new file mode 100644 index 000000000..e5ee56f3d --- /dev/null +++ b/docs/network-iot/learn/build-a-device.mdx @@ -0,0 +1,91 @@ +--- +id: build-a-device +title: Build A LoRaWAN Device +pagination_label: Build A LoRaWAN Device +sidebar_label: Build A LoRaWAN Device +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /network-iot/learn/build-a-device +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' +import { DocslabCodeBlock } from 'docslab-docusaurus/lib/theme/DocslabCodeBlock' +import { CreateDevice, DeviceEventLogger } from './EduDevice.tsx' + +Many commercially-produced LoRaWAN devices come pre-provisioned and ready to use out of the box. +However, understanding how devices are onboarded, programmed, and connected unlocks the full +potential of building custom IoT solutions on the Helium Network. + +This guide walks through the process of creating a custom device from scratch using a real-world +development device remotely configured through the widgets on this page. + +## Provisioning a Device + +Every LoRaWAN device requires a unique set of cryptographic keys for authentication and encryption. +Pre-built devices typically come with these keys already configured, but for custom devices, you +must generate and provision them yourself. + +Click the button below to generate a new set of device keys: + +
+ +
+
+ +Behind the scenes, these keys are registered with a LoRaWAN Network Server (LNS). The Join EUI is +shared with the Helium Packet Router (HPR), which allows any Hotspot in the world to route messages +from this device to the correct LNS. The cryptographic keys ensure end-to-end encryption between the +device and the LNS. + +## Programming the Device + +The example below uses a [Heltec CubeCell](https://heltec.org/project/htcc-ab01/) development board +with PlatformIO. Copy the keys generated above into the `devEui`, `appEui`, and `appKey` variables: + +
+ +
+
+ +Once compiled and uploaded, the device will attempt to join the network and begin transmitting data. + +## Viewing Device Events + +When your device transmits, a Hotspot on the Helium Network receives the radio signal and forwards +it through the Packet Router to the LNS. The LNS then delivers the data here, to this page, in +real-time. + +
+ +
+
+ +If uplinks appear in the logger, you're seeing the complete data path in action. Your device +transmits, the Helium network routes, and your application receives. This same flow can deliver data +to any backend you build: a database, a dashboard, an alerting system, or an API. + +## Next Steps + +Once data reaches the LNS, it can be forwarded to your application using integrations such as HTTP +webhooks, MQTT, or cloud platforms like AWS IoT and Azure IoT Hub. See +[LoRaWAN Network Servers](/iot/lorawan-network-servers) for more information on available LNS +options. + +## Experiments + +Try modifying the device behavior to deepen your understanding: + +1. **Change the payload**: The device sends data in hexadecimal format. How would you transmit + "Hello, World!"? Tools like [asciitohex.com](https://www.asciitohex.com/) can help with + conversions. +2. **Use different ports**: LoRaWAN's `FPort` field allows you to separate data types. Send sensor + readings on one port and status updates (like battery level) on another. +3. **Adjust the transmission interval**: The device currently sends data every 30 seconds. Try + changing it to 10 seconds. Consider how this affects battery life and network usage. diff --git a/docs/network-iot/learn/build-a-device.module.css b/docs/network-iot/learn/build-a-device.module.css new file mode 100644 index 000000000..f1d1ed3ac --- /dev/null +++ b/docs/network-iot/learn/build-a-device.module.css @@ -0,0 +1,119 @@ +/*CreateDevice*/ +.DeviceKeys { + width: 100%; + padding: 0.5em; +} + +.keybox { + display: flex; + flex-direction: column; +} + +.keybox label { + font-weight: 500; + color: #53627c; + font-size: small; + background-color: #eaeff9; + line-height: 1em; + padding: 1em 1rem calc(1em + 6px); + border-radius: 8px 8px 0 0; +} + +.keybox input { + display: table; + background: white; + width: 100%; + table-layout: fixed; + border: none; + border-radius: 0 0 8px 8px; + padding: 1rem; + margin-top: -8px; + box-shadow: 0 3px 8px -3px rgba(0, 0, 0, 0.08); + font-size: 1rem; +} + +.keybox input:focus { + outline-color: rgb(47, 98, 192); +} + +.keybox input::placeholder { + color: #aaadb4; +} + +.keybox input:focus:placeholder { + outline: none; +} + +.createDeviceButton { + appearance: none; + cursor: pointer; + background-color: #fff; + border: none; + border-radius: 6px; + box-shadow: 0 3px 6px -3px #0000001a; + font-size: 1em; + margin-bottom: 1em; + padding: 0.5em; +} + +.createDeviceButton:disabled { + background-color: #e8e8e8; +} + +/*DeviceEventLogger*/ +.eventsContainer { + width: 100%; + max-height: 50vh; + overflow: scroll; + display: flex; + flex-direction: column; + padding: 2rem 1rem 1rem; + margin: -0.5rem; + scroll-snap-type: y proximity; +} + +.eventFrame { + background: white; + box-shadow: 0 3px 8px -3px rgba(0, 0, 0, 0.08); + border-radius: 0.5em; + overflow: scroll; + margin: 0 0.5rem 1rem; + flex: 0 0 auto; + scroll-snap-align: start; + scroll-snap-margin: 1rem; +} + +.eventHeader { + display: flex; + justify-content: space-between; + padding: 0.5em 1rem; + background: #eaeff9; +} + +.eventTime, +.eventType { + color: #53627c; + font-size: small; + padding: 0; + margin: 0; +} + +.eventType { + font-weight: 500; +} + +.eventTime { + color: #6a748c; +} + +.eventProperties { + list-style: none; + padding: 0.5rem 0 0.55rem; + margin: 0; + /* display: inline-flex; */ +} + +.eventProperties li { + margin-top: 0 !important; + padding: 0 1rem; +} diff --git a/docs/network-iot/learn/understanding-lorawan.mdx b/docs/network-iot/learn/understanding-lorawan.mdx new file mode 100644 index 000000000..4b2666d29 --- /dev/null +++ b/docs/network-iot/learn/understanding-lorawan.mdx @@ -0,0 +1,70 @@ +--- +id: understanding-lorawan +title: Understanding LoRaWAN +pagination_label: Understanding LoRaWAN +sidebar_label: Understanding LoRaWAN +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /network-iot/learn/understanding-lorawan +--- + +LoRaWAN is a wireless protocol built around a simple tradeoff: sacrifice bandwidth for range and +power efficiency. A LoRaWAN device can transmit small packets (sensor readings, GPS coordinates, +status updates) over several kilometers while running on a battery for years. + +This makes LoRaWAN ideal for applications where devices need to report data infrequently and operate +unattended: agricultural sensors, asset trackers, smart meters, environmental monitors. + +## How Data Flows + +A LoRaWAN device doesn't connect directly to the internet. Instead, it broadcasts a radio signal +that any nearby gateway can receive. The gateway forwards the message to a LoRaWAN Network Server +(LNS), which authenticates the device, decrypts the payload, and delivers it to your application. + +```mermaid +graph LR + device[Device] -->|LoRa radio| gateway[Gateway] + gateway -->|IP| lns[Network Server] + lns --> app[Your Application] +``` + +Multiple gateways can receive the same transmission. The network server deduplicates these messages +and selects the best one based on signal quality. This redundancy improves reliability without +requiring anything special from the device. + +## Device Keys + +Every LoRaWAN device is provisioned with cryptographic keys that authenticate it to the network and +encrypt its data. Every device, custom built or off the shelf, has three identifiers: + +**DevEUI**: A unique 64-bit address that identifies the device globally, similar to a MAC address. + +**JoinEUI**: Identifies which network server should handle the device's join request. On Helium, +this is how the Packet Router knows where to send your device's traffic. + +**AppKey**: A secret root key shared between the device and network server. During the join process, +both sides use this key to derive session keys for encrypting data. + +These keys ensure that even though your device's radio signals are received by public gateways, only +your network server can read the contents. + +## On the Helium Network + +Helium Hotspots are LoRaWAN gateways. When a device transmits, any Hotspot in range receives it and +forwards the packet to the [Helium Packet Router][hpr]. The router uses the JoinEUI to determine +which LNS should receive the data, then delivers it there. + +This architecture means a single device can roam across the entire Helium network without +configuration changes. Any Hotspot will pick up its signal and route it correctly. + +:::note + +For deeper technical details on LoRaWAN, see [The Things Network Learn][ttn-learn] or the [LoRa +Alliance LoRaWAN 1.0.2 Specification][lora-spec]. + +::: + +[hpr]: https://github.com/helium/helium-packet-router +[ttn-learn]: https://www.thethingsnetwork.org/docs/lorawan/ +[lora-spec]: + https://resources.lora-alliance.org/technical-specifications/lorawan-specification-v1-0-2 diff --git a/docs/network-iot/lorawan-network-servers/LorawanNetworkServers.jsx b/docs/network-iot/lorawan-network-servers/LorawanNetworkServers.jsx new file mode 100644 index 000000000..91ae3b055 --- /dev/null +++ b/docs/network-iot/lorawan-network-servers/LorawanNetworkServers.jsx @@ -0,0 +1,7 @@ +import useBaseUrl from '@docusaurus/useBaseUrl' + +export const LearnMore = () => ( + <> + Learn More + +) diff --git a/docs/network-iot/lorawan-network-servers/find-a-lns-provider.mdx b/docs/network-iot/lorawan-network-servers/find-a-lns-provider.mdx new file mode 100644 index 000000000..f1e898e2c --- /dev/null +++ b/docs/network-iot/lorawan-network-servers/find-a-lns-provider.mdx @@ -0,0 +1,31 @@ +--- +id: find-a-lns-provider +title: Find A LoRaWAN Network Server Provider +pagination_label: Find An LNS Provider +sidebar_label: Find An LNS Provider +description: Find A LoRaWAN Network Server Provider +image: https://docs.helium.com/img/link-image.png +slug: /iot/find-a-lns-provider +--- + +import LnsProvidersTable from './findAnLnsProvider' + +Professional hosting companies can provide support and immediate access to a ready-to-go +connectivity platform. LNS Services will vary in price, support, and features depending on the +company. Companies may offer public shared servers, and/or private servers. + +The following providers within the OpenLNS initiative offer multi-tenant and private instances to +businesses and individuals. + + + +:::note + +Helium is not directly associated with the listed vendors and makes no endorsements about the +quality of their offerings. + +::: + +> If you offer public LNS services and would like to add your company to this list, submit a pull +> request adding your company to the +> [LNS Providers](https://github.com/helium/well-known/tree/main/lists/lns-providers) list. diff --git a/docs/network-iot/lorawan-network-servers/findAnLnsProvider.js b/docs/network-iot/lorawan-network-servers/findAnLnsProvider.js new file mode 100644 index 000000000..404995a07 --- /dev/null +++ b/docs/network-iot/lorawan-network-servers/findAnLnsProvider.js @@ -0,0 +1,80 @@ +import React, { useMemo, useState, useEffect } from 'react' +import { useTable, useSortBy } from 'react-table' + +const LnsProvidersTable = () => { + const [data, setData] = useState([]) + + useEffect(() => { + fetch( + 'https://raw.githubusercontent.com/helium/well-known/main/lists/lns-providers/providers.json', + ) + .then((response) => response.json()) + .then((data) => setData(data)) + .catch((error) => console.log(error)) + }, []) + + const columns = useMemo( + () => [ + { + Header: 'Name', + accessor: 'name', + Cell: ({ row }) => ( + + {row.values.name} + + ), + }, + { + Header: 'Service Region', + accessor: (provider) => provider.serviceRegion.join(', '), + }, + { + Header: 'Offering', + accessor: (provider) => provider.serverType.join(', '), + }, + { + Header: 'Description', + accessor: 'description', + }, + ], + [], + ) + + const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } = useTable( + { columns, data }, + useSortBy, + ) + + return ( + + + {headerGroups.map((headerGroup) => ( + + {headerGroup.headers.map((column) => ( + + ))} + + ))} + + + {rows.map((row) => { + prepareRow(row) + return ( + + {row.cells.map((cell) => { + return + })} + + ) + })} + +
+ {column.render('Header')} + + {column.isSorted ? (column.isSortedDesc ? ' ▼' : ' ▲') : ''} + +
{cell.render('Cell')}
+ ) +} + +export default LnsProvidersTable diff --git a/docs/network-iot/lorawan-network-servers/lorawan-network-servers.mdx b/docs/network-iot/lorawan-network-servers/lorawan-network-servers.mdx new file mode 100644 index 000000000..35d2c7307 --- /dev/null +++ b/docs/network-iot/lorawan-network-servers/lorawan-network-servers.mdx @@ -0,0 +1,56 @@ +--- +id: lorawan-network-servers +title: LoRaWAN Network Servers +pagination_label: LoRaWAN Network Servers +sidebar_label: Introduction +description: LoRaWAN Network Servers +image: https://docs.helium.com/img/link-image.png +slug: /iot/lorawan-network-servers +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' +import { LearnMore } from './LorawanNetworkServers' + + + +A LoRaWAN Network Server (LNS) is a vital component of a LoRaWAN network responsible for device +management, message routing, and integration with application servers. LoRaWAN Network Servers play +a crucial role in ensuring the scalability, reliability, and interoperability of LoRaWAN networks. + +
+ +
Simplified block diagram of Data Transfer Accounting.
+
+ +## Connect and Manage Devices on Helium + +There are a couple of options to get started onboarding devices and connecting through a Helium LNS. + +
+
+
+

Work with a Service Provider

+ + Professional LNS hosting companies can provide support and immediate access to a ready-to-go + connectivity platform. + + + + +
+
+

Self Host an LNS

+ + Comfortable setting up, configuring, and managing your servers? Hosting your own LNS could + be a good option. + + + + +
+
+
diff --git a/docs/network-iot/lorawan-on-helium.mdx b/docs/network-iot/lorawan-on-helium.mdx new file mode 100644 index 000000000..645671b04 --- /dev/null +++ b/docs/network-iot/lorawan-on-helium.mdx @@ -0,0 +1,176 @@ +--- +id: lorawan-on-helium +title: LoRaWAN On Helium +pagination_label: LoRaWAN On Helium +sidebar_label: LoRaWAN On Helium +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/lorawan-on-helium +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + + + +## Overview + +The Helium Network has many points of distinction from a typical LoRaWAN network that are critical +for understanding before deploying internet of things (IoT) applications on Helium. + +In conventional LoRaWAN networks, end devices, such as sensors or actuators, send LoRa wireless +messages to physical gateway devices. These gateways, in turn, forward the messages from the end +devices to central or regional LoRaWAN Network Servers (LNSs) which decompose the messages for +processing in IoT applications. Typically, LoRaWAN networks are run by a central authority in either +public or private configurations. In public configurations, the central authority allows multiple +customers to leverage gateways and LNSs in developing end-to-end IoT applications. Conversely, in +private configurations, a single entity uses the network and all of its networking components. + +The Helium Network takes a different approach with respect to LoRaWAN networks. Rather than have a +centralized authority responsible for managing gateway devices (referred to as Hotspots in the +Helium parlance) or LNSs that serves as a gatekeeper for deploying end devices, Helium allows for +the decentralized operation of both Hotspots and LNSs with a completely permisionless architecture. +In practice, this means that anybody can run a Hotspot device and provide LoRaWAN coverage to the +Helium Network. Similarly, anybody can operate an LNS and provide cloud connectivity and +configuration for end devices. In turn, end devices operating on the Helium Network are able to tap +into the global network of LoRaWAN connectivity powered by community operated Hotspots and gain +access to the largest LoRaWAN network ever created. + +In the remainder of this section, a high-level overview of the architecture of the Helium Network +will be provided, in addition to a discussion on terminology of networking primitives. + +## High-Level Architecture + +Given the unique architecture of the Helium Network in comparison to typical LoRaWAN networks, it is +helpful to understand how Helium manages a large, decentralized ecosystem of Hotspots and LNSs. + +In this regard, a first primary difference is that rather than having gateway devices directly +communicate with LNSs, Helium introduces the concept of an intermediate routing service called +[Helium Packet Router (HPR)](https://github.com/helium/helium-packet-router) that handles the +connectivity between LNSs and Hotspots. As shown in the diagram below, end devices still send +messages to Hotspots, but instead of the Hotspots subsequently forwarding the messages to directly +to an LNS, the Hotspots send the messages to HPR. In doing so, HPR can identify the particular +Hotspots that forwarded the message from the end device in order to properly credit the Hotspot with +data transfer rewards on the Helium Network. + +A second primary difference is with the introduction of the +[Helium IoT Config Service](https://github.com/helium/oracles/tree/main/iot_config) which serves as +an interface for users for configuring routing rules relied on by HPR when determining where to +forward messages from end devices to LNSs. Users can leverage tools including the +[Helium Config Service CLI](https://github.com/helium/helium-config-service-cli) for providing +routing rule configurations to the Config Service (and in turn HPR). + +```mermaid +graph LR + dev[Device] --> gateway[Hotspot] + gateway --> hpr[Helium Packet Router] + hpr --> lns[LoRaWAN Network Server] + hpr <--> ics[Helium IoT Config Service] + lns --> ics + lns --> i[Integrations] +``` + +
+ +For a deeper understanding of the architecture of the Helium Network, users are encouraged to read +documentation and review the open-source code for HPR and IoT Config Service: + +- [HPR](https://github.com/helium/helium-packet-router) +- [Config Service](https://github.com/helium/oracles/tree/main/iot_config) + +## The OUI + +Each LNS on the Helium Network acquires an Organizationally Unique Identifier (OUI). This registers +the LNS with the blockchain and allocates two very important routing objects owned and maintained by +the OUI Operator: + +- one or more **slabs** of DevAddrs, reserving NwkAddr space for the OUI's devices on the Helium + Network + +A device defined by (AppEUI, DevEUI) can be allocated to any of the DevAddrs owned by the OUI. It is +even possible to multiplex many devices on the same DevAddr at the same time, using the Message +Integrity Check (MIC) to disambiguate. + +Starting in 2023, Helium will be utilizing an OpenLNS Initiative to allow more choice and increase +usability. You can read more about the OpenLNS Initiative at the [Helium Foundation +Blog][foundation-blog] or read more in the [Use Helium LoraWAN](/iot/lorawan-network-servers) +section. + +## Organizationally Unique Identifier + +Organizationally Unique Identifiers (OUIs) are registered identities on the Helium Blockchain. To +send and receive packets to an end-device, a network user needs to be serviced an OUI. + +An OUI has some specificities related to LoRaWAN and packet routing, as +[documented above](/iot/lorawan-on-helium#the-oui), but with respect to the blockchain, what's +important is that +[only libp2p addresses registered as endpoints for the OUI](https://github.com/helium/proto/blob/master/src/blockchain_txn_oui_v1.proto#L6) +may open and close state channels on behalf of an OUI. + +For example, the account `13tyMLKRFYURNBQqLSqNJg9k41maP1A7Bh8QYxR13oWv7EnFooc` purchased the first +OUI on the Helium Blockchain. The address `112qB3YaH5bZkCnKA5uRH7tBtGNv2Y5B4smv1jsmvGUzgKT71QpE` +operates the OUI on behalf of the owner. + +OUIs are purchased and numbered in incrementing order. + +:::info + +Based on the latest benchmarking tests the upper limit for a Devaddr `1024` slab is approximately +5800 devices, but results still need to be replicated and bracketed. Community members are +encouraged to run their own benchmarking tests. Requires basic familiarity with Linux and Bash +command line. + +::: + +### Join Request Frames and Filters + +A Join Request frame has the following unencrypted header: + +```bash ++---------------------------------------------------------+ +| Size (octets) | 8 | 8 | 8 | ++------------------+------------+------------+------------+ +| Join Request | AppEUI | DevEUI | DevNonce | ++---------------------------------------------------------+ +``` + +From the gateway's perspective, the (AppEUI, DevEUI) may be used to figure out if one or more OUI's +are interested in the Join Request. + +This is done by querying every filter maintained and written to the blockchain by every OUI. The +filters themselves are _xorhash_ tables, thus the AppEui and DevEui cannot be extracted. Only with +the AppEui and DevEui in hand can the gateway run it through the table to see if it's there. + +In response to the Join Request, a Join Accept is sent down, assigning the NwkAddr. Due to the +multi-tenancy on the Helium Network, the LNS may only assign NwkAddrs within its DevAddr slab(s). + +### Data Frames and DevAddr Slabs + +Data packets have the following unencrypted header (FHDR): + +```bash ++----------------------------------------------------------------------+ +| Size (octets) | 4 | 1 | 2 | 0..15 | ++------------------+------------+------------+------------+------------+ +| FHDR | DevAddr | FCtrl | FCnt | FOpts | ++----------------------------------------------------------------------+ +``` + +Within DevAddr, there is the NwkAddr of a device: + +```bash ++------------------------------------------------+ +| DevAddr | ++------------------------+-----------------------+ +| NwkID (bits 31–25) | NwkAddr (bits 24–0) | ++-----------+--------------------+---------------+ +| Helium Network | allocated by slab | +|(‘H’ / 0b1001000 / 0x48)| to OUIs | ++-----------+--------------------+---------------+ +``` + +From the gateway's perspective, it can use DevAddr to determine the OUI of Data frames. A quick +query can say which OUI owns this DevAddr slab. This look-up and routing by DevAddr instead of by +\(AppEUI, DevEUI\) via _xorhash_ filters is generally much quicker. + +[foundation-blog]: + https://medium.com/helium-foundation/scaling-iot-growth-with-heliums-open-lns-initiative-c906e6953d6d diff --git a/docs/network-iot/lorawan-roaming.mdx b/docs/network-iot/lorawan-roaming.mdx new file mode 100644 index 000000000..baa624694 --- /dev/null +++ b/docs/network-iot/lorawan-roaming.mdx @@ -0,0 +1,151 @@ +--- +id: lorawan-roaming +title: LoRaWAN Roaming on Helium +pagination_label: Roaming +sidebar_label: Roaming +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/lorawan-roaming +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +Before getting started, make sure to have the following: + +- Helium Network Organizationally Unique Identifier (OUI). +- Data Credits (>3.5M DC). +- A NetID issued by the LoRa Alliance. +- A roaming endpoint so your LNS can receive roaming traffic. +- [Helium Config Service CLI](https://github.com/helium/helium-config-service-cli) installed. + +For guidance on purchasing and funding an OUI, refer to the following guides: + +- [Buy an OUI](/iot/run-an-lns/buy-an-oui) +- [Fund an OUI](/iot/run-an-lns/fund-an-oui) + +## Roaming Quickstart + +While your roaming endpoint is up and running, you need to let the Helium config service know of its +existence. Initialization of some CLI environment variables will streamline the process: + +Run `helium-config-service-cli env init` + +1. Fill in the relative path of the delegate key pair file for `Keypair Location` +1. Fill in `Your Net ID` for `Net ID` +1. Fill in your assigned OUI for `Assigned OUI` +1. Fill in the number of `multi-buy` you want for `Default Max Copies` as a default for your + routes. +1. Export the environment variables. This needs to be done manually. The CLI will list values to be + exported. Add `export` to each line and run it. For instance, run `export HELIUM_MAX_COPIES=15` + to set the max_copies value in the session. Be sure not to put a space around the `=` sign + +```sh title="Setting environment variables in a terminal window." +export HELIUM_KEYPAIR_BIN=<./your/path/to/delegate/keypair.bin> +export HELIUM_NET_ID=00003C +export HELIUM_OUI= +export HELIUM_MAX_COPIES=15 +``` + +Now, you are ready to generate your first route. Routes contain the necessary information for us to +know how to route a packet — DevEUI+AppEUI (for routing join requests), DevAddr range (for routing +uplinks), endpoint (so the network knows where to send the packet), etc. + +1. Run `helium-config-service-cli route new --commit` +1. You can then see the empty route template. It should look like this, except that you should be + seeing your NetID, assigned OUI, and max_copies value: + +
+ +
Route creation as shown in a terminal window.
+
+
+ +Next, let's define the endpoint that you use for ingesting traffic. You can run: + +```bash +$ helium-config-service-cli route update server --host --port --route-id --commit +``` + +If you are using HTTP roaming, you need to run: + +- Note that the auth-header and receiver-nsid are optional. + +```bash +$ helium-config-service-cli route update http --dedupe-timeout --path --auth-header --receiver-nsid --route-id --commit +``` + +If you are using GWMP roaming, you need to run: + +```bash +$ helium-config-service-cli route update add-gwmp-region --route-id --commit +``` + +Make sure your endpoint, port and protocol are set correctly, otherwise, we may not be able to send +traffic to your LNS. + +### How to Add Your First Device + +In this example, we will show you how to add your first device to start roaming. To receive join +request for your device, you need to let Helium know which EUI pair to watch out for. You can run +the following + +**If you are a roaming partner migrating from Roaming Console, please read the +`Migrating from Roaming Console` section below first.** + +```bash +$ helium-config-service-cli route euis add --route-id -d -a --commit +``` + +While this allows your Helium to forward your device's join request, you also need to specify a +DevAddr range on that route so that Helium can forward its uplinks. + +```bash +$ helium-config-service-cli route devaddrs add -s -e --route-id -- commit +``` + +### Migrating from Roaming Console + +If you are a roaming partner migrating from Roaming Console to the new OpenLNS Architecture, please +carefully test out your roaming connections before the full switch. + +While the Roaming Console currently coexists with the OpenLNS Architecture, it is not possible to +have the same device to simultaneously send traffic to both Roaming Console and through OpenLNS +Architecture. + +#### Migrating EUI Pair for Join Requests + +Let's say you had 100 devices on Roaming Console, you can start the migration slowly by registering +1 EUI pair with the CLI, so that 99 of your devices will roam through Roaming Console and 1 of your +devices will roam through OpenLNS. Then, you can keep migrating, possibly registering 50 EUI pairs +with the CLI, so that 49 of your devices will roam through Roaming Console and 51 will roam through +OpenLNS. Eventually, you will have registered all 100 EUI pairs with the CLI, so that all of your +devices will roam through Roaming Console. + +#### Migrating DevAddr Range for Uplinks + +Let's say you have 10 DevAddrs, you can start the migration slowly by registering 1 DevAddr with the +CLI, so that 9 of your DevAddrs will roam through Roaming Console and 1 of your DevAddrs will roam +through OpenLNS. Then, you can keep migrating, possibly registering 5 DevAddrs with the CLI, so that +4 of your DevAddrs will roam through Roaming Console and 6 will roam through OpenLNS. Eventually, +you will have registered all 10 DevAddrs with the CLI, so that all of your devices will roam through +Roaming Console. + +## Advanced Roaming + +The session key filter gives an operator the ability to accept and reject specific roaming traffic +on a device level. Leveraging the session key filter is recommended for all operators. Read more +about the session key filter and other advanced configurations in the +[Advanced Configuration](/iot/run-an-lns/advanced-configuration) section. + +## Roaming Proxy Service + +If Helium's OpenLNS architecture is incompatible with a roaming partner's setup, then they can +leverage +[the roaming proxy service prototype](https://github.com/helium/helium-packet-router-ingest), which +should provide a standard roaming interface. Note that Helium is not in active maintenance of this +service. Helium does not necessarily recommend the usage of this architecture but appreciates the +diverse needs of roaming partners. diff --git a/docs/network-iot/run-an-lns/FundAnOUI.jsx b/docs/network-iot/run-an-lns/FundAnOUI.jsx new file mode 100644 index 000000000..334a04ba1 --- /dev/null +++ b/docs/network-iot/run-an-lns/FundAnOUI.jsx @@ -0,0 +1,18 @@ +export const OUIUsage = () => ( +
+ +
+ Up-to-date usage metrics for all IoT OUIs on the Helium network.
To get a sense of traffic + and DC usage on the network, check out the full{' '} + + Dune Data Credit Dashboard + + . +
+
+) \ No newline at end of file diff --git a/docs/network-iot/run-an-lns/add-device-chirpstack-grpc.mdx b/docs/network-iot/run-an-lns/add-device-chirpstack-grpc.mdx new file mode 100644 index 000000000..6f10f5590 --- /dev/null +++ b/docs/network-iot/run-an-lns/add-device-chirpstack-grpc.mdx @@ -0,0 +1,266 @@ +--- +id: chirpstack-add-device-grpc +title: Add Device to ChirpStack via gRPC +pagination_label: Add Device to ChirpStack via gRPC +sidebar_label: Add Device to ChirpStack via gRPC +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns/chirpstack-add-device-grpc +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +ChirpStack offers a [gRPC API](https://www.chirpstack.io/docs/chirpstack/api/grpc.html) to +facilitate interactions with ChirpStack such as creating device profiles, applications, and devices. +Additionally, ChirpStack provides +[SDKs](https://www.chirpstack.io/docs/chirpstack/api/grpc.html#chirpstack-sdks) in Go, Python, +JavaScript, and Rust for interacting with the gRPC API. Please refer to the +[protocol documentation](https://www.chirpstack.io/docs/chirpstack/api/api.html) for information +regarding the gRPC API specification offered by ChirpStack. + +## Overview + +This guide, outlined by the five step process below, demonstrates how to add a device to ChirpStack +via the gRPC API. + +1. Create an API key using the ChirpStack console +2. Identify the tenant ID using the ChirpStack console +3. Create a Device Profile via the gRPC API +4. Create an Application via the gRPC API +5. Create a Device via the gRPC API + +## Create an API Key Using the ChirpStack Console + +### Access ChirpStack Console + +To create an API key using the ChirpStack console, first access your ChirpStack instance. The +ChirpStack console UI is accessible at `http://:8080`. If no user has been set, +utilize the default credentials to log in: + +Username: admin +Password: admin + +### Generate an API Key + +From the dashboard, click on `API Keys` under the `Tenant` header on the left side panel. + +
+ +
+
+ +Next, click the on the `Add API Key` button in the upper right hand portion of the screen. + +
+ +
+
+ +Finally, provide a name for the API key and click Submit. + +
+ +
+
+ +When complete, take note of the API key as it will not be provided again once you navigate away from +the page. + +## Identify Tenant ID Using the ChirpStack Console + +Still using the ChirpStack console, the `Tenant ID` can be found by found by clicking on `Dashboard` +under the `Tenant` header of the left side panel. The `Tenant ID` will then be found near the top +middle of the tenant dashboard page. + +
+ +
+
+ +Take note of the Tenant ID as it will be required when using the gRPC API. + +## Create a Device Profile via the gRPC API + +The Node.js file provided below demonstrates how to create a device profile via the ChirpStack gRPC +API using the JavaScript SDK. Please note that `` corresponds to the IP address +of the ChirpStack instance, `` corresponds to the API key created through the steps +above, and `` corresponds to the tenant ID identified in the steps above. + + +```js title="ChirpStack profile creation example in Node.js" +// Required imports +const grpc = require('@grpc/grpc-js'); +const deviceProfileGrpc = require('@chirpstack/chirpstack-api/api/device_profile_grpc_pb'); +const deviceProfilePb = require('@chirpstack/chirpstack-api/api/device_profile_pb'); + +// This must point to the ChirpStack gRPC API which is provided by default on port 8080 +const server = ':8080'; + +// The API token obtained from the "Create an API key from ChirpStack Console" section above +const apiToken = ''; + +// Create the client for the DeviceProfileService +const deviceProfileService = new deviceProfileGrpc.DeviceProfileServiceClient( + server, + grpc.credentials.createInsecure(), +); + +// Create the Metadata object +const metadata = new grpc.Metadata(); +metadata.set('authorization', 'Bearer ' + apiToken); + +// Instantiate a DeviceProfile message and provide requisite information +const deviceProfile = new deviceProfilePb.DeviceProfile(); +deviceProfile.setTenantId(''); +deviceProfile.setName(''); +deviceProfile.setRegion(2); // 2 = US915 +deviceProfile.setMacVersion(3); // 3 = LoRaWAN 1.0.3 +deviceProfile.setRegParamsRevision(0); // 0 = A +deviceProfile.setAdrAlgorithmId('default'); // default = Default ADR algorithm (LoRa only) +deviceProfile.setUplinkInterval(3600); +deviceProfile.setSupportsOtaa(true); + +// Instantiate a CreateDeviceProfileRequest message and provide the DeviceProfile +const createDeviceProfileRequest = new deviceProfilePb.CreateDeviceProfileRequest(); +createDeviceProfileRequest.setDeviceProfile(deviceProfile); + +// Use the deviceProfileService client to invoke the create method, providing +// the CreateDeviceProfileRequest and Metadata as arguments +deviceProfileService.create(createDeviceProfileRequest, metadata, (err, resp) => { + if (err !== null) { + console.log(err); + return; + } + + console.log(resp.toObject()); +}); +``` + +## Create an Application via the gRPC API + +The Node.js file provided below demonstrates how to create an application via the ChirpStack gRPC +API using the JavaScript SDK. Similar to the file above for creating a device profile, please note +that `` corresponds to the IP address of the ChirpStack instance, +`` corresponds to the API key created through the steps above, and `` +corresponds to the tenant ID identified in the steps above. + + +```js title="ChirpStack application creation example in Node.js" +// Required imports +const grpc = require('@grpc/grpc-js'); +const applicationGrpc = require('@chirpstack/chirpstack-api/api/application_grpc_pb'); +const applicationPb = require('@chirpstack/chirpstack-api/api/application_pb'); + +// This must point to the ChirpStack gRPC API which is provided by default on port 8080 +const server = ':8080'; + +// The API token obtained from the "Create an API key from ChirpStack Console" section above +const apiToken = ''; + +// Create the client for the ApplicationServiceClient +const applicationService = new applicationGrpc.ApplicationServiceClient( + server, + grpc.credentials.createInsecure(), +); + +// Create the Metadata object +const metadata = new grpc.Metadata(); +metadata.set('authorization', 'Bearer ' + apiToken); + +// Instantiate an Application message and provide requisite information +const application = new applicationPb.Application(); +application.setTenantId(''); +application.setName(''); + +// Instantiate a CreateApplicationRequest message and provide the Application +const createApplicationRequest = new applicationPb.CreateApplicationRequest(); +createApplicationRequest.setApplication(application); + +// Use the applicationService client to invoke the create method, providing +// the CreateApplicationRequest and Metadata as arguments +applicationService.create(createApplicationRequest, metadata, (err, resp) => { + if (err !== null) { + console.log(err); + return; + } + + console.log(resp.toObject()); +}); +``` + +## Create a Device via the gRPC API + +The Node.js file provided below demonstrates how to create a device via the ChirpStack gRPC API +using the JavaScript SDK. Similar to the files above, please note that `` +corresponds to the IP address of the ChirpStack instance, `` corresponds to the API +key created through the steps above, and `` corresponds to the tenant ID identified +in the steps above. + +Additionally, `` and `` correspond to the application and device +profile created via the files above. + +Lastly, `` and `` are unique identifiers for the device being added to +ChirpStack. + + +```js title="Device creation example in Node.js" +// Required imports +const grpc = require('@grpc/grpc-js'); +const deviceGrpc = require('@chirpstack/chirpstack-api/api/device_grpc_pb'); +const devicePb = require('@chirpstack/chirpstack-api/api/device_pb'); + +// This must point to the ChirpStack gRPC API which is provided by default on port 8080 +const server = ':8080'; + +// The API token obtained from the "Create an API key from ChirpStack Console" section above +const apiToken = ''; + +// Create the client for the DeviceServiceClient. +const deviceService = new deviceGrpc.DeviceServiceClient( + server, + grpc.credentials.createInsecure() +); + +// Create the Metadata object. +const metadata = new grpc.Metadata(); +metadata.set('authorization', 'Bearer ' + apiToken); + +// Instantiate a Device message and provide requisite information +const device = new devicePb.Device(); +device.setApplicationId(''); +device.setDeviceProfileId(''); +device.setName(''); +device.setDevEui(''); +device.setJoinEui(''); + +// Instantiate a CreateDeviceRequest message and provide the Device +const createDeviceRequest = new devicePb.CreateDeviceRequest(); +createDeviceRequest.setDevice(device); + +// Use the createDeviceRequest client to invoke the create method, providing +// the CreateDeviceProfileRequest and Metadata as arguments +deviceService.create(createDeviceRequest, metadata, (err, resp) => { + if (err !== null) { + console.log(err); + return; + } + + console.log(resp.toObject()); +}); +``` diff --git a/docs/network-iot/run-an-lns/add-device-chirpstack.mdx b/docs/network-iot/run-an-lns/add-device-chirpstack.mdx new file mode 100644 index 000000000..55d658838 --- /dev/null +++ b/docs/network-iot/run-an-lns/add-device-chirpstack.mdx @@ -0,0 +1,185 @@ +--- +id: chirpstack-add-device +title: Add Device to ChirpStack via Console +pagination_label: Add Device to ChirpStack via Console +sidebar_label: Add Device to ChirpStack via Console +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns/chirpstack-add-device +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +Adding a device to your ChirpStack console for the first time is currently a 3 step process. Each +device needs a device profile and each device needs to belong to an application. Integrations are +currently handled per-application level for device(s). + +1. Create a Device Profile or Select from Templates +2. Create an Application +3. Create a Device in the Application + +After adding a device to ChirpStack, take note of the Device EUI and Join EUI values in order to be +able to +[Configure Device in Helium Config Service](/iot/run-an-lns/configure-routing-rules#configure-device-in-helium-config-service) + +## Create Device Profile + +### Device Profiles -> Add Device Profile + +From the dashboard click on **Device Profiles**. + +
+ +
+
+
+ +From **Device Profiles** click on **Add device profile**. + +
+ +
+
+
+ +From here you can either create a new **device profile**, or select one from the **device-profile +templates** if they're available. + +
+ +
+
+
+ +Click **Submit** to add your new device profile. + +
+ +
+
+
+ +## Create Application + +### Applications -> Add Application + +From the **Applications** sidebar menu, click **Add Application**. + +
+ +
+
+
+ +Create the application with a name and description. + +
+ +
+
+
+ +## Create Device in Application {#add-device} + +### Application -> Application-Name -> Add Device + +
+ +Select your Application and click **Add Device**. + +
+ +
+
+
+ +Fill in your device details and select the device profile you made earlier. A Device EUI can be +entered from a pre-provisioned device, or pressing the **↻** button will generate a fresh EUI. +The AppKey will be shown in the next step, don't worry about finding it yet. + +
+ +
+
+
+ +Click **Submit** when done. + +
+ +
+
+
+ +Enter the application key or generate a new one by pressing the **↻** button. + +
+ +
+
+
+ +Click **Submit** once you enter the application key. + +
+ +
+
+
+ +Your device should be created and listed in the application. The **LoRaWAN frames** tab will display +a live view of payloads being delivered to the LNS. +Additional devices can be added to the existing Application. + +
+ +
+
diff --git a/docs/network-iot/run-an-lns/advanced-configuration.mdx b/docs/network-iot/run-an-lns/advanced-configuration.mdx new file mode 100644 index 000000000..f08333e12 --- /dev/null +++ b/docs/network-iot/run-an-lns/advanced-configuration.mdx @@ -0,0 +1,216 @@ +--- +id: advanced-configuration +title: Advanced Configuration +pagination_label: Advanced Configuration +sidebar_label: Advanced Configuration +description: Advanced Configuration +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns/advanced-configuration +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +## Session Key Filter (SKF) {#session-key-filter} + +Session Key Filters (SKF) regulate device traffic on specific devAddrs by utilizing LoRaWAN device +session keys. They establish conditions to either permit or restrict data flow based on the +configured session keys. It essentially allows the LNS operators to accept and reject traffic on a +device (session) level. + +In this example scenario, consider two device addresses (devAddr) 1 and 2: + +- **Provided Session Key for devAddr 1 and "ignore empty skf" = false:** + Only allows traffic through devAddr 1 if it passes Message Integrity Code (MIC) checks. +- **No Session Key for devAddr 2 and "ignore empty skf" = false:** + All traffic is allowed through devAddr 2 without MIC checks. +- **No Session Key for devAddr 2 and "ignore empty skf" = true:** + All traffic through devAddr 2 is blocked. + +The SKF will regulate traffic based on session key availability and the "ignore empty skf" flag, +independently per devAddr. + +Check the SKF flag for a route by running + +```bash +helium-config-service-cli route get --route-id +``` + +### Importance of Configuring Session Key Filters + +Configuring SKFs for devices introduces an additional layer of security on the Helium network. In +instances where SKFs are not established, the network relies on the devAddr to associate packets +with the respective OUI, potentially attributing unauthorized packet costs to the OUI owner. + +Implementing SKFs counteracts this risk by empowering the Helium Packet Router to authenticate +packets, thus preventing the delivery of unwanted payloads (and their respective DC cost). + +## Max Copies {#max-copies} + +Given that LoRaWAN devices openly broadcast uplinks, it's common for multiple Hotspots to capture +the same device uplink within the Helium Network. LNS operators can customize the number of +duplicate uplinks they wish to receive and pay for by setting a max copies amount, also known as +"multibuy." Configuring the `max_copies` setting offers several significant advantages: + +- **Better downlink performance:** If the max copies setting is 10, the LNS will receive up to 10 + copies of the same uplink, and the downlink will be sent by the Hotspot with the best RSSI of + those 10, per the selection mechanism of the LNS. + Helium reports Hotspots' responses in chronological order, which can be challenging for scheduling + downlinks because the first Hotspot to report may not necessarily be the closest or have the + strongest RSSI/SNR attributes. This is important for downlink scenarios such as Class-C devices, + ADR, confirmed uplinks, or standard downlinks on Class-A devices. Leveraging multibuy ensures that + there is a strong Hotspot available to deliver the downlink message. +- **Geolocation:** It is possible to leverage Hotspot metadata to estimate the sensor location + without GPS or Wi-Fi. +- **Multilateration:** For devices that do not have internal location-solving abilities (GPS), the + metadata of the packet report and Helium Network can be leveraged to solve for a device location. + +The Helium Network charges for each response for a given payload. Each Hotspot that reports a +payload from a given device is eligible to be rewarded. The LNS operator can choose how many reports +they would like to buy. For instance, for a multibuy value of 10 on a device that only receives 8 +reports, the OUI would be charged 8 DC ($0.00008 USD). This assumes the payload was less than 24 +bytes. + +There are two levels of granularity for the max copies setting: + +1. **Route level:** Applies to all devices registered under the route. +2. **SKF level:** Applies only to the device with the specified network session key (NwkSKey). This + configuration overrides the route-level max copies setting. + +As an example, if the LNS operator has a route that contains device A and B, and configures a +route-level max copies setting of 2 and an SKF level max copies setting of 5 for device B, then +device A will inherit the route-level max copies setting of 2, and device B will use its SKF-level +max copies setting of 5. + +### Improve Join Performance + +Since Over-The-Air-Activation (OTAA) devices require a network joining process before they start +transmitting valuable sensor data, it is beneficial to ensure the network joining process is as +effective as possible. + +Join performance can be improved by increasing the number of copies of the same join requests the +LNS receives, because then the join accept will be delivered by the Hotspot with the best RSSI, +increasing the possibility of a successful delivery. + +Join requests are free on the Helium Network. LNS operators can leverage max copies to improve the +join performance without additional cost overhead. + +As an example, the LNS operator can define a route-level max copies setting of 20 and all SKF-level +max copies setting of 1. This will have the effect of allowing up to 20 copies of join requests and +1 copy of uplink. This way, the devices will have a much better chance to join, without consuming +extra DC from the uplinks once joined. + +## Automated EUI and SKF Route Updates + +As the ecosystem of LNS operators grows, an increasing number of developers have open-sourced their +tooling for running a Helium-enabled LNS. These tools enable functionality such as EUI and SKF +automation to per-tenant Data Credit accounting. + +A selection of the tools are outlined below. + +### Helium Route Updater + +The Helium Route Updater service is a third-party service that can be run alongside a ChirpStack +deployment to automate the adding/removing of EUIs as well as enabling session key filters on +devices to block traffic from devices that are not yours. + +You can find the service on GitHub +[here](https://github.com/thisisdevelopment/helium-route-updater). There is also a section in the +readme that details how to easily add it to your ChirpStack docker compose, found +[here](https://github.com/thisisdevelopment/helium-route-updater#chirpstack-docker-compose-usage). + +### Disk91 Helium Chirpstack + +This service includes several utilities including EUI management and per-tenant accounting. + +Find the service on GitHub [here](https://github.com/disk91/helium-chirpstack-community) + +### Chirpstack-hpr by Bones + +This service includes several utilities including EUI and SKF management. + +Find the service on GitHub [here](https://github.com/ccall48/chirpstack-hpr). + +Documentation on getting started can be found +[here](https://ccall48.github.io/chirpstack-hpr.github.io/). + +## Config Service Interaction + +The Config Service can be used to manage an OUI and devAddr. There are two ways to interact with the +Config Service: + +1. Using the [Command-Line Interface (CLI)](https://github.com/helium/helium-config-service-cli). +1. Alternatively, you can write scripts to interact with the Config Service directly through + [GRPC APIs](https://github.com/helium/proto/blob/master/src/service/iot_config.proto) for a more + programmatic approach. + +## Hotspot Location Data + +Hotspot location data can be requested from the Config Service using either the CLI or GRPC APIs. + +## EUI Pair Wildcard + +In some applications, deployers may have many DevEUIs all associated under the same AppEUI, and it +might be inconvenient to provision all those EUI pairs individually. If the LNS operator would like +to receive Join Requests for all devices under a certain AppEUI, simply input 0000000000000000 for +the DevEUI when adding an EUI pair. + +## Add and Remove Delegate Keys + +Note that only owner key can perform the actions below. OUI owners can add delegate keys by running + +```bash +helium-config-service-cli org update delegate-add --pubkey --keypair --commit +``` + +OUI owners can remove delegate keys by running + +```bash +helium-config-service-cli org update delegate-remove --pubkey --keypair --commit +``` + +## Set up NGINX for Chirpstack Docker + +NGINX can be used for web serving, reverse proxy, caching, load balancing, SSL and etc. In order to +set it up on Chirpstack docker, add the following section in docker-compose.yml + +```bash +nginx: + image: nginx:latest + container_name: chirpstack_nginx + restart: always + volumes: + - "./logs/nginx:/var/log/nginx" + - "./configuration/nginx.conf:/etc/nginx/conf.d/default.conf" + ports: + - 80:80 + - 443:443 + depends_on: + - chirpstack + networks: + - iot-network +``` + +and then create a new file under the configuration directory called nginx.conf, with the following +content + +```bash +upstream chirpstack_upstream { + server chirpstack:8080; +} + +server { + listen 80; + server_name _; + + location ^~ /api { + grpc_pass grpc://chirpstack_upstream; + } + + location / { + proxy_pass http://chirpstack_upstream; + + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_redirect off; + } +} +``` diff --git a/docs/network-iot/run-an-lns/buy-an-oui.mdx b/docs/network-iot/run-an-lns/buy-an-oui.mdx new file mode 100644 index 000000000..1c90a619b --- /dev/null +++ b/docs/network-iot/run-an-lns/buy-an-oui.mdx @@ -0,0 +1,294 @@ +--- +id: buy-an-oui +title: Buy An Organizationally Unique Identifier +pagination_label: Buy An Organizationally Unique Identifier +sidebar_label: Buy an Organizationally Unique Identifier +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns/buy-an-oui +--- + +Each LoRaWAN Network Server (LNS) on the Helium Network is managed using an Organizationally Unique +Identifier (OUI). This registers the LNS with the network and manages the +[devAddrs](#devaddr-explained), [Data Credits](/tokens/data-credit), and routes for device traffic. + +Currently, the purchasing of OUIs and devAddrs must be done by contacting the Helium Foundation. In +the future, these registrations will be self-service. + +As an alternate to purchasing a devAddr slab, it is also an option to obtain a NetID from the LoRa +Alliance and use it in a roaming configuration. An OUI and data credits are required in either +scenario. + +## Pricing + +The minimum cost to deploy an LNS to the Helium Network is \$235 USD. This cost is divided into +three parts. + +The cost of an OUI is US\$100. This is a one-time fee. + +DevAddrs are issued in blocks of 8 and cost US\$12.50 per devAddr for a total of \$100. DevAddrs are +also purchased as a one-time fee. DevAddrs are only required if a NetID is not already obtained from +the LoRa Alliance. + +A minimum of 3,500,000 Data Credits (\$35 USD) must be held in the escrow account associated with +the OUI. DC are consumed in proportion to the network traffic transferred[^1]. If the DC balance +drops below 3.5M, device traffic to the routes associated with the OUI will halt. + +| Item | Fee | +| ------------------- | ------------------- | +| OUI | \$100 | +| DevAddr | \$12.50 × 8 (\$100) | +| Data Credit Minimum | \$35 | + +[^1]: [Data Credits and IoT network traffic explained.](/tokens/data-credit#dc-and-iot) + +## Prerequisites + +Before purchasing an OUI and devAddr slab, a Helium wallet, OUI owner key pair, and OUI delegate key +pair need to be created. + +The steps provided below outline how to do so: + +1. [Create Helium Wallet in Solana Format](#create-wallet) +2. [Convert Solana Formatted Public Key to Legacy Helium Format](#convert-wallet) +3. [Install The Config Service CLI](#install-cli) +4. [Generate OUI Keys](#generate-keys) + +### 1. Create Helium Wallet in Solana Format {#create-wallet} + +To create a Helium wallet, you can follow the guide for +[creating a new Helium Account](/wallets/helium-wallet-app). + +In doing so, a Helium wallet will be generated with key pairs in the native Solana format. + +### 2. Convert Solana Formatted Public Key to Legacy Helium Format {#convert-wallet} + +The OUI configuration process currently leverages public keys in a format from the legacy Helium L1 +blockchain. To convert a Solana public key into the legacy format, use the conversion tool below. + +To use the tool, simply paste your Helium wallet public key in the Solana format into the top "Enter +Helium or Solana Wallet Address" field and copy the result from the "Helium Address" field. + +**This value will be the Helium wallet public key in the legacy format required for purchasing an +OUI**. + +import { DisplayLegacyWallet } from '@theme/DisplayLegacyWallet' + +
+ +
+ +### 3. Install The Config Service CLI {#install-cli} + +The [Helium Config Service CLI](https://github.com/helium/helium-config-service-cli) will be used to +generate the key pairs used for the OUI. Run the following commands to pull & build the config +service CLI: + +```bash title="Copy the latest source code from GitHub." +git clone https://github.com/helium/helium-config-service-cli.git +``` + +To build the copied code, the Rust compiler must be installed. + +```bash title="Install the Rust toolchain." +curl https://sh.rustup.rs -sSf | sh +``` + +```bash title="Add Rust to path." +source "$HOME/.cargo/env" +``` + +Add the protobuf library which will be used during the compile process. + +```bash title="Install protobuf (Mac)" +brew update && brew install protobuf +``` + +```bash title="install protobuf (Ubuntu)" +sudo apt update && sudo apt install protobuf-compiler +``` + +With the build toolchain installed, compile the CLI. + +```bash title="Enter the directory and compile the CLI" +cd helium-config-service-cli && cargo build --release +``` + +The built binary file `helium-config-service-cli` can be found under `target/release/` inside the +`helium-config-service-cli` directory. + +Now that we have the CLI binary, let's put a copy in the local bin folder for simplicity's sake. +Just copy `helium-config-service-cli` into `/usr/local/bin`. Files added to the bin folder will +automatically be available to your command line. + +```bash +sudo cp target/release/helium-config-service-cli /usr/local/bin/ +``` + +### 4. Generate OUI Keys {#generate-keys} + +Generate the key pairs you'll be using to authenticate your interactions with the config service. +These keys are implemented such that only you can createm, modify, and delete routes. + +After this step you will have two key pairs: + +- **Delegate Key Pair**: The delegate key is actively used to create and manage routes. In case it + is ever compromised, it can be updated using the owner key. Note that an OUI can have multiple + delegate key pairs. Guidance on how to manage delegate key pairs can be found in the + [advanced configuration](/iot/run-an-lns/advanced-configuration). + +- **Owner Key Pair**: The owner key is irreplaceable and should be kept safe, secure, and private at + all times. If lost or compromised, you could lose your OUI. The owner key pair is used for + delegate key management. + +Run the generate key pair command twice. First for the owner key pair and second for the delegate +key pair. Name the files accordingly. + +```bash title="Generate key pair" +helium-config-service-cli env generate-keypair .bin +``` + +Print out the public key of the key pair by running: + +```bash +helium-config-service-cli env info --keypair .bin +``` + +```json {9} title="Example response from the info command highlighting the key pair." +{ + "arguments": { + "config_host": "unset", + "key_type_from_keypair": "ed25519", + "keypair": "/Users/me/test.bin", + "max_copies": null, + "net_id": null, + "oui": null, + "public_key_from_keypair": "13eY9uE5fjMzKC7PZ1nsDigiyurhXhV3bbj8pxbD2KtQTSC1ZHP" + }, + {/* env vars will be discussed later */} +} +``` + +The `.bin` files should be kept safe and never shared. + +**The public keys of the owner and delegate key pairs are required for purchasing an OUI and are the +only part that should be shared.** + +## Purchasing OUI and devAddr Slab + +Direct purchase of OUIs and devAddrs are not currently available on-chain. Send an email to +[hello@helium.foundation](mailto:hello@helium.foundation) containing the following information: + +- The Helium wallet address +- The public key of your owner key pair +- The public key of your delegate key pair +- The number of devAddrs you want or your non-Helium Net ID + +Once you receive your OUI, the next step is to fund it. There are several options in the +[Fund an OUI](/iot/run-an-lns/fund-an-oui/) guide. + +## Share The LNS With The Community + +- **Add the LNS to the 'Well Known' list.** + Helium operates as a permissionless network, which means it is possible to leverage the network + with complete anonymity. In the interest of making the network more transparent, an LNS can be + added to the [Well Known](https://github.com/helium/well-known) list. + + This list is leveraged in labeling OUIs with a human-readable name on public Helium Foundation + [dashboards](https://dune.com/helium-foundation/helium-data-credits) and other community-run + dashboards. Consider adding your LNS to this resource. + +- **Add the LNS to the public providers page.** + If the OUI is being used for publicly accessible operations, let the community know that business + is open! Add the LNS to the [Find an LNS Provider](/iot/find-a-lns-provider) page. + +--- + +## DevAddr Explained + +Device addresses or `DevAddr` are assigned to a device by the LNS during the join procedure as +defined in the +[LoRaWAN 1.0.3 Specification](https://lora-alliance.org/resource_hub/lorawan-specification-v1-0-3/). +A device, defined by `(AppEUI, DevEUI)`, can be allocated any of the devAddrs owned by the OUI. It +is even possible to multiplex many devices on the same DevAddr at the same time, using the Message +Integrity Check (MIC) to disambiguate. + +DevAddrs purchased through the methods outlined above are issued under the Helium Foundation's +NetID, 0x00003C, which was assigned on May 2, 2023, as part of the Helium Foundation's membership in +the LoRa Alliance. + +| NetID (hex) | NetID (decimal) | NwkID (bits) | DevAddr Subnet | +| ----------- | --------------- | ------------ | -------------- | +| 0x00003C | 60 | 6b'111100 | 78000000/7 | + +Customers using their own netID don't need devAddrs from the Helium Foundation. Those with their own +netID assigned by the LoRa Alliance should implement [roaming](/iot/lorawan-roaming) to allow their +devices to use the Helium Network. + +### Multiplexing With DevAddrs + +Multiplexing in LoRaWAN, specifically DevAddr multiplexing, refers to the process where multiple +devices share the same device address (DevAddr). It's a way to manage the limited available range of +DevAddrs and allows more devices to join the network. + +If using ChirpStack, it randomly assigns a DevAddr at join or re-join to the device from the +available range and then multiplexes each DevAddr as needed. The ChirpStack platform does this +through the assignment of the Network Session Key. + +In the event of DevAddr collisions, i.e., when two or more devices have the same DevAddr, the +network server (LNS) uses a technique called a Message Integrity Code (MIC) check computation to +identify the real device behind each data packet. For instance, if there are 4 devices all sending +uplinks on the same DevAddr as shown in the diagram below, the LNS should have 4 network session +keys on the same DevAddr. Upon receiving an uplink on that DevAddr, the LNS will attempt a MIC check +with each of the 4 network session keys, and the uplink will be attributed to the device whose +network session key was successfully validated. + +The computational overhead of these MIC checks is not heavy in most scenarios, these are checks +designed to be performed on low-power devices. However, in high-traffic scenarios, it may be best to +attribute a larger set of DevAddrs rather than allocate additional compute. + +```mermaid +graph LR + subgraph Devices + D1[Device 1] + D2[Device 2] + D3[Device 3] + D4[Device 4] + end + subgraph OpenLNS + PR[Packet Routing] + end + subgraph LNS + MC[MIC Computation] + subgraph Device Identification + DI1[Device 1 Identified] + DI2[Device 2 Identified] + DI3[Device 3 Identified] + DI4[Device 4 Identified] + end + end + D1 -->|Packet with Shared DevAddr| PR + D2 -->|Packet with Shared DevAddr| PR + D3 -->|Packet with Shared DevAddr| PR + D4 -->|Packet with Shared DevAddr| PR + PR --> MC + MC -->|MIC checked with DevAddr and NwkSKey| DI1 + MC -->|MIC checked with DevAddr and NwkSKey| DI2 + MC -->|MIC checked with DevAddr and NwkSKey| DI3 + MC -->|MIC checked with DevAddr and NwkSKey| DI4 +``` + +### How many `DeviceAddr` are needed? + +An allocation of 8 devAddrs is enough for all operators to get started and scale their services. The +demands of devices usually won't become apparent until tens of thousands of frequently uplinking +devices are onboarded. The need for more devAddr depends on a few factors: + +1. Number of devices. +1. Frequency of uplink. +1. Number of copies of a message received. +1. LNS system specs. + +In practice, some deployers are able to successfully support 100k+ devices with 32 DevAddrs. + +More devAddrs can be allocated at any time, and LNSs generally accommodate non-sequential ranges. diff --git a/docs/network-iot/run-an-lns/common-issues.mdx b/docs/network-iot/run-an-lns/common-issues.mdx new file mode 100644 index 000000000..1ebf28ca8 --- /dev/null +++ b/docs/network-iot/run-an-lns/common-issues.mdx @@ -0,0 +1,86 @@ +--- +id: common-issues +title: Common Issues +pagination_label: Common Issues +sidebar_label: Troubleshooting Common Issues +description: Common Issues +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns/common-issues +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +# Troubleshooting Common Issues + +## Data transfer stopped {#device-transfer-stopped} + +If data transfer was working before but stopped suddenly, please check the +[status page](https://status.helium.com/) and see if there is any ongoing incident with Helium +Packet Router. + +If there was no incident, please check if your OUI was locked due to insufficient DC balance. Lock +status can be verified by checking whether the "locked" field for each of your route is `true` or +`false`. Query your routes by running + +```bash +$ helium-config-service-cli route list --commit +``` + +OUI DC balance can be checked with the +[DC balance widget](/iot/run-an-lns/fund-an-oui#tracking-oui-balance). + +## LNS receives neither join requests nor uplinks + +Please first follow the same advice on investigating +[why your device transfer might be unsuccessful](/iot/run-an-lns/common-issues#device-transfer-stopped). + +If those scenarios were ruled out, it's helpful to double-check route and device configuration. A +common mistake is that routes are not properly configured or the devEUI of the testing device is not +added to the route. + +Review the [routing configuration](configure-routing-rules) guides. + +## LNS receives Join Requests but device unable to join + +Device may have issue joining the Network if the RSSI/SNR values are sub-optimal. In practice, +difficulty to join tends to show up when the RSSI value is worse than -120. + +As outlined in the [Understanding Max Copies](/iot/run-an-lns/advanced-configuration#max-copies) +section, join performance can be improved with max copies setting. + +If RSSI/SNR values continue to be low even after the max copies setting, it may be necessary to +deploy additional coverage. Review the [data-only Hotspot](/iot/data-only-hotspots) guides for steps +on adding Helium functionality to any existing LoRaWAN gateway. + +## Device able to join but not uplink + +If the join process is successful but no further data is delivered, a common issue is that the +Session Key Filter is enabled for the route, but the session key of the specific device has not been +submitted. This effectively blocks all downlink activity for the omitted device. + +Check if your route has enabled +[Session Key Filter](/iot/run-an-lns/advanced-configuration#session-key-filter). If so, check if the +device's Network Session Key is registered in that route by running + +```bash +helium-config-service-cli route skfs list --route-id +``` + +You can find your device's Network Session Key in Chirpstack in the device's Activation tab. + +## Cannot perform routing changes + +If you cannot perform routing changes such as updating EUI list, SKF list, max copy setting OR if +all of your old devices are sending data but not your newly provisioned devices. Please check the +[status page](https://status.helium.com/) and see if there is any ongoing incident with +Configuration Service. + +## Community Support + +Helium developers and community members are active on Twitter, Discord, and GitHub. + +- [Discord disk91 Server #helium-discussion](https://discord.gg/j5ENunf7) +- [Helium GitHub](https://github.com/helium) + +As a closing note, these docs are open for contributions. If there are areas to improve the content +here, please consider opening a [pull request](https://github.com/helium/docs/). diff --git a/docs/network-iot/run-an-lns/configure-chirpstack.mdx b/docs/network-iot/run-an-lns/configure-chirpstack.mdx new file mode 100644 index 000000000..fa7a40cc8 --- /dev/null +++ b/docs/network-iot/run-an-lns/configure-chirpstack.mdx @@ -0,0 +1,34 @@ +--- +id: configure-chirpstack +title: Configure ChirpStack +pagination_label: Configure ChirpStack +sidebar_label: Configure ChirpStack +description: Configure ChirpStack +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns/configure-chirpstack +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +[ChirpStack](https://www.chirpstack.io/) is an open-source, multi-tenant LoRaWAN Network Server +(LNS) that provides a web console and gRPC API for managing devices, routing messages, and +interacting with major cloud providers. + +## Getting Started + +Before beginning, make sure to have the following: + +- Helium Config Service CLI with delegate keypair +- Helium Network Organizationally Unique Identifier (OUI) +- Helium LoRaWAN devAddr slab +- Data Credits (>3.5M DC) + +## Docker Compose and Kubernetes + +Detailed discussion is provided for running ChirpStack on both Docker Compose and Kubernetes. While +both can be used in a variety of settings, the configurations provided in the documentation here +describe using Docker Compose to run ChirpStack in a non-production setting and using Kubernetes to +run ChirpStack in a production setting. + +- [Run ChirpStack on Docker Compose](/iot/run-an-lns/docker-compose) +- [Run ChirpStack on Kubernetes](/iot/run-an-lns/kubernetes) \ No newline at end of file diff --git a/docs/network-iot/run-an-lns/configure-routing-rules.mdx b/docs/network-iot/run-an-lns/configure-routing-rules.mdx new file mode 100644 index 000000000..7fe69570d --- /dev/null +++ b/docs/network-iot/run-an-lns/configure-routing-rules.mdx @@ -0,0 +1,311 @@ +--- +id: configure-routing-rules +title: Configure Routing Rules +pagination_label: Configure Routing Rules +sidebar_label: Configure Routing Rules +description: Configure Routing Rules +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns/configure-routing-rules +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +With ChirpStack up and running, OUI-specific routing and sensor configurations can be added to the +Helium Config Service to enable sensor data to be routed to the ChirpStack instance. + +:::info + +If ChirpStack was deployed with the Docker Compose configuration, routing rules will need to be +manually configured. + +However, if ChirpStack was deployed with the Kubernetes configuration, routing rules are +programmatically added via the Helium Network sidecar application and do not need to be manually +configured in the manner described below. + +::: + +## Initialize Helium Config Service CLI + +First, initialize the Helium Config Service CLI by running `helium-config-service-cli env init`. A +series of prompts, as noted below, will be provided in the terminal session. + +1. For `Config Service Host`, press enter to use the default value (e.g., + `https://config.iot.mainnet.helium.io:6080`). +2. For `Keypair Location`, provide the location of the delegate keypair in the local filesystem. +3. For `Net ID`, provide `00003C`. +4. For `Assigned OUI`, provide your assigned OUI number. +5. For `Default Max Copies`, press enter to use the default value (e.g., `15`). + +After providing the initialization information, an output similar to the below will be provided: + +```sh +Put these in your environment +------------------------------------ +HELIUM_KEYPAIR_BIN=<./your/path/to/delegate/keypair.bin> +HELIUM_NET_ID=00003C +HELIUM_OUI= +HELIUM_MAX_COPIES=15 +``` + +Second, as suggested in the output, export the suggested environment variables into the terminal +session. This needs to be done manually. To do so, just add `export` to each line in the manner +provided below and run the commands: + +```sh title="Setting environment variables in a terminal window." +export HELIUM_KEYPAIR_BIN=<./your/path/to/delegate/keypair.bin> +export HELIUM_NET_ID=00003C +export HELIUM_OUI= +export HELIUM_MAX_COPIES=15 +``` + +## Generate Route in Helium Config Service + +Routes contain the necessary information for the Helium Packet Router to know how to route a packet +sent from a sensor to the proper LNS. In particular, Helium Packet Router leverages information +provided in a generated route such as DevEUI+AppEUI (for routing join requests), DevAddr range (for +routing uplinks), and LNS endpoint to inform routing decisions. + +To generate a route via the Helium Config Service CLI, run the `helium-config-service-cli route new` +command. As shown below, the command will perform a "dry run" if the `--commit` flag isn't provided. +In such cases when the `--commit` flag isn't provided, the command will show what would have been +transmitted to the Helium Config Service (e.g., a configuration service which informs routing +behavior of the Helium Packet Router). In this way, you can review the route information prior to +formally submitting. + +```sh +helium-config-service-cli route new +``` + +```sh +== DRY RUN == (pass `--commit`) +{ + "id": "", + "net_id": "00003C", + "oui": , + "server": { + "host": "", + "port": 0, + "protocol": { + "type": "packet_router" + } + }, + "max_copies": 15, + "active": true, + "locked": false, + "ignore_empty_skf": false +} +``` + +Once the result looks satisfactory, simply run `helium-config-service-cli route new --commit` to +submit the route to Helium Config Service. + +## Configure Route in Helium Config Service + +After generating a route, the route needs to be configured for the ChirpStack implementation. This +will involve specifying the ChirpStack endpoint and default port and adding LoRaWAN region-specific +routing configuration. + +### Specify ChirpStack Endpoint and Default Port + +To specify the ChirpStack endpoint and default port, use the Helium Config Service CLI and run the +`helium-config-service-cli route update server` command. As shown below, the command will perform a +"dry run" if the `--commit` flag isn't provided. + +In preparing the command, please note that the `--host` flag should point to the IP address of the +server running the ChirpStack instance, the `--port` flag serves as the default for routing messages +to ChirpStack, and the `--route-id` flag corresponds to the route that was just created. + +```sh +helium-config-service-cli route update server --host --port --route-id +``` + +```sh +== DRY RUN == (pass `--commit`) +Updated +== Old +{ + "id": , + "net_id": "00003C", + "oui": , + "server": { + "host": "", + "port": 0, + "protocol": { + "type": "packet_router" + } + }, + "max_copies": 15, + "active": true, + "locked": false, + "ignore_empty_skf": false +} +== New +{ + "id": , + "net_id": "00003C", + "oui": , + "server": { + "host": , + "port": , + "protocol": { + "type": "packet_router" + } + }, + "max_copies": 15, + "active": true, + "locked": false, + "ignore_empty_skf": false +} +``` + +Once the result looks as desired, simply re-run the command with the ` --commit` to update the +route. + +### Add LoRaWAN Region-Specific Routing Configuration + +To add LoRaWAN region-specific routing configuration, use the Helium Config Service CLI and run the +`helium-config-service-cli route update add-gwmp-region` command. As shown below, the command will +perform a "dry run" if the `--commit` flag isn't provided. + +In preparing the command, the LoRaWAN region is proceeded by the port to be used for the region. For +example, in the example command below, the region `us915` is proceeded by ``. Here, the +`` value will mirror the port bound to the `chirpstack-gateway-bridge-us915` container +(e.g., `1701`). + +Please note that the command will also need to be run for the `eu868` region for port `1700`. + +```sh +helium-config-service-cli route update add-gwmp-region --route-id us915 +``` + +```sh +== DRY RUN == (pass `--commit`) +Updated +== Old +{ + "id": , + "net_id": "00003C", + "oui": , + "server": { + "host": "", + "port": 0, + "protocol": { + "type": "packet_router" + } + }, + "max_copies": 15, + "active": true, + "locked": false, + "ignore_empty_skf": false +} +== New +{ + "id": , + "net_id": "00003C", + "oui": , + "server": { + "host": "", + "port": 0, + "protocol": { + "type": "gwmp", + "mapping": { + "US915": 1701 + } + } + }, + "max_copies": 15, + "active": true, + "locked": false, + "ignore_empty_skf": false +} +``` + +After adding the LoRaWAN region-specific routing configuration for `US915` and `EU868`, the +configuration should look similar to the below: + +```sh +{ + "id": , + "net_id": "00003C", + "oui": , + "server": { + "host": "", + "port": 0, + "protocol": { + "type": "gwmp", + "mapping": { + "US915": 1701, + "EU868": 1700 + } + } + }, + "max_copies": 15, + "active": true, + "locked": false, + "ignore_empty_skf": false +} +``` + +## Add Device to ChirpStack + +To add a device in Chirpstack, please follow the documentation in either of the guides below and +return here when complete. + +- [Add Device to ChirpStack via Console](/iot/run-an-lns/chirpstack-add-device) +- [Add Device to ChirpStack via gRPC](/iot/run-an-lns/chirpstack-add-device-grpc) + +## Configure Device in Helium Config Service + +Now that the device is successfully created on ChirpStack, Helium Config Service needs to be +configured to know about the device. In doing so, the Helium Config Service CLI will be used to +associate the device EUIs and devAddrs with the route. + +### Add Device EUIs to Route + +To add device EUIs to the route, run the `helium-config-service-cli route euis add` command. As +shown below, the command will perform a "dry run" if the `--commit` flag isn't provided. + +In preparing the command, the `--route-id` flag corresponds to the id of the route created above, +the `--dev-eui` flag corresponds to the device EUI generated entered in ChirpStack, and the +`--app-eui` flag corresponds to the join EUI also entered in ChirpStack. + +Please refer to the red-boxed portion of image below to find the device and join EUIs in ChirpStack. + +
+ +
DevEUI and AppEUI displayed in ChirpStack
+
+
+ +```bash +helium-config-service-cli route euis add --route-id --dev-eui --app-eui +``` + +Once the result looks as desired, simply re-run the command with the ` --commit` to add the device +to the route. + +### Add DevAddr to Route + +To add DevAddrs to the route, run the `helium-config-service-cli route devaddrs add` command. As +shown below, the command will perform a "dry run" if the `--commit` flag isn't provided. + +Here, the `--start-addr` and `--end-addr` values correspond to the results from the +`helium-config-service-cli org get --oui ` command described in detail in +[Gather Helium DevAddr Subnet Information for OUI](/iot/run-an-lns/docker-compose/#gather-helium-devaddr-subnet-information-for-oui) + +```bash +helium-config-service-cli route devaddrs add --start-addr --end-addr --route-id +``` + +Again, once the result looks as desired, simply re-run the command with the ` --commit` to add the +DevAddr to the route. + +## Next Steps + +You now have a fully functioning LNS on the Helium IoT network. For additional advanced +configurations, including automating the device addition process, please see +[Advanced Configuration](advanced-configuration). diff --git a/docs/network-iot/run-an-lns/docker-compose.mdx b/docs/network-iot/run-an-lns/docker-compose.mdx new file mode 100644 index 000000000..2730b84f4 --- /dev/null +++ b/docs/network-iot/run-an-lns/docker-compose.mdx @@ -0,0 +1,373 @@ +--- +id: docker-compose +title: ChirpStack on Docker Compose +pagination_label: ChirpStack on Docker Compose +sidebar_label: On Docker Compose +description: ChirpStack on Docker Compose +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns/docker-compose +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +This guide describes using Docker Compose to run ChirpStack in a non-production setting on AWS EC2. + +## Infrastructure Requirements + +The infrastructure requirements noted below are sufficient for getting a ChirpStack instance up and +running for experimentation purposes, but are not suggested for use in a mission critical, +production setting. + +- 4 vCPU +- 8GB RAM +- 100GB SSD hard drive +- CPU with x86 architecture +- Ubuntu 22.04 + +## Server Configuration + +While there are several methods for installing ChirpStack, this guide will demonstrate a +configuration using Docker and the +[chirpstack-docker](https://github.com/chirpstack/chirpstack-docker) repository. + +Accordingly, on the server intended to run the ChirpStack instance, +[install Docker](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) using +the `apt` repository on Ubuntu. + +```sh title="Install Docker using the apt repository" +# Add Docker's official GPG key: +sudo apt-get update +sudo apt-get install ca-certificates curl +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc + +# Add the repository to Apt sources: +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt-get update + +# Install the latest version: +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + +# Verify that the Docker Engine installation is successful by running the hello-world image: +sudo docker run hello-world +``` + +Next, clone the `chirpstack-docker` repository. + +```sh title="Clone the chirpstack-docker repository." +git clone https://github.com/chirpstack/chirpstack-docker.git +``` + +## ChirpStack Port Accessibility + +For the configuration described in this guide, the following ports need to be accessible on the +server running the ChirpStack instance. In an AWS parlance, a Security Group needs to be attached to +the underlying EC2 instance running ChirpStack with inbound rules for the noted ports. + +1. TCP `8080` + +- The ChirpStack web UI and gRPC API are accessible over `http://:8080` + +2. UDP `1700` + +- As described in further detail below, the `chirpstack-gateway-bridge` container for the EU868 + region binds to UDP `1700`. As such, for EU868-based sensor traffic to reach ChirpStack, UDP + `1700` needs to be open. + +3. UDP `1701` + +- Similarly, the `chirpstack-gateway-bridge` container for the US915 region binds to UDP `1701`. As + such, for US915-based sensor traffic to reach ChirpStack, UDP `1701` needs to be open. + +Please note that if more `chirpstack-gateway-bridge` containers are added for additional LoRaWAN +regions, the corresponding UDP ports will need to be added in a similar manner to UDP `1700` and +`1701`. + +## ChirpStack Configuration + +The ChirpStack settings need to be configured so that ChirpStack can operate on the Helium Network. +In particular, the `chirpstack.toml` and `docker-compose.yml` files, respectively located in the +`./chirpstack-docker/configuration/chirpstack/` and `./chirpstack-docker/` directories, need to be +updated. Prior to doing so, however, Helium-specific information for the OUI needs to be gathered to +be applied in the ChirpStack configuration. + +### Gather Helium DevAddr Subnet Information for OUI + +Use the Helium Config Service CLI to determine the subnet masks for the `DevAddr` associated with +the LNS. In ChirpStack, the subnet masks will be referred to as `dev_addr_prefixes`. + +To do so, first retrieve the `DevAddr` constraints for the OUI. The relevant values are each of the +`start_addr` and `end_addr` groups provided in the `devaddr_constraints` array. + +```sh" +helium-config-service-cli org get --oui +``` + +```json title="Example result from helium-config-service-cli org get --oui command" +{ + "org": { + "oui": , + "owner": , + "payer": , + "delegate_keys": [ + + ], + "locked": + }, + "net_id": , + "devaddr_constraints": [ + { + "start_addr": , // First DevAddr constraint + "end_addr": // Second DevAddr constraint + } + ] +} +``` + +Next, using the `start_addr` and `end_addr` values, identify the `DevAddr` subnet masks, (e.g., +labeled as `subnets` in the returned JSON). If there are multiple, non-contiguous +`devaddr_constraints`, this will need to be done for each set of constraints. + +```sh" +helium-config-service-cli subnet-mask +``` + +```json title="Example result from helium-config-service-cli subnet-mask command" +{ + "range": { + "start_addr": , + "end_addr": + }, + "subnets": [ + // Desired value corresponding to the ChirpStack dev_addr_prefixes + ] +} +``` + +### Update chirpstack.toml + +Access `./chirpstack-docker/configuration/chirpstack/chirpstack.toml`. + +Modify the following sections of `chirpstack.toml`. All other sections can be left as is. + +- Under `[network]`: + - Set `net_id` to the Helium Net ID, `00003C`, e.g., `net_id="00003C"`. + - Add `dev_addr_prefixes` with the value `[]`, e.g., + `dev_addr_prefixes=[]`. + - As an illustrative example, if the `helium-config-service-cli subnet-mask` command indicated a + subnet mask of `00000000/29`, then add `dev_addr_prefixes=["00000000/29"]`. + - If the OUI has multiple non-sequential `DevAddr` ranges, separate the corresponding subnet + masks by comma. For instance, `dev_addr_prefixes=["00000000/29", "00000010/29"]`. + - Update the `enabled_regions` array to include the desired regions. + - Multiple regions can be enabled simultaneously. + - Each added region must match the `id` parameter of the `[[regions]]` configuration in the + corresponding `./chirpstack-docker/configuration/chirpstack/.toml` file. In other + words, if the `id` parameter of the `[[regions]]` configuration is `us915_0`, add `us915_0` to + the `enabled_regions` array. +- Under `[api]`: + - Update the `secret` value used for generating login and API tokens. + - Make sure this value is never exposed. +- Create a new, top level `[gateway]` section: + - Below, add `allow_unknown_gateways=true` + +An example of the above-mentioned modified sections of `chirpstack.toml` is provided below. Please +note that the these values are exemplary and need to be filled in with the correct information for +your ChirpStack configuration. Again, all other sections in `chirpstack.toml` can be left as is. + +```toml +# Network related configuration. +[network] + + # Network identifier (NetID, 3 bytes) encoded as HEX (e.g. 010203). + # Helium net_id="00003C" + net_id="00003C" + + # Helium 8 block dev address prefix 29 + # If you have multiple blocks you can add them as an array + dev_addr_prefixes=[ + "78000000/29" + ] + + # Enabled regions. + # + # Multiple regions can be enabled simultaneously. Each region must match + # the 'id' parameter of the region configuration in '[[regions]]'. + enabled_regions=[ + "eu868", + "us915_1", + ] + +# API interface configuration. +[api] + + # Secret. + # + # This secret is used for generating login and API tokens, make sure this + # is never exposed. Changing this secret will invalidate all login and API + # tokens. The following command can be used to generate a random secret: + # openssl rand -base64 32 + secret="REPLACE-WITH-YOUR-SECRET-HERE" + +# Global gateway configuration. +# Please note that backend configuration can be found in the per-region +# configuration in ./chirpstack-docker/configuration/chirpstack/.toml +[gateway] + # Allow unknown gateways. + # + # If set to true, then uplinks received from gateways not configured in + # ChirpStack will be allowed. + allow_unknown_gateways=true +``` + +### Update docker-compose.yaml + +First, remove the entire service definitions for `chirpstack-gateway-bridge-basicstation` and +`chirpstack-rest-api` as they are not needed. + +Second, visit the [ChirpStack Docker Hub Image Repository](https://hub.docker.com/u/chirpstack) and +identify the most recent version tags for +[chirpstack](https://hub.docker.com/r/chirpstack/chirpstack/tags) and +[chirpstack-gateway-bridge](https://hub.docker.com/r/chirpstack/chirpstack-gateway-bridge/tags). At +the time of writing this manual, the current version of `chirpstack` is `4.7` and +`chirpstack-gateway-bridge` was `4.0` so these version will be used moving forward. + +Third, update `image` definitions for `chirpstack` and `chirpstack-gateway-bridge` with the most +recent version tags found in Docker Hub as noted below: + +- `image: chirpstack/chirpstack:4.7` +- `image: chirpstack/chirpstack-gateway-bridge:4.0` + +Fourth, to support every region beyond the default EU868 defined in the `enabled_regions` noted +above in the `settings.toml` file, add `chirpstack-gateway-bridge` service definitions for each +additional LoRaWAN region. Although this tutorial demonstrates adding support for US915 and EU868 +these steps can be adapted for other regions. + +To do so, amend the `chirpstack-gateway-bridge` label to be `chirpstack-gateway-bridge-eu868` then +create a new service definition for `chirpstack-gateway-bridge-us915` as provided below: + +```yml +chirpstack-gateway-bridge-us915: + image: chirpstack/chirpstack-gateway-bridge:4.0 + restart: unless-stopped + ports: + - 1701:1700/udp # The chirpstack-gateway-bridge-us915 container will bind to host port 1701 + volumes: + - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge + environment: + - INTEGRATION__MQTT__EVENT_TOPIC_TEMPLATE=us915_1/gateway/{{ .GatewayID }}/event/{{ .EventType + }} + - INTEGRATION__MQTT__STATE_TOPIC_TEMPLATE=us915_1/gateway/{{ .GatewayID }}/state/{{ .StateType + }} + - INTEGRATION__MQTT__COMMAND_TOPIC_TEMPLATE=us915_1/gateway/{{ .GatewayID }}/command/# + depends_on: + - mosquitto +``` + +See the +[ChirpStack Gateway Bridge documentation](https://www.chirpstack.io/docs/chirpstack-gateway-bridge/configuration.html) +for full description on the configuration possibilities for the `chirpstack-gateway-bridge` service. + +An example of a complete `docker-compose.yaml` file is provided below: + +```yml +version: '3' + +services: + chirpstack: + image: chirpstack/chirpstack:4.7 + command: -c /etc/chirpstack + restart: unless-stopped + volumes: + - ./configuration/chirpstack:/etc/chirpstack + - ./lorawan-devices:/opt/lorawan-devices + depends_on: + - postgres + - mosquitto + - redis + environment: + - MQTT_BROKER_HOST=mosquitto + - REDIS_HOST=redis + - POSTGRESQL_HOST=postgres + ports: + - 8080:8080 + + chirpstack-gateway-bridge-eu868: + image: chirpstack/chirpstack-gateway-bridge:4.0 + restart: unless-stopped + ports: + - 1700:1700/udp + volumes: + - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge + environment: + - INTEGRATION__MQTT__EVENT_TOPIC_TEMPLATE=eu868/gateway/{{ .GatewayID }}/event/{{ .EventType + }} + - INTEGRATION__MQTT__STATE_TOPIC_TEMPLATE=eu868/gateway/{{ .GatewayID }}/state/{{ .StateType + }} + - INTEGRATION__MQTT__COMMAND_TOPIC_TEMPLATE=eu868/gateway/{{ .GatewayID }}/command/# + depends_on: + - mosquitto + + chirpstack-gateway-bridge-us915: + image: chirpstack/chirpstack-gateway-bridge:4.0 + restart: unless-stopped + ports: + - 1701:1700/udp + volumes: + - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge + environment: + - INTEGRATION__MQTT__EVENT_TOPIC_TEMPLATE=us915_1/gateway/{{ .GatewayID }}/event/{{ .EventType + }} + - INTEGRATION__MQTT__STATE_TOPIC_TEMPLATE=us915_1/gateway/{{ .GatewayID }}/state/{{ .StateType + }} + - INTEGRATION__MQTT__COMMAND_TOPIC_TEMPLATE=us915_1/gateway/{{ .GatewayID }}/command/# + depends_on: + - mosquitto + + redis: + image: redis:7-alpine + restart: unless-stopped + command: redis-server --save 300 1 --save 60 100 --appendonly no + volumes: + - /mnt/particle_chirpstack/redis/data:/data + + mosquitto: + image: eclipse-mosquitto:2 + restart: unless-stopped + ports: + - 1883:1883 + volumes: + - ./configuration/mosquitto/config/:/mosquitto/config/ + + postgres: + image: postgres:14-alpine + restart: unless-stopped + + volumes: + - ./configuration/postgresql/initdb:/docker-entrypoint-initdb.d + - /mnt/particle_chirpstack/postgresql/data:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=root +``` + +## Run ChirpStack + +From the root of the `chirpstack-docker` directory, run `docker compose up --detach` to start the +containers defining the ChirpStack instance in the background. Container logs can be accessed by +running `docker compose logs --follow` and the ChirpStack instance can be taken down by running +`docker compose down` + +The ChirpStack web console will now be accessible at `http://:8080`. Utilize the +default credentials to log in: + +Username: admin +Password: admin + +## Next Steps + +Now that the LNS is operational, proceed to establish routing rules. This ensures that the Helium +Network accurately directs device packets to the designated LNS. Learn how to implement this in the +[Configure Routing Rules](configure-routing-rules) guide. diff --git a/docs/network-iot/run-an-lns/fund-an-oui-using-hnt.mdx b/docs/network-iot/run-an-lns/fund-an-oui-using-hnt.mdx new file mode 100644 index 000000000..9ea7b424f --- /dev/null +++ b/docs/network-iot/run-an-lns/fund-an-oui-using-hnt.mdx @@ -0,0 +1,84 @@ +--- +id: fund-an-oui-using-hnt +title: Fund An OUI Using HNT +pagination_label: Fund An OUI Using HNT +sidebar_label: Buy Data Credits using HNT +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns/fund-an-oui-using-hnt +--- + +import { YouTube } from 'mdx-embed' + +Whether facilitated through a third party or acquired directly through the network, all data +transfer on Helium requires [Data Credits](/tokens/data-credit). This guide will illustrate two +methods of directly converting HNT into DC and subsequently delegating it for use by an OUI. + +## Funding an OUI Using The CLI Wallet + +The [Helium CLI Wallet](/wallets/cli-wallet) provides several tools to manage DC balances. + +The `price` command is a helpful tool for determining the amount of HNT required for a particular +amount of DC. For example, this command will output the amount of HNT required to fund 1M DC ($10). + +```sh +helium-wallet dc price 10 +``` + +### Swap HNT to DC + +With HNT and Sol (for transaction fees) in an account, use the `mint` command to convert HNT into +DC. The `--dc` flag is a helpful way to mint a specific amount of DC. Mint these DC to an account +where further transactions can be issued on them — often the same account where they are being +minted from. + +```sh +helium-wallet dc mint --dc 1000000 --commit +``` + +### Delegate DC To The OUI + +After the DC is minted, it can be delegated to the OUI. The delegation is issued to the payer key of +the OUI. + +```sh +helium-wallet dc delegate iot 1000000 --commit +``` + +## Funding an OUI Using The Helium Wallet App + +### Swap HNT to DC + +1. Select a Wallet in the Helium Wallet app. +1. Tap the `Swap` icon in the middle of the screen. +1. Select `HNT` in the top drop-down and enter an amount of HNT to swap. +1. Select `DC` in the lower drop-down, and it will be filled with the resulting DC amount. +1. Tap the `Swap Tokens` button and confirm the swap transaction. +1. HNT is burned for DC within the same Wallet. + +The new DC balance amount can be verified in the app tokens list on the `$` tab within the Helium +Wallet app. + +At this point, DC has been successfully acquired into the wallet, represented by the OUI's payer +key. However, the Packet Verifier Service does not have the authority to burn DC from the wallet +directly. To enable this, it is necessary to delegate DC into the OUI's escrow account, where the +Packet Verifier Service is authorized to burn DC. + +### Delegate DC To The OUI + +1. Select a Wallet in the Helium Wallet app. +1. Tap the `$` icon on the bottom tab bar. +1. Tap the DC balance. +1. Tap `Delegate`. +1. Select the IOT Network. +1. Enter the payer key of the OUI as the address. +1. Enter the amount of DC to delegate. +1. Swipe to Delegate. + +The OUI is now funded, the history of DC delegation is visible under the "All Activity" section +towards the bottom of the DC page. It's now time to configure and deploy the LNS following the +[Chirpstack Configuration](configure-chirpstack) guides. + +### Helium Wallet App Video Walkthrough + + diff --git a/docs/network-iot/run-an-lns/fund-an-oui.mdx b/docs/network-iot/run-an-lns/fund-an-oui.mdx new file mode 100644 index 000000000..ea62dabbd --- /dev/null +++ b/docs/network-iot/run-an-lns/fund-an-oui.mdx @@ -0,0 +1,92 @@ +--- +id: fund-an-oui +title: Fund An Organizationally Unique Identifier +pagination_label: Fund An Organizationally Unique Identifier +sidebar_label: Fund an Organizationally Unique Identifier +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns/fund-an-oui +--- + +[Data Credits](/tokens/data-credit) are used to pay for all transmission of data from devices on the +Helium Network. + +It is worth noting that HNT to DC conversion is irreversible. Data Credits cannot be refunded, +exchanged for other tokens, or transferred between wallets. + +Several options are available for funding an OUI with Data Credits: + +- [Fund an OUI using HNT](/iot/run-an-lns/fund-an-oui-using-hnt) +- [Fund an OUI using a credit card with the Sphere Data Credit Portal](/tokens/data-credit-portal) + +## Estimating Usage + +
+ +
+ Up-to-date usage metrics for all IoT OUIs on the Helium network.
To get a sense of + traffic and DC usage on the network, check out the full{' '} + Dune Data Credit Dashboard. +
+
+ +
+ +Data credits are charged per 1DC per 24-byte increment for each response of an uplink payload. DC +cost is based on the application payload size only. LoRaWAN protocol overhead (headers, MIC, etc.) +does not count toward the DC cost. For a helpful visualization of DC usage of devices for a given +period, check out the [Data Credit calculator](/tokens/data-credit#data-transfer-calculator) on the +DC documentation. + +Only uplinks are charged on Helium. Downlinks and join requests are not billed. + +## Tracking OUI Balance + +import { EscrowOUIWidget } from '@theme/EscrowOUIWidget' + +The balance of an OUI is held in an escrow account that is generated based on the OUI's payer key. +This escrow account is what allows the Helium Network to appropriately deduct DC as network transfer +occurs. The widget below can be used to look up the escrow account and balance for payer or router +keys associated to any valid OUI. + +
+ +
+ +
+ +The escrow account is the main source for understanding the remaining balance of an OUI. Details on +the funding and burn of data credits on an escrow account can be inspected using any Solana +blockchain explorer. + +When monitoring the OUI balance, it is worth noting that the minimum usage deducted at a time is +10,000 DC[^1]. + +[^1]: + `BURN_THRESHOLD` on + [GitHub](https://github.com/helium/oracles/blob/7c9f5b4e6f8e47be80eaf3c6cb4cc703373246ef/iot_packet_verifier/src/pending_burns.rs#L32) + +### Sphere DC Balance API + +Sphere provides a public API endpoint for querying the DC balance of an OUI's escrow account. + +``` +https://api.spherepay.co/v1/solanaDepinSession/dcAmount/ +``` + +## Minimum Balance + +The Helium Packet Router enforces a minimum balance of 3,500,000 Data Credits (\$35). This minimum +balance is required to ensure that all Hotspots are compensated for their work on the network in the +case that the LNS transfers data more quickly than can be deducted from the OUI's balance. Token +balances cannot become negative, so this \$35 buffer keeps network payments balanced. + +If the DC balance of an OUI falls below the minimum balance, the OUI will be unable to receive data +until the balance is increased. The Packet Verifier checks the DC balance of every locked OUI every +30 minutes, and unlocks them if their DC balance is above 3.5MM DC. diff --git a/docs/network-iot/run-an-lns/kubernetes.mdx b/docs/network-iot/run-an-lns/kubernetes.mdx new file mode 100644 index 000000000..3b9e8431e --- /dev/null +++ b/docs/network-iot/run-an-lns/kubernetes.mdx @@ -0,0 +1,37 @@ +--- +id: kubernetes +title: ChirpStack on Kubernetes +pagination_label: ChirpStack on Kubernetes +sidebar_label: On Kubernetes +description: ChirpStack on Kubernetes +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns/kubernetes +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +This guide describes using Kubernetes to run ChirpStack in a production setting on AWS EKS with +usage of AWS RDS Postgres and ElastiCache Redis. + +## GitHub Repository + +The [chirpstack-infrastructure](https://github.com/dewi-alliance/chirpstack-infrastructure) GitHub +repository provides Terraform modules and Helm charts for a highly available Chirpstack V4 +deployment configured with Helium Network sidecar applications on AWS EKS. + +## AWS Architecture Diagram + +The AWS architecture diagram provided below shows ChirpStack, as deployed from the GitHub +repository, in a high-availability configuration with redundancies for AWS availability zones, NAT +gateway, RDS Postgres, and ElastiCache Redis. The repository also provides an example for a +cost-optimized configuration without NAT gateway, RDS Postgres, and ElastiCache Redis redundancies. + +
+ AWS architecture diagram of ChirpStack on EKS +
AWS architecture diagram of ChirpStack on EKS.
+
diff --git a/docs/network-iot/run-an-lns/run-an-lns.mdx b/docs/network-iot/run-an-lns/run-an-lns.mdx new file mode 100644 index 000000000..33138a517 --- /dev/null +++ b/docs/network-iot/run-an-lns/run-an-lns.mdx @@ -0,0 +1,34 @@ +--- +id: run-an-lns +title: Run a LoRaWAN Network Server +pagination_label: Run Your Own LNS +sidebar_label: Run Your Own LNS +description: Helium OpenLNS Documentation +image: https://docs.helium.com/img/link-image.png +slug: /iot/run-an-lns +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + + +
+
+ +OpenLNS is the platform that enables any compatible LoRaWAN Network Server (LNS) to use Helium's IoT +Network. In this guide, we'll walk you through the process of setting up and configuring OpenLNS +with the popular open-source LNS, [ChirpStack](https://www.chirpstack.io/). + +## What to Expect + +There are four major steps to run your own LNS: + +1. [Purchase a Helium Organizationally Unique Identifier (OUI)](/iot/run-an-lns/buy-an-oui) +2. [Fund a Helium Organizationally Unique Identifier (OUI)](/iot/run-an-lns/fund-an-oui) +3. [Configure and deploy a LoRaWAN Network Server (LNS)](/iot/run-an-lns/configure-chirpstack) +4. [Configure Routing Rules with Config Service](/iot/run-an-lns/configure-routing-rules) + +## Advanced Configuration + +There are additional configurations, automations, and data you can access with OpenLNS. You can +learn more about these in the [Advanced Configuration](/iot/run-an-lns/advanced-configuration) +section. diff --git a/docs/network-mobile/5g-on-helium.mdx b/docs/network-mobile/5g-on-helium.mdx new file mode 100644 index 000000000..d03e0f111 --- /dev/null +++ b/docs/network-mobile/5g-on-helium.mdx @@ -0,0 +1,58 @@ +--- +id: 5g-on-helium +title: The Mobile Network +pagination_label: The Mobile Network +sidebar_label: Introduction +description: The Mobile Network +image: https://docs.helium.com/img/link-image.png +slug: /mobile/5g-on-helium +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + + + +## Introduction + +The Helium Mobile Network is a decentralized +[carrier offload](https://blog.hellohelium.com/champions/) network. The Helium Mobile Hotspots and +Converted Wi-Fi Networks, while owned and deployed by the community, connect to a common core which +gives subscribers from various mobile carriers automatic access to the network. In return for the +work done by the radio deployer enabling this wireless coverage (securing real estate, providing +power, providing internet) the deployer is rewarded with HNT. + +## Hotspots + +Helium Mobile Hotspots allow anyone to create Helium Network coverage. Helium Mobile Hotspots are +low cost, easy to deploy, Wi-Fi radios. These are best deployed in commercial locations where slow +moving people gather; think coffee shops, restaurants, shopping malls, public transit stations, etc. +In this way subscribers, business owners, and entrepreneurs can improve the mobile wireless user +experience rapidly where it's needed. + +:::tip Purchase a Wi-Fi Hotspot + +Visit [helium.com](https://helium.com) for more information on purchasing a Mobile Wi-Fi Hotspot to +build coverage in your area! + +::: + +[Converted Wi-Fi Networks](/mobile/helium-plus-mobile) are created when an existing +[Passpoint](https://www.wi-fi.org/discover-wi-fi/passpoint) enabled Wi-Fi network is configured to +join the Helium Mobile Network. Through the Helium Plus program or +[self-serve guides](/mobile/helium-plus-mobile), owners of existing Wi-Fi networks can monetize +their asset by enabling carrier offload via the Helium Network. In return for servicing subscriber's +wireless data, the network owners gets rewarded with HNT tokens. Wi-Fi radios onboarded through +Helium Plus program do not earn Proof of Coverage (PoC) rewards. + +:::tip Add Helium+ To Your Wi-Fi Fleet + +Visit [Helium Plus](https://www.helium.com/plus) for more information on how to add Helium Plus to +your passpoint capable Wi-Fi network. + +::: + +## Rewards + +Hotspots can earn rewards for both Proof of Coverage and data transfer. PoC rewards are dependent on +the readiness and quality of service provided by a radio. Data transfer rewards are awarded based on +the amount of eligible data passed through a Hotspot. diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-Cisco-WLC-5520.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-Cisco-WLC-5520.mdx new file mode 100644 index 000000000..1c6d1831e --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-Cisco-WLC-5520.mdx @@ -0,0 +1,213 @@ +--- +id: helium-plus-Cisco-WLC-5520 +title: Cisco Catalyst 5520 Conversion Guide +pagination_label: Cisco Catalyst 5520 Conversion Guide +sidebar_label: Cisco Catalyst 5520 +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-Cisco-WLC-5520 +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +## Prerequisites + +- Cisco AireOS system must be running 8.5 or later. +- Guide assumes the network is using an on-prem 5520 Controller. +- Wi-Fi system has AP(s) linked to the 5520 WLC Controller. +- Cisco system has basic traffic routing working with existing SSID(s). +- An Intel-based host is required in the network to run the + [RadSecProxy](https://github.com/novalabsxyz/radsec-proxy) container. + +# High Level Steps + +1. Deploy RadSecProxy container and record IP address of host +2. Build WLAN Helium Passpoint SSID + 1. Build an SSID for Helium + 2. Configure Security and RADIUS Connections + 3. Configure 802.11u + 4. Build Hotspot 2.0 Profile + 5. Enable Hotspot 2.0 + +# Deploy RadSecProxy Container + +RADIUS messages used to authenticate users and for session accounting are transmitted unsecured and +over UDP by default. By directing these messages internally in your secure network to a RadSecProxy, +the UDP is then converted to a TLS protected TCP connection to the Helium Network core AAA servers. + +## Prerequisites + +- An intel based machine with Docker installed. +- The intel based machine has a private IP in your network reachable from your 5520 WLC Controller +- ACLs or Firewalls allow 5520 WLC Controller and Docker Container to communicate UDP on port 1812 + and 1813 +- ACLs or Firewalls allow container/host to reach the internet on TCP ports 2083 and 3802\. + +## Container Deployment + +1. Un-zip and untar the `Helium_RadSec_Docker.tar.gz` file into the directory of your choice on the + host machine. This will unpack the following items: + 1. `Dockerfile` \- The docker instructions on how to build the container + 2. `Radsecproxy.conf` \- The radsecproxy config file is pre-populated to connect to Helium + Network AAA servers + 3. `docker-compose.yml` \- File to start and stop the container as a daemon. + +```bash +tar -xvzf Helium_RadSec_Docker.tar.gz +``` + +2. Into the same directory copy the 3 certificates obtained from Helium Network + 1. ca.pem \- the root CA certificate + 2. cert.pem \- the user certificate + 3. key.pem \- the key file matched to the certificate +3. Start the container using: + +```bash +sudo docker compose up -d +``` + +4. If/when needed, stop the container using: + +```bash +sudo docker compose down +``` + +# Build an SSID for Helium + +This guide outlines how to configure a Cisco 5520 Wireless LAN Controller (WLC) running AireOS 8.5 +for integration with the Helium Network using a local Docker-based RadSecProxy. This enables +Passpoint (Hotspot 2.0) authentication through Helium’s secure RADIUS infrastructure. + +To start login to your Cisco 5520 Dashboard in your browser, this will be our starting point for all +major steps below + +1. Log into your WLC Dashboard → click **Advanced** → **WLANs** +2. Click **Create New** → **Go**. +3. Enter Profile Name: **Helium** +4. Enter SSID: **Helium**. +5. Set ID: any available value. +6. Click 'Apply' → then select the WLAN ID to edit + +:::note + +In the following steps we will only mention mandatory fields to set. Most windows will have many +other parameters with default values set. Leave any unmentioned parameter at it's default value. + +::: + +## Configure Security and RADIUS Connections + +1. Under the **General** tab, check the **Status** box to Enable +2. Check the box to **Broadcast SSID** +3. Configure the **NAS-ID** to the value shared to you by Helium + +
+ +
+ +2. Under the **Security -> Layer2** tabs configure the following parameters: +3. In **Layer 2 Security** dropdown choose **WPA2 + WPA3** +4. Check the boxes for **WPA2** and **WPA3** Policy +5. For **Encryption Cipher** check the box for **CCM128(AES)** + +
+ +
+ +6. Under the **Security -> AAA** tabs configure the following parameters: +7. Configure **Authentication Server IP** to be the **IP of your local RadSecProxy** +8. Configure **Authentication Port** to be **1812** +9. Configure **shared secret** to **mysecret** +10. Configure **Accounting Server IP** to be the **IP of your local RadSecProxy** +11. Configure **Accounting Port** to be **1813** +12. Configure **shared secret** to **mysecret** +13. Configure **Interim Interval** to **300 seconds** + +# Configure 802.11u + +1. From the main WLANs view, select the blue down arrow to the right of the WLAN description and + select **802.11u** from the dropdown menu + +
+ +
+ +2. In the configuration page that opens configure the following parameters: +3. Check the box for **802.11u Status** to Enable to view more configurable parameters +4. Check the box for **Internet Access** to **Enabled** +5. In the dropdown for **Network Type** choose **Chargable Public** +6. In the dropdown for **IPv4 Type** choose **Single NATed Private** or most applicable option for + your network +7. In the dropdown for **IPv4 Type** choose **Not Available** or most applicable option for your + network +8. In the **Realm List** enter **hellohelium.com** and click **Add** +9. Repeat adding to **Realm List** and enter **freedomfi.com** and click **Add** +
+ +
+ +:::note + +You can see in the bottom right of the screenshot where you will add the carrier codes that will be +sent from the Helium team. + +::: + +10. **Click** on the **hellohelium.com** realm you just created +11. Set **EAP Method** to **EAP-TLS**, then click on **Ad**. The EAP method appears in the EAP + Index. If it asks for sub-method choose **Certificate** +12. Repeat the steps for the freedomfi.com realm +13. In the **Domain List** enter **hellohelium.com** and click **Add** +14. **Save** configuration + +# Build Hotspot 2.0 Profile + +1. From the main WLANs view, select the blue down arrow to the right of the WLAN description and + select **Hotspot 2.0** from the dropdown menu + +
+ +
+ +2. Check the box to **Enable** Hotspot 2.0. +3. Set **WAN Link Status** to **Link Up** +4. Click **Apply -> Save Configuration** + +# Verification + +1. After saving, attempt to connect using a Helium Mobile SIM or eSIM device. +2. Monitor the proxy logs with: + +```bash + docker logs -f radsecproxy +``` + +3. Successful authentication will display lines similar to: + +```bash + Received Access-Request from 192.168.x.x + Access-Accept for user anonymous@.hellohelium.com +``` + +4. You can also confirm in the WLC Dashboard → Monitor → Clients that the device is connected via + 802.1X authentication. diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-Cisco-WLC-9800.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-Cisco-WLC-9800.mdx new file mode 100644 index 000000000..b9ce077c7 --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-Cisco-WLC-9800.mdx @@ -0,0 +1,449 @@ +--- +id: helium-plus-Cisco-WLC-9800 +title: Cisco Catalyst 9800 Conversion Guide +pagination_label: Cisco Catalyst 9800 Conversion Guide +sidebar_label: Cisco Catalyst 9800 +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-Cisco-WLC-9800 +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +## Prerequisites + +- Cisco IOS XE system must be running + [17.9](https://documentation.meraki.com/General_Administration/Firmware_Upgrades/Cisco_Meraki_Firmware_FAQ) + or later. +- Guide assumes the network is using an on-prem 9800 Controller. +- Wi-Fi system has AP(s) linked to the 9800 WLC Controller. +- Cisco system has basic traffic routing working with existing SSID(s). +- An Intel-based host is required in the network to run the + [RadSecProxy](https://github.com/novalabsxyz/radsec-proxy) container. + +# High Level Steps + +1. Deploy RadSecProxy container and record IP address of host +2. Build WLAN Helium Passpoint SSID + 1. Build a RADIUS Server and Group + 2. Create a AAA Method List + 3. Add the NAS-ID to the WLAN AAA Policy + 4. Build Hotspot 2.0 Profile + 5. Build the Helium SSID + 6. Apply Policy and Hotspot Profile to the SSID + 7. Create Policy Tag + 8. Apply Tag to APs + +# Deploy RadSecProxy Container + +RADIUS messages used to authenticate users and for session accounting are transmitted unsecured and +over UDP by default. By directing these messages internally in your secure network to a RadSecProxy, +the UDP is then converted to a TLS protected TCP connection to the Helium Network core AAA servers. + +## Prerequisites + +- An intel based machine with Docker installed. +- The intel based machine has a private IP in your network reachable from your 9800 WLC Controller +- ACLs or Firewalls allow 9800 WLC Controller and Docker Container to communicate UDP on port 1812 + and 1813 +- ACLs or Firewalls allow container/host to reach the internet on TCP ports 2083 and 3802\. + +## Container Deployment + +1. Un-zip and untar the `Helium_RadSec_Docker.tar.gz` file into the directory of your choice on the + host machine. This will unpack the following items: + 1. `Dockerfile` \- The docker instructions on how to build the container + 2. `Radsecproxy.conf` \- The radsecproxy config file is pre-populated to connect to Helium + Network AAA servers + 3. `docker-compose.yml` \- File to start and stop the container as a daemon. + +```bash +tar -xvzf Helium_RadSec_Docker.tar.gz +``` + +2. Into the same directory copy the 3 certificates obtained from Helium Network + 1. ca.pem \- the root CA certificate + 2. cert.pem \- the user certificate + 3. key.pem \- the key file matched to the certificate +3. Start the container using: + +```bash +sudo docker compose up -d +``` + +4. If/when needed, stop the container using: + +```bash +sudo docker compose down +``` + +# Build Meraki Helium Passpoint SSID + +The following steps will configure your Cisco 9800 WLC system to broadcast an SSID with the needed +Passpoint and RADIUS configurations to support Helium Mobile user offload. + +To start login to your Cisco 9800 Dashboard in your browser, this will be our starting point for all +major steps below + +
+ +
+
+ +:::note + +In the following steps we will only mention mandatory fields to set. Most windows will have many +other parameters with default values set. Leave any unmentioned parameter at it's default value. + +::: + +## Build a RADIUS Profile + +1. Click on **Configuration -> Security -> AAA** in the left menu column + +
+ +
+ +2. Confirm RADIUS is selected in left column and Click **+Add** in the top left +3. Enter a **Name** e.g. Helium_AAA +4. Enter a **Server Address** with the IP of the RadSecProxy you installed earlier. +5. Enter the **Key** and **Confirm Key** fields equal to "mysecret" (modify if you have modified + during the RadSecProxy container installation) +6. Confirm the **Auth Port** and **Acct Port** are 1812 and 1813 respectively +
+ +
+7. Click **Apply to Device** + +**NOTE** If you have installed multiple RadSecProxy instances for redundancy, repeat the server +creation for each instance incrementing the names with an integer e.g. Helium_AAA_1 + +8. Click on **Server Group** +
+ +
+9. Click on **+Add** +10. Enter a **Name** e.g. "Helium_svg" +11. Select your AAA servers and use the arrows to move them into the **Assigned Servers** list +
+ +
+12. Click **Apply to Device** + +## Create a AAA Method List + +1. Click **AAA Method List** +
+ +
+2. Click **+Add** in the lower box +
+ +
+3. Enter a **Name** e.g. Helium-aaa-meth-list +4. In **Type** dropdown select **dot1x** +5. Select your Server Group in the list and use the arrows to move it to **Assigned Server Groups** +
+ +
+6. Click **Apply to Device** +7. From the left column select **Accounting** and then click **+Add** +
+ +
+8. In **Method List Name** enter **Helium_meth_list_acct** +9. In the **Type** dropdown select **Identity** +10. Select your Server Group and use the arrows to move it into the **Assigned Server Group** +
+ +
+11. Click **Apply to Device** + +# Add the NAS-ID to the WLAN AAA Policy + +1. Click on **Configuration -> Security -> Wireless AAA Policy** + +
+ +
+ +2. Click on **+Add** +3. Enter a **Name** e.g. Helium_aaa_policy +4. In the **NAS-ID Option 1** drop down select **Custom** +5. Enter the NAS_ID shared with you by Helium + +
+ +
+ +6. Click **Apply to Device** + +# Build Hotspot 2.0 Profile + +1. Click on **Configuration -> Wireless -> Hotspot/OpenRoaming** +
+ +
+2. Click **+Add** under **ANQP Servers** +3. Enter **Name** as **Helium** +4. Enter **Description** as **Helium** +5. Check the box for **Internet Access** +6. In the **Network Type** drop down select **Chargable Public** + +
+ +
+ +7. Click **+Add** under **NAI Realm** +8. Enter **NAI Realm Name** as **helloheium.com** +9. Click to **Enable** the **EAP-TLS** option +10. Check the box for **certificate** +11. Click **Save** +12. Click **Apply to Device** + +
+ +
+ +13. Repeat the steps to add a second NAI realm for **freedomfi.com** +
+ +
+14. At the top of the window select **Server Settings** +15. In the drop down for **IPv4 Type** select **Double NAT Private** (or option that appropriately + describes your network) +16. In the drop down for **IPv6 Type** select **Not Available** +
+ +
+17. Click **Apply to Device** + +# Build the Helium SSID + +1. Click on **Configuration -> Wireless -> WLANs** +
+ +
+2. Click on **+Add** +3. Enter **Name** as **Helium** +4. Enter **SSID** as **Helium** +5. Enter **WLAN ID** as your next available integer e.g. 4 +6. Select **Enable** to turn the ssid on +7. Select Enable/Discable for 6GHz as you hardware supports +
+ +
+8. Select **Security** at the top of the window +9. Select **Layer2** in the row below that +10. Ensure the following boxes are **checked** including **WPA2 Policy**, **AES(CCMP128)**, + **802.1x** +
+ +
+11. Select **AAA** at the top of the window +12. In the **Authentication List** drop down select **Helium_aaa_meth_list** +
+ +
+13. Click **Apply to Device** + +# Apply Policy and Hotspot Profile to the SSID + +1. Click on **Configuration -> Tags & Profiles -> Policy** +
+ +
+2. Enter **Name** as **Helium** +3. Enter **Description** as **Helium** +4. Toggle **Status** to **Enabled** +
+ +
+5. Across the top, select **Access Policies** +6. Select the **VLAN/VLAN Group** configured for Helium users (NOTE: This is typically a Guest type + network with access to internet only) + +
+ +
+ +7. Across the top, select **Advanced** +8. **Uncheck** the box next to **Client Exclusion Timeout** +9. In the **Hotspot Server** drop down select **Helium** +10. **Check** the box for **Allow AAA Override** +11. In the **Policy Name** drop down select **Helium_aaa_policy** +12. In the **Accounting List** drop down select **Helium_meth_list_acct** +
+ +
+13. Click **Apply to Device** + +# Create Policy Tag + +1. Click on **Configuration -> Tags & Profiles -> Tags** +
+ +
+2. Enter **Name** as **Helium** +3. Enter **Description** as **Helium** +4. Click **+Add** below **WLAN-POLICY** +5. In both **WLAN Profile** and **Policy Profile** drop down menus select **Helium** +
+ +
+6. Click the **checkmark** +7. Click **Apply to Device** + +# Apply Helium Tag to AP(s) + +1. Click on **Configuration -> Wireless Setup -> Advanced** +
+ +
+2. Click on **Start Now** +
+ +
+3. Click on the selector box next to **Tag APs** in the bottom right +
+ +
+4. **Check** the box next to the APs you want to broadcast the Helium SSID +5. Click **+Add** when you have you APs selected +
+ +
+6. In the **Policy** Drop down select **Helium** +
+ +
+7. Click **Apply to Device** diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-aruba-central.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-aruba-central.mdx new file mode 100644 index 000000000..ea283bec2 --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-aruba-central.mdx @@ -0,0 +1,252 @@ +--- +id: helium-plus-aruba-central +title: Aruba Central Conversion Guide +pagination_label: Aruba Central +sidebar_label: Aruba Central +description: Convert Aruba WLANs to support Helium Mobile offload using RadSec and Passpoint. +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-aruba-central +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +## Prerequisites + +Before starting, confirm the following: + +- Aruba system is running AOS 8.10.x.x or later +- Network uses an on-prem Aruba Mobility Controller +- APs are adopted and serving traffic +- Existing SSIDs are functional +- Aruba infrastructure has outbound internet access to Helium AAA endpoints + +--- + +## High-Level Steps + +1. Upload Helium RadSec Certificates +2. Configure SSID for RadSec +3. Configure Passpoint Settings +4. Connect and Validate + +--- + +:::note + +This guide applies to "Classic Central". +If your Aruba dashboard shows a "Classic Central" toggle, enable it. + +::: + +## Upload Helium RadSec Certificates + +Helium requires RADIUS traffic to be secured using RadSec (RADIUS over TLS). + +Download the following from the Helium onboarding process (either from the WiFi Conversion process +or sent to you by your Helium Plus contact): + +- RadSec Server CA (ca.pem) +- RadSec Client Certificate (combine cert.pem and key.pem into a single PEM file; for example: + `cat cert.pem key.pem > client_combined.pem`) + +Navigate to: + +**Global → Organization → Network Structure → Certificates** + +--- + +### Upload Server CA + +Navigate to 'Organization' then 'Certificates' + +
+ +
+ +Create a new certificate with the following values: + +
+ +
+ +- Name: `Helium Server CA` (example) +- Type: CA Certificate +- Format: PEM +- File: RadSec Server CA + +
+ +
+--- + +### Upload Client Certificate + +Create another certificate: + +- Name: `Helium Client Certificate` (example) +- Type: Server Certificate +- Format: PEM +- File: Combined cert and key + +
+ +
+ +--- + +## Configure SSID for RadSec + +Navigate to: + +**Devices → WLANs** + +Note: Ensure you've selected your AP first or the WLAN options won't show. + +Click **Add SSID** and enter the SSID name. + +
+ +
+ +--- + +### SSID General Configuration + +Set the following values: + +- Under 'General', set the SSID name to 'Helium'. + +Click **Next**. + +- Configure VLAN and IP assignment as required for your deployment + +Click **Next**. + +- Under Security, set Security Level to Enterprise +- Set Key Management to WPA3-Enterprise + +Click **Add** next to **Primary Server** and create a new authentication server. + +--- + +### Create RadSec Authentication Server + +Configure the authentication server with the following values: + +- Server Name: `Helium-RadSec` +- Server Type: RADIUS +- Enable RadSec: enabled +- IP Address: radius-bf.wifi.hellohelium.com +- RadSec Port: 2083 +- RadSec Keepalive Type: TCP Keepalive + +Click **OK**. + +
+ +
+ +--- + +### Complete SSID Settings + +Verify the following: + +- Security Level: Enterprise +- Key Management: WPA3-Enterprise +- Server Group: Primary and backup only +- Primary Server: `Helium-RadSec` +- Under Advanced Settings, go to `Passpoint Service Profile` and click `Manage Passpoint Services`. + - Click **Add Profile**. + - Under `Access Network`: + - Name the profile `Helium Passpoint`. + - Enable the `Internet` slider. + - Set Domain Name to `freedomfi.com`. + - Set Network Type to `Chargeable Public`. + - Set IPv4 to `Double NAT Private`. + - Set IPv6 to `None`. + +
+ +
+ +- Under `Identity Provider` > `NAI Realms`: + - Click **Add NAI Realm**. + - Set NAI Realm to `freedomfi.com`. + - Set EAP Method to `EAP-TLS`. + - Set Authentication parameter to `Certificate`. + - Click **OK**, then repeat to add `hellohelium.com` with the same settings. + +
+ +
+
+
+ +
+ +- Back on the SSID settings under `Accounting` tab: + - Set accounting interval to `5 minutes` + +
+ +
+ +## Troubleshooting + +If authentication fails, check the following: + +- Certificates: verify the Server CA and the combined client certificate were uploaded correctly and + assigned to the device. +- Network: ensure outbound TCP 2083 to the Helium RadSec endpoint is allowed from your Aruba + infrastructure. +- Logs: check Aruba controller logs and the Helium RADIUS logs for Access-Request / Access-Accept + messages. + +## Connect and Validate + +Connect a client device to the newly created SSID. + +Verify successful authentication. + +--- diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-aruba.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-aruba.mdx new file mode 100644 index 000000000..a5aa61759 --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-aruba.mdx @@ -0,0 +1,496 @@ +--- +id: helium-plus-aruba +title: Aruba Conversion Guide +pagination_label: Aruba Conversion Guide +sidebar_label: Aruba +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-aruba +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +## Prerequisites + +- Aruba system must be running + [AOS 8.10.x.x](https://arubanetworking.hpe.com/techdocs/ArubaOS/Consolidated_8.x_RN/Content/8.10/overview-8100x.htm) + or later. +- Guide assumes the network is using an on-prem Aruba Mobility Controller. +- Aruba system has AP(s) linked to the Mobility Controller. +- Aruba system has basic traffic routing working with existing SSID(s). +- An Intel-based host is required in the network to run the + [RadSecProxy](https://github.com/novalabsxyz/radsec-proxy) container. + +# High Level Steps + +1. Deploy RadSecProxy container and record the IP address of the host +2. Build Helium Passpoint SSID + 1. Build RADIUS Authentication Servers + 2. Build WLAN + 3. Link AAA Profile to RADIUS Accounting Server Group + 4. Build ANQP Profile + 5. Build Advertisement Profile + 6. Link ANQP Profile to the Advertisement Profile + 7. Build Hotspot 2.0 Profile + 8. Link Advertisement Profile to Hotspot 2.0 Profile + 9. Link Hotspot 2.0 Profile to Virtual AP + +# Deploy RadSecProxy Container + +RADIUS messages used to authenticate users and for session accounting are transmitted unsecured and +over UDP by default. By directing these messages internally in your secure network to a RadSecProxy, +the UDP is then converted to a TLS protected TCP connection to the Helium Network core AAA servers. + +## Prerequisites + +- An Intel-based machine with Docker installed. +- The Intel-based machine has a private IP in your network reachable from your Aruba Mobility + Controller +- ACLs or Firewalls allow Aruba Mobility Controller and Docker Container to communicate UDP on port + 1812 and 1813 +- ACLs or Firewalls allow container/host to reach the internet on TCP ports 2083 and 3802\. + +## Container Deployment + +1. Un-zip and untar the `Helium_RadSec_Docker.tar.gz` file into the directory of your choice on the + host machine. This will unpack the following items: + 1. `Dockerfile` \- The docker instructions on how to build the container + 2. `Radsecproxy.conf` \- The radsecproxy config file is pre-populated to connect to Helium + Network AAA servers + 3. `docker-compose.yml` \- File to start and stop the container as a daemon. + +```bash +tar -xvzf Helium_RadSec_Docker.tar.gz +``` + +2. Into the same directory copy the 3 certificates obtained from Helium Network + 1. `ca.pem` \- the root CA certificate + 2. `cert.pem` \- the user certificate + 3. `key.pem` \- the key file matched to the certificate +3. Start the container using: + +```bash +sudo docker compose up -d +``` + +4. If/when needed, stop the container using: + +```bash +sudo docker compose down +``` + +--- + +## Build Aruba Helium Passpoint SSID + +The following steps will configure your Aruba Mobility Controller and AP to broadcast an SSID with +the needed Passpoint and RADIUS configurations to support Helium Mobile user offload. + +To start login to your Mobility Controller GUI in your browser, this will be our starting point for +all major steps below. + +
+ +
+
+ +:::important In the following steps we will only mention mandatory fields to set. + +Most windows will have many other parameters with default values set. Leave any unmentioned +parameter at it's default value. + +::: + +## Build RADIUS Authentication Servers + +1. Click on **Configuration** and then **Authentication** in the left menu column. +2. Click the **\+** in the **All Servers** box to add a server +3. Enter “**RadSec-1**” as the Name +4. Choose **RADIUS** as the Type +5. Enter the IP address of the RadSecProxy Container host + +
+ +
+ +6. Click **Submit** +7. Click on the Server name in the table to enter further configuration +8. Enter **Auth Port** \= **1812** +9. Enter **Acct Port** \= **1813** +10. Enter “**mysecret**” as the shared key and retype key +11. Enter the **NAS-ID** used during onboarding with Helium Network + +
+ +
+ +12. Click **Submit** +13. Click **Pending Changes** in the top right corner. +14. Click **Deploy Changes** in the pop up. + +:::note + +Redundancy is good. If you deploy two containers on two hosts, repeat these steps for a second +RadSec server called Radsec-2. + +::: + +## Build WLAN + +1. Click on the arrow next to Mobility Controller in the top left corner of the window and select + the controller you want to configure. + +
+ +
+ +2. Click on **Configuration** and **WLAN** in the left menu column. +3. Click the **\+** in the bottom left of the box to add a new WLAN +4. Enter Name (SSID) \= “**Helium**” +5. Edit Broadcast on AP group and Forwarding mode based on your network configuration. In this + example we use All APs and Tunnel mode. + +
+ +
+ +6. Click **Next** +7. Configure the VLAN settings based on your network configuration. In this example we have a VLAN + called “LAN” that we use. + +
+ +
+ +8. Click **Next** +9. Select **WPA3-Enterprise** for **Key Management** +10. Click \+ in Auth Servers and select Radsec-1 (and Radsec-2 if you have two) + +
+ +
+ +11. Click **Next** +12. Select the Default Role based on your network configuration. In this example we use a + “allow-all” rule that is wide open and allows-all user traffic. + +
+ +
+ +13. Click **Finish** + +## Link AAA Profile for RADIUS Accounting Server Group + +1. Click on **Configuration** and then **Authentication** in the left menu column. +2. Click on **AAA Profiles** in the top menu bar +3. Click the **\+** next to **AAA** and **\+** next to **Helium_aaa_prof** +4. Click on **RADIUS Accounting Server Group** +5. Select **Heium_dot1_svg** from drop down menu next to **Server Group** + +
+ +
+ +6. Click **Submit** +7. Click **Pending Changes** in the top right corner. +8. Click **Deploy Changes** in the pop up. + +## Build ANQP Profile + +### Domain Name + +1. Click on **Configuration** and **System** in the left menu column. +2. Click on **Profiles** in the menu bar across the top +3. Click the **\+** next to **Wireless LAN** and scroll down to find **ANQP Domain Name** +4. Click the **\+** in the area to the right to build a new **ANQP Domain Name Profile** + +
+ +
+ +5. Enter “**Helium_Domain**” for Profile Name and “**Hellohelium.com**” for Domain Name +6. Click **Submit** +7. Click **Pending Changes** in the top right corner. +8. Click **Deploy Changes** in the pop up. + +### IP Address Availability + +1. Click on **Configuration** and **System** in the left menu column. +2. Click on **Profiles** in the menu bar across the top +3. Click the **\+** next to **Wireless LAN** and scroll down to find **ANQP IP Address + Availability** +4. Click the **\+** in the area to the right to build a new **ANQP IP Address Availability Profile** + +
+ +
+ +5. Enter “Helium_IP” for profile name, select appropriate values for IPv4 and IPv6 availability. If + unsure, select “**private-double-nated**” and “**not-available**”. +6. Click **Submit** +7. Click **Pending Changes** in the top right corner. +8. Click **Deploy Changes** in the pop up. + +### NAI Realm + +1. Click on **Configuration** and **System** in the left menu column. +2. Click on **Profiles** in the menu bar across the top +3. Click the **\+** next to **Wireless LAN** and scroll down to find **ANQP NAI Realm** +4. Click the **\+** in the area to the right to build a new **ANQP NAI Realm Profile** + +
+ +
+ +5. Enter “**Helium_realm**” for Profile Name and “**hellohelium.com**” for NAI Realm Name. +6. In the drop down for NAI Realm EAP Method 1 chose “**eap-tls**” and below that click the **\+** + to set ID \= **Credential Type** and Value \= **cred-cert** +7. Click **OK** +8. Click **Submit** +9. Click **Pending Changes** in the top right corner. +10. Click **Deploy Changes** in the pop up. + +### Venue Name + +1. Click on **Configuration** and **System** in the left menu column. +2. Click on **Profiles** in the menu bar across the top +3. Click the **\+** next to **Wireless LAN** and scroll down to find **ANQP Venue Name** +4. Click the **\+** in the area to the right to build a new **ANQP Venue Name Profile** + +
+ +
+ +5. Enter “Helium_venue” in Profile Name, select the best fitting Venue Group e.g. “**business**” and + best fitting Venue Type e.g. “**assembly-restaurant**” and supply a Venue Name which can be the + street address of your venue e.g. “**303 Elk Ave**” +6. Click **Submit** +7. Click **Pending Changes** in the top right corner. +8. Click **Deploy Changes** in the pop up. + +## Build Advertisement Profile + +1. Click on **Configuration** and **System** in the left menu column. +2. Click on **Profiles** in the menu bar across the top +3. Click the **\+** next to **Wireless LAN** and scroll down to find **Advertisement Profile** +4. Click the **\+** in the area to the right to build a new **Advertisement Profile** + +
+ +
+ +5. Enter “Helium_adv_prof” as Profile name +6. Click **Submit** +7. Click **Pending Changes** in the top right corner. +8. Click **Deploy Changes** in the pop up. + +## Link ANQP Profiles to the Advertisement Profile + +1. Click on **Configuration** and **System** in the left menu column. +2. Click on **Profiles** in the menu bar across the top +3. Click the **\+** next to **Wireless LAN** and scroll down to find **Advertisement** +4. Click the **\+** next to **Advertisement** and click on the **\+** next to **Helium_adv_profile** +5. Select **ANQP Domain Name** from the list and click on the **\+** in the box to the right and + select “**Helium_Domain**” from the list. + +
+ +
+ +6. Click **OK** +7. Click **Submit** +8. Click **Pending Changes** in the top right corner. +9. Click **Deploy Changes** in the pop up. +10. Repeat steps 1-9 to add: + 1. ANQP IP Address Availability + 2. ANQP NAI Realm + 3. ANQP Venue name + +:::important + +You must do each parameter individually and deploy changes each time. + +::: + +## Build Hotspot 2.0 Profile + +1. Click on **Configuration** and **System** in the left menu column. +2. Click on **Profiles** in the menu bar across the top +3. Click the **\+** next to **Wireless LAN** and scroll down to find **Hotspot 2.0** +4. Click the **\+** in the area to the right to build a new **Hotspot 2.0 Profile** + +
+ +
+ +5. Enter “**Helium_hs20**” for Profile name +6. Check the box for **Advertise Hotspot 2.0 Capability** +7. Select **Access Network Type** \= **Public chargeable** +8. Select best fitting **Venue Group Type** e.g. **assembly** +9. Select Best fitting **Venue Type** e.g. **assembly-restaurant** +10. Check the box next to **RADIUS Chargeable User Identity(RFC4372)** +11. Check the box next to **RADIUS Location Data (RFC5580)** +12. When complete the form should look like above. +13. Click **Submit** +14. Click **Pending Changes** in the top right corner. +15. Click **Deploy Changes** in the pop up. + +## Link Advertisement Profile to Hotspot 2.0 Profile + +1. Click on **Configuration** and **System** in the left menu column. +2. Click on **Profiles** in the menu bar across the top +3. Click the **\+** next to **Wireless LAN** and scroll down to find **Hotspot 2.0** +4. Click the **\+** next to the **Helium** Hotspot 2.0 profile +5. Click on **Advertisement** + +
+ +
+ +6. Select **Helium_adv_prof** from the drop down menu +7. Click **Submit** +8. Click **Pending Changes** in the top right corner. +9. Click **Deploy Changes** in the pop up. + +## Link Hotspot 2.0 Profile to Virtual AP + +1. Click on **Configuration** and **System** in the left menu column. +2. Click on **Profiles** in the menu bar across the top +3. Click the **\+** next to **Wireless LAN** and scroll down to find **Virtual AP** +4. Click the **\+** next to **Virtual AP** and click the **\+** next to **Helium** +5. Click on **Hotspot 2.0** +6. Select **Helium_hs20** from drop down menu next to **Hotspot 2.0 Profile** at the top + +
+ +
+ +7. Click **Submit** +8. Click **Pending Changes** in the top right corner. +9. Click **Deploy Changes** in the pop up. + +## Troubleshooting + +### Look for incoming RADUS packets in RadSec Logs + +``` +radsec@radsec:~$ sudo docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +4cefb87fb8cc 612e4c464d65 "/usr/bin/radsecprox…" 13 hours ago Up 13 hours (healthy) 0.0.0.0:1812-1813->1812-1813/udp, :::1812-1813->1812-1813/udp radsec-radsecproxy-1 + +radsec@radsec:~$ sudo docker logs -f 4cefb87fb8cc +``` + +Follow logs from the container and look for Accept or Rejects for any reasons. + +- No Radius when phone is trying means: + - Aruba setup is not forwarding or not forwarding the right ports + - Network is blocking, check for ACLs or Firewall in network path + - Container host network is blocking it being sent to container check for firewall services on + host +- Radius arrives but you are getting rejects means: + - Make sure NAS_ID has been onboarded to Helium Network + - Double check ANQP profile creation steps + +### Inspect RADIUS AVP contents + +```bash +ssh radsec@192.168.10.209 -- sudo tcpdump -i any -U -s0 -w - port 1813 or 1812 or 2083 | /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i - +``` + +Wireshark/TCPdump on host for port 1812, 1813, 2083, 3802\. +User on host must have “sudo nopasswd” privileges. + +Look for: + +- Username AVP must have hellohelium.com realm +- NAS-ID AVP must be formatted exactly as submitted during onboarding +- Check ports are 1812 for authentication and 1813 for accounting +- Ensure the TCP connections are established on 2083 and 3802 diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-cambium-cnmaestro.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-cambium-cnmaestro.mdx new file mode 100644 index 000000000..5ffb9f5f5 --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-cambium-cnmaestro.mdx @@ -0,0 +1,205 @@ +--- +id: helium-plus-cambium-cnmaestro +title: Cambium cnMaestro Conversion Guide +pagination_label: Cambium cnMaestro Conversion Guide +sidebar_label: Cambium cnMaestro +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-cambium-cnmaestro +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +## Prerequisites + +- This guide assumes the network is using the **cnMaestro Cloud Controller**. +- The Cambium system has AP(s) linked to the cnMaestro Controller. +- The Cambium system already has basic traffic routing working with existing SSIDs. +- An **Intel-based host** is required in the network to run the + [RadSecProxy](https://github.com/novalabsxyz/radsec-proxy) container. + +# High Level Steps + +1. Deploy RadSecProxy container and record IP address of host +2. Create AP Group +3. Build WLAN Helium Passpoint SSID +4. Configure AAA Servers +5. Add the NAS-ID to the WLAN AAA Policy +6. Configure Passpoint and 3GPP Carrier Info +7. Assign APs to the new Group + +## Deploy RadSecProxy Container + +RADIUS messages used to authenticate users and for session accounting are transmitted unsecured and +over UDP by default. By directing these messages internally within your secure network to a +**RadSecProxy**, UDP traffic is converted to a **TLS-protected TCP connection** to the Helium +Network core AAA servers. + +### Prerequisites + +- Intel-based machine with **Docker** installed. +- The host has a **private IP address** reachable from your cnMaestro controller. +- ACLs or firewalls allow cnMaestro and the Docker container to communicate via UDP on ports + **1812** (auth) and **1813** (accounting). + +### Container Deployment + +Unzip and untar the Helium RadSec Docker package: + +```bash +tar -xvzf Helium_RadSec_Docker.tar.gz +``` + +This will unpack: + +- `Dockerfile` — Docker build instructions +- `radsecproxy.conf` — preconfigured to connect to Helium AAA servers +- `docker-compose.yml` — to start/stop the container as a daemon + +Copy the three Helium-provided certificates into the same directory: + +- `ca.pem` — root CA certificate +- `cert.pem` — user certificate +- `key.pem` — private key paired with the certificate + +Start the container: + +```bash +sudo docker compose up -d +``` + +To stop the container: + +```bash +sudo docker compose down +``` + +## Create AP Group + +1. From the **home** view of your cnMaestro controller, go to **Configuration → Wi-Fi Profiles** + +
+ +
+ +2. In _Wi-Fi Profiles_, select **AP Groups** → **Add New**. +3. Under **Basic Settings**, scroll down and click **Create WLAN**. + +
+ +
+ +## Build WLAN + +1. In **WLAN settings** set: + + - **Name:** `Helium Enterprise` (or your preferred name) + - **WiFi-Offload type:** `Custom` + - **SSID:** `Helium` + - **Security:** `WPA3 Enterprise` + - **Client Isolation:** `Network Wide` + +
+ +
+ +2. On the left panel, go to **AAA Servers**. + +3. Under **Authentication Server**: + + - **Host:** IP of your RadSecProxy host (e.g., `192.168.1.203`) + - **Secret:** `mysecret` (must match `radsecproxy.conf` which has the default secret 'mysecret') + - **Port:** `1812` + +4. Under **Accounting Server**, repeat the steps above but set **Port = 1813**. + +5. Under **Accounting Mode**, click the drop down and select **Start-Interim-Stop** + +6. At the bottom, set **Interim Update Interval = 300**. + +7. Under **Advanced Settings → NAS-Identifier**, select **Custom** and enter the **NAS ID** provided + by the Helium team for carrier offload approval. + +8. Click **Save**. + +
+ +
+ +## Configure Passpoint + +1. Go to the **Passpoint** tab and enable it under _Basic Settings_. +2. Set **Access Network Type:** `Chargeable Public` +3. Fill in **Venue Group** and **Venue Type** with your venue details. + +4. Scroll down, under **Domain Names**, click **Add New** and enter: + + - `freedomfi.com` + +5. Under **NAI Realm List**, click **Add New**: + + - **Name:** `freedomfi.com` + - **Method:** `EAP-TLS` + - **Authentication:** `Credential Type → Certificate` + - Click **Save** + + Add new again for the next NAI Realm: + + - **Name:** `hellohelium.com` + - **EAP:** `2` + - **Method:** `EAP-TLS` + - **Authentication 1:** `Credential Type → Certificate` + - Click **Save** + +
+ +
+ +7. Save the configuration again. + +8. Scroll down to **IP Address Type Information**: + - **IPv4 Type:** `Double NAT` + - **IPv6 Type:** `Not Available` + +
+ +
+ +## Assign the WLAN to the AP Group + +1. Go to **Monitor and Manage → AP Groups** +2. Select your new AP group `Helium` +3. Go to the **Configuration** tab. +4. Scroll down to **WLAN** add the `Helium Enterprise` WLAN we created if it's not already there. + +
+ +
diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-fortinet.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-fortinet.mdx new file mode 100644 index 000000000..217b5398f --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-fortinet.mdx @@ -0,0 +1,186 @@ +--- +id: helium-plus-fortinet +title: Fortinet Conversion Guide +pagination_label: Fortinet Conversion Guide +sidebar_label: Fortinet +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-fortinet +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +### Prerequisites + +**On an Intel-based Machine with Docker Installed:** + +- The Intel-based machine has a private IP in your network reachable from your Fortinet FortiGate + box. +- ACLs or Firewalls allow Fortinet FortiGate box and Docker Container to communicate UDP on port + 1812 and 1813. +- ACLs or Firewalls allow container/host to reach the internet on TCP ports 2083 and 3802. + +#### RadSecProxy Container Deployment + +1. Un-zip and untar the [`Helium_RadSec_Docker.tar.gz`](https://github.com/novalabsxyz/radsec-proxy) + file into the directory of your choice on the host machine. + +```shell +tar -xvzf Helium_RadSec_Docker.tar.gz +``` + +This will unpack the following items: + + 1. Dockerfile - The docker instructions on how to build the container + 1. Radsecproxy.conf - The radsecproxy config file is pre-populated to connect to Helium Network AAA servers + 1. docker-compose.yml - File to start and stop the container as a daemon. + +Into the same directory, copy the 3 certificates obtained from Helium + +- ca.pem - the root CA certificate +- cert.pem - the user certificate +- key.pem - the key file matched to the certificate + +Start the container using `sudo docker compose up -d`. If/when needed, stop the container using: +`sudo docker compose down`. + +### Configure Fortinet FortiGate + +On the FortiGate CLI with FortiOS 7.0.2+ + +1. Add the local RadSecProxy as the RADIUS server by replacing the \ to the + current RadSecProxy container IP address. Also, use the NAS ID used during onboarding to Helium + for \ + +```shell +config user radius + edit "Helium RadSecProxy" + set server "" + set secret mysecret + set nas-id-type custom + set nas-id "" + set radius-coa enable + set radius-port 1812 + config accounting-server + edit 1 + set status enable + set server "" + set secret mysecret + set port 1813 + next + end + next +end +``` + +2. Set the type of IP address available to subscribers connecting to your Hotspot 2.0 network. + +```shell +config wireless-controller hotspot20 anqp-ip-address-type + edit "ipv4-single-NATed-private" + set ipv4-address-type single-NATed-private + next +end +``` + +3. Define a Venue Name and configure its duple by replacing \ to the desired value. + +```shell +config wireless-controller hotspot20 anqp-venue-name + edit "" + config value-list + edit 1 + set value "" + next + end + next +end +``` + +4. Define “Helium” as the Operator Name. + +```shell +config wireless-controller hotspot20 h2qp-operator-name + edit "Helium" + config value-list + edit 1 + set value "Helium" + next + end + next +end +``` + +5. Add Helium Mobile's NAI Realms. + +```shell +config wireless-controller hotspot20 anqp-nai-realm + edit "Helium_NAI_Realm" + config nai-list + edit "freedomfi.com" + set nai-realm "freedomfi.com" + config eap-method + edit 1 + set method eap-tls + config auth-param + edit 1 + set id credential + set val cred-certificate + next + end + next + end + next + edit "hellohelium.com" + set nai-realm "hellohelium.com" + config eap-method + edit 1 + set method eap-tls + config auth-param + edit 1 + set id credential + set val cred-certificate + next + end + next + end + next + end + next +end +``` + +6. Configure the Passpoint Profile by linking the previously added NAI Realms, 3GPP Cellular + Networks, and the type of IP address available to subscribers connecting to your Hotspot 2.0, + among other parameters. + +```shell +config wireless-controller hotspot20 hs-profile + edit "Helium" + set access-network-type chargeable-public-network + set access-network-internet enable + set venue-group business + set domain-name "freedomfi.com" + set venue-name "" + set nai-realm "Helium_NAI_Realm" + set ip-addr-type "ipv4-single-NATed-private" + next +end +``` + +7. As the final step, set a Virtual Access Point (VAP) by linking the previously added “Helium + RadSecProxy” RADIUS server, and the “Helium” Passpoint Profile, among other parameters. + +```shell +config wireless-controller vap + edit "Helium" + set ssid "Helium" + set security wpa2-only-enterprise + set auth radius + set radius-server "Helium RadSecProxy" + set intra-vap-privacy enable + set schedule "always" + set hotspot20-profile "Helium" + next +end +``` diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-generic.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-generic.mdx new file mode 100644 index 000000000..003b2dfe3 --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-generic.mdx @@ -0,0 +1,86 @@ +--- +id: helium-plus-generic +title: General Network Conversion Guide +pagination_label: General Network Conversion Guide +sidebar_label: General Conversion Guide +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-generic +--- + +This guide provides a high-level, brand-agnostic walkthrough of how to set up Hotspot 2.0 +(Passpoint) for Helium. While specific steps vary across vendors—Aruba, Cisco Meraki, Ruckus, +Fortinet, Extreme, Ubiquiti, etc.—the setup follows the same general workflow: + +### 1. Hotspot 2.0 / Passpoint Enablement + +1. **Enable the Feature**: Look for a toggle or option labeled "Hotspot 2.0," "Passpoint," or + "HS2.0" on your AP or WLAN controller. +2. **NAI Realms**: For Helium Mobile, two realms must be configured: + - `freedomfi.com` (EAP Method: `EAP-TLS`, Sub-Methods: `Certificate`) + - `hellohelium.com` (EAP Method: `EAP-TLS`, Sub-Methods: `Certificate`) + +### 2. SSID Profile + +1. **Create a New SSID** (e.g., named `Helium`) or modify an existing one. +2. **Security**: Configure WPA3-Enterprise for 802.1X/EAP. +3. **Passpoint Advertising**: Under advanced or manual settings, enable Hotspot 2.0/Passpoint mode. +4. **Venue & Network Type**: Some platforms allow specification of a venue name/type. Use + `Chargeable Public Network` as type. +5. **IP Address Type Availability**: If the controller supports it, set IPv4 to + `Double NATed private IPv4` and IPv6 to `Unavailable`. +6. **Add Realms**: Input `freedomfi.com` and `hellohelium.com` with EAP Method `EAP-TLS` and + Sub-Method `Certificate`. +7. **Domain List**: Include the domain names `freedomfi.com` and `hellohelium.com` in the domain + list. If there are existing Passpoint configurations, the Helium domains may be omitted in favor + of those domains. +8. **NAS-ID**: Enter the NAS-ID used during Helium Self-Serve or Helium Plus onboarding. Typically + the MAC address of the network controller or an AP on the onboarded network. + +### 3. AAA and RADIUS / RadSec Integration + +Hotspot 2.0 deployments with Helium use RADIUS over TLS (RadSec) for secure authentication. + +1. **Create RADIUS Profile**: RadSec (RADIUS over TLS) must be supported, or the network must have + the ability to run a RadSec proxy within it. + +- Enable TLS and upload the **Client Certificate**, **Private Key**, and **CA Certificate** provided + by the Helium Self-Serve onboarding or Helium Plus representative. +- Enter the **RadSec Servers** and shared secrets: + - `52.37.147.195:2083` (Shared Secret: `radsec`) + - `44.229.62.214:2083` (Shared Secret: `radsec`) + - `44.241.107.197:2083` (Shared Secret: `radsec`) +- Enable **RADIUS Accounting** and configure the same servers. + - `52.37.147.195:2083` (Shared Secret: `radsec`) + - `44.229.62.214:2083` (Shared Secret: `radsec`) + - `44.241.107.197:2083` (Shared Secret: `radsec`) +- Set an **Interim Update Interval** of 300 seconds. + +### 4. Network & Firewall Rules + +1. **Domains & Ports**: Whitelist or allow traffic to any AAA endpoints used by the network. RadSec + uses TCP port `2083`. +2. **Walled Garden**: If the controller enforces pre-auth access, ensure Helium IP ranges are + reachable during AAA transactions. + +### 5. VLAN Assignments + +1. **Designate VLAN**: Decide which VLAN or subnet handles Passpoint traffic. Provide DHCP, DNS, and + other essential services. +2. **Isolation**: Follow best practices to segment Hotspot 2.0 traffic from internal resources. + +### 6. Testing + +1. **Client Device**: Use a smartphone or laptop known to support Hotspot 2.0. It should discover + and automatically connect to the newly configured SSID. +2. **Logs & Controller**: Review logs for successful EAP authentication events. +3. **Connectivity**: Verify that a connected device obtains the expected IP address, can access the + internet, and is properly accounted for in RADIUS logs. + +## Best Practices + +- **Keep AP Firmware Updated**: Use a version that fully supports Passpoint (HS2.0) features. +- **Segment Traffic**: A dedicated VLAN or subnet for Passpoint traffic enhances security. +- **Test Multiple OSes**: Different end-user devices can behave differently with Passpoint. +- **Monitor Logs**: Authentication or certificate issues typically appear in RADIUS or controller + logs. diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-juniper-mist.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-juniper-mist.mdx new file mode 100644 index 000000000..c6c463a08 --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-juniper-mist.mdx @@ -0,0 +1,202 @@ +--- +id: helium-plus-juniper-mist +title: Juniper Mist Conversion Guide +pagination_label: Juniper Mist Conversion Guide +sidebar_label: Juniper Mist +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-juniper-mist +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +## Prerequisites + +- Juniper Mist system running the latest firmware. +- Juniper Mist Access Points (APs) linked to the Mist Dashboard. +- Basic traffic routing working with existing SSID(s). +- ACLs or firewalls allow Juniper Mist APs to communicate over TCP ports **2083** RadSec. +- Access to the cloud‑hosted Juniper Mist Dashboard. + +## High‑Level Steps + +1. Build a Helium Passpoint SSID on Juniper Mist. + + 1. Create a new SSID. + 2. Configure Passpoint settings. + 3. Add RadSec servers. + +2. Apply the configuration to your sites and access points. +3. Verify operation and troubleshoot as needed. + +# Configure Juniper Mist for Helium Mobile + +To begin, sign in to the Juniper Mist Dashboard at +[https://manage.mist.com](https://manage.mist.com). + +## Create a New SSID + +1. Navigate to **Organization → WLAN Templates**. +2. Click **Create WLAN Template** or select an existing template. +3. Click **Add WLAN** to create a new SSID. + +**Required settings** + +| Field | Value | +| ------------- | ----------------- | +| **SSID Name** | `Helium` | +| **Security** | `WPA3‑Enterprise` | +| **Passpoint** | **Enable** | + +
+ +
Juniper Mist WLAN Settings
+
+
+ +## Configure Passpoint Settings + +In the WLAN settings locate the **Passpoint** section and set: + +- **Venue Name**: _(The Venue name or the name provided by the Helium Plus team)_ + +### Advanced Settings + +- **Domain Name**: `freedomfi.com` + +### NAI Realms + +- `freedomfi.com (EAP‑TLS)` +- `hellohelium.com (EAP‑TLS)` + +
+ +
+
+ +## Add RadSec Servers + +1. Under **Authentication Servers**, choose RadSec from the dropdown. +2. In the **Server Name** field, enter `radius.stage.wifi.freedomfi.com` +3. Click **Add Server** under **Server Addresses** and enter: + + | Field | Value | + | ------------ | --------------- | + | **hostname** | `44.229.62.214` | + | **Port** | `2083` | + + Repeat this process for Helium's RadSec servers `52.37.147.195` and `44.241.107.197` + +4. **NAS Identifier**: use either a static MAC address (e.g. `a8:53:7d:0b:fb:d0`) or the token + `{{DEVICE_MAC}}` to insert the AP’s MAC address. + This NAS Identifier must match the identifier used during onboarding through self-serve or Helium + Plus. + +
+ +
+ +## Other WLAN Settings + +These instructions include the minimum steps required to authenticate a client via the Helium +network. Most venue operators will want to take additional security precautions, such as placing +Helium clients into their own VLAN / subnet which is segmented from other WLANs. The steps to +accomplish this are outside the scope of this document, but should be considered achieve a healthy +security posture for both the venue operator and mobile users. + +## Upload Certificates + +Save the three certificates obtained from the Helium Network into a directory for safekeeping and +reference. + +- `ca.pem` – Root CA certificate +- `cert.pem` – User certificate +- `key.pem` – Private key matching **cert.pem** + +The keys may have different file names depending on their source. + +First add the root CA in 3 parts: + +1. Navigate to **Organization** > **Settings** +2. Under **RadSec Certificates**, click the **Add a RadSec Certificate** link +3. Open the CA file in a text editor; note that it contains **three** separate CA certs. +4. Copy and paste the **first** CA cert, including the **-----BEGIN CERTIFICATE-----** and + **-----END CERTIFICATE-----** header and footer into the text box, and click the **Add** button. +5. Repeat this process for the other two CA certs in the file. + +
+ +
+
+ +Next add the Cert and Key + +1. Under **AP RadSec Certificate**, click the **View Certificate** link. +2. Open the key.pem (or similarly named) file in a text editor, then copy and paste the contents + into the **Private Key** field +3. Open the cert.pem (or similarly named) file in a text editor, then copy and paste the contents + (including the header & footer) into the **Signed Certificate** field + +NOTE: you may need to delete existing keys and certs that in boxes when you open this popup. If +wanted you can save these to a local file on your computer in case you need them in the future. + +
+ +
+
+ +4. Apply / Save as applicable + +## Apply the Configuration + +1. Navigate to **Sites** and select the desired site. +2. Assign the updated **WLAN Template** to the site. +3. Click **Apply Changes** to push the configuration to all APs. + +# Verify Configuration + +- Confirm that the **Helium** SSID is broadcasting on your Juniper Mist APs. +- Connect a Passpoint‑enabled device and verify authentication through RadSecProxy to the Helium + Network. +- In the Mist Dashboard under **Clients**, ensure that client sessions are active. + +
+ +
+ +## Troubleshooting + +| Symptom | Checks | +| --------------------------- | --------------------------------------------------------------------------------------------------------- | +| **SSID not broadcasting** | Verify the WLAN Template is assigned and pushed; confirm AP connectivity to the Mist Dashboard. | +| **Certificate errors** | Confirm the AP trusts the RADIUS certificate and the AAA trusts the RadSec client certificate. | +| **Clients fail to connect** | Check Passpoint parameters; verify device support for Passpoint; confirm Helium AAA approves the request. | + +## Notes + +- Juniper Mist does not list Helium as a Passpoint Operator. Use preset Passpoint Operator + configurations only after receiving approval from the Helium Plus team. diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-meraki.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-meraki.mdx new file mode 100644 index 000000000..6d212627d --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-meraki.mdx @@ -0,0 +1,228 @@ +--- +id: helium-plus-meraki +title: Meraki Conversion Guide +pagination_label: Meraki Conversion Guide +sidebar_label: Meraki +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-meraki +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +## Prerequisites + +- Meraki system must be running + [14.0](https://documentation.meraki.com/General_Administration/Firmware_Upgrades/Cisco_Meraki_Firmware_FAQ) + or later. +- Guide assumes the network is using an on-prem Meraki MX Controller. +- Meraki system has AP(s) linked to the MX Controller. +- Meraki system has basic traffic routing working with existing SSID(s). +- An Intel-based host is required in the network to run the + [RadSecProxy](https://github.com/novalabsxyz/radsec-proxy) container. + +# High Level Steps + +1. Deploy RadSecProxy container and record IP address of host +2. Build Meraki Helium Passpoint SSID + 1. Build a new SSID + 2. Configure SSID to use RADIUS + 3. Build Hotspot 2.0 Profile + +# Deploy RadSecProxy Container + +RADIUS messages used to authenticate users and for session accounting are transmitted unsecured and +over UDP by default. By directing these messages internally in your secure network to a RadSecProxy, +the UDP is then converted to a TLS protected TCP connection to the Helium Network core AAA servers. + +## Prerequisites + +- An intel based machine with Docker installed. +- The intel based machine has a private IP in your network reachable from your Meraki Mobility + Controller +- ACLs or Firewalls allow Meraki Mobility Controller and Docker Container to communicate UDP on port + 1812 and 1813 +- ACLs or Firewalls allow container/host to reach the internet on TCP ports 2083 and 3802\. + +## Container Deployment + +1. Un-zip and untar the `Helium_RadSec_Docker.tar.gz` file into the directory of your choice on the + host machine. This will unpack the following items: + 1. `Dockerfile` \- The docker instructions on how to build the container + 2. `Radsecproxy.conf` \- The radsecproxy config file is pre-populated to connect to Helium + Network AAA servers + 3. `docker-compose.yml` \- File to start and stop the container as a daemon. + +```bash +tar -xvzf Helium_RadSec_Docker.tar.gz +``` + +2. Into the same directory copy the 3 certificates obtained from Helium Network + 1. ca.pem \- the root CA certificate + 2. cert.pem \- the user certificate + 3. key.pem \- the key file matched to the certificate +3. Start the container using: + +```bash +sudo docker compose up -d +``` + +4. If/when needed, stop the container using: + +```bash +sudo docker compose down +``` + +# Build Meraki Helium Passpoint SSID + +The following steps will configure your Meraki system to broadcast an SSID with the needed Passpoint +and RADIUS configurations to support Helium Mobile user offload. + +To start login to your Meraki Dashboard in your browser, this will be our starting point for all +major steps below + +
+ +
+
+ +:::note + +In the following steps we will only mention mandatory fields to set. Most windows will have many +other parameters with default values set. Leave any unmentioned parameter at it's default value. + +::: + +## Build a new SSID + +1. Click on **Wireless** and then **SSID** in the left menu column + +
+ +
+ +2. Look for a “**Unconfigured SSID X**” +3. Click on **rename** +
+ +
+4. Enter “**Helium**” +5. Select **Enabled** +6. Click **Save Changes** + +## Configure Helium SSID for RADIUS Access Control + +:::note + +Helium is aware that Meraki has some native support for RadSec. Unfortunately, the Meraki +implementation is not scalable for a network like Helium. Meraki builds a CA certificate specific to +each group of APs and ask for it to be loaded on the AAA. That does not scale and there is no way to +load the client certificate and key Helium produces during onboarding into the Meraki RadSec client. +So for now the guide below uses our RadSecProxy container and plain RADIUS configuration on the +Meraki devices. + +::: + +1. Click **Edit Settings** +2. Under **Security** heading toggle the circle **Enterprise with** +3. Select **my RADIUS Server** +
+ +
+4. Scroll down to **RADIUS** and click the arrow on the right to expand +5. Click add server and add the following configurations + 1. Enter IP Address: **\** Port: **1812** Secret: + **mysecret**. Click **Done**. + 2. Add a second server if desired for HA redundancy. +
+ +
+6. Repeat those steps to add the same server to the RADIUS Accounting Servers list using **port + 1813\.** +
+ +
+7. Select the check box next to **Radius CoA Support** +
+ +
+8. Click on the arrow to expand the **Advanced RADIUS settings** section +9. Change the number 1 drop down for **NAS ID** to **Custom** and enter the NAS-ID you got during + onboarding +10. Click the **×** to remove number 2 in that list which says **SSID Number** +
+ +
+11. Click **Save** + +## Build Hotspot 2.0 Config + +1. Click on **Wireless** and navigate to **Hotspot 2.0** +
+ +
+2. Change the toggle for **Hotspot 2.0** to **Enabled** +3. Enter **Operator Name** to be “**Helium**” +4. Enter **Venue Name** to be the street address of your location +5. Choose the best fitting **Venue Type** from the drop down +6. Choose **Chargeable public network** from the drop down +7. In domain list enter both **FreedomFi.com** and **Hellohelium.com** +8. Click **Create Realm** + 1. Enter **freedomfi.com** as the name + 2. Select **Add EAP Method** + 3. Select **Method ID** to be **13 EAP-TLS** + 4. Select **Authentication Methods** to be **Certificate** under + 5. Click **Create realm** +
+ +
+9. Repeat for realm name **Hellohelium.com** with matching settings. +10. Final Hotspot 2.0 settings should look like this: +
+ +
+11. Click **Save Changes** diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-mikrotik.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-mikrotik.mdx new file mode 100644 index 000000000..c6810f1ed --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-mikrotik.mdx @@ -0,0 +1,171 @@ +--- +id: helium-plus-mikrotik +title: MikroTik Conversion Guide +pagination_label: MikroTik Conversion Guide +sidebar_label: MikroTik +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-mikrotik +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +## Prerequisites + +- **RouterOS v7** device running CAPsMAN 2 (tested on **7.18.1**) +- [RadSecProxy](https://github.com/novalabsxyz/radsec-proxy) container running in your network. +- For self-serve, CLI wallet prepared for onboarding: + [https://docs.helium.com/mobile/helium-plus-onboarding/](https://docs.helium.com/mobile/helium-plus-onboarding/) +- For Helium Plus, certificates ( `ca.pem`, `cert.pem`, `key.pem` ) supplied by the Helium Plus team + and copied into the RadSecProxy directory. +- UDP ports **1812/1813** open between MikroTik and the RadSecProxy host. +- Bridge interface already created and used as the datapath for Wi-Fi traffic. + +## High-Level Steps + +1. Deploy the RadSecProxy container and note its IP. +2. Create a **RADIUS** profile that points to the RadSecProxy. +3. Build a **Wi-Fi configuration profile** for the Helium Passpoint SSID. +4. Apply the profile to an interface (or create a virtual AP). +5. Verify operation and troubleshoot, if necessary. + +### 1. Deploy RadSecProxy + +At time of writing, RouterOS does not support RadSec natively, download the +[RadSecProxy](https://github.com/novalabsxyz/radsec-proxy) container and run it in a Docker. + +1. Un-zip and untar the `Helium_RadSec_Docker.tar.gz` file into the directory of your choice on the + host machine. This will unpack the following items: + 1. `Dockerfile` \- The docker instructions on how to build the container + 2. `Radsecproxy.conf` \- The radsecproxy config file is pre-populated to connect to Helium + Network AAA servers + 3. `docker-compose.yml` \- File to start and stop the container as a daemon. + +```bash +tar -xvzf Helium_RadSec_Docker.tar.gz +``` + +2. Into the same directory copy the 3 certificates obtained from Helium Network + 1. `ca.pem` \- the root CA certificate + 2. `cert.pem` \- the user certificate + 3. `key.pem` \- the key file matched to the certificate +3. Start the container using: + +```bash +sudo docker compose up -d +``` + +4. If/when needed, stop the container using: + +```bash +sudo docker compose down +``` + +Once the container is running, make sure you can **ping** it from the MikroTik router. + +### 2. Add a RADIUS Profile + +In **RADIUS** add a new entry: + +| Field | Value | +| ----------------------- | ------------------- | +| **Comment** | `Helium AAA` | +| **Service** | `wireless` | +| **Address** | _IP_of_RadSecProxy_ | +| **Protocol** | `udp` | +| **Secret** | `mysecret` | +| **Authentication Port** | `1812` (default) | +| **Accounting Port** | `1813` (default) | +| **Timeout** | `300 s` | +| **Enabled** | ☑︎ | + +
+ +
+ +### 3. Create a AP Configuration Profile + +Navigate to **WiFi → Configuration** and click **Add (+)**. + +#### Configuration Tab + +| Field | Value | +| ----------- | ------------------ | +| **Name** | `helium-passpoint` | +| **Enabled** | ☑︎ | +| **Mode** | `ap` | +| **SSID** | `Helium` | + +#### Channel Tab + +Select the band and channel width appropriate for your deployment. Leave **Frequency** blank for +automatic channel selection. + +#### Security Tab + +Check WPA2 or WPA3 EAP under Authentication Types. + +#### EAP Tab + +Check EAP Accounting to be enabled. + +#### AAA Tab + +Paste a MAC address of the WAN interface (usually ether1 by default) from menu Interfaces. Or enter +the NAS-ID provided during Helium Plus onboarding. + +
+ +
+ +#### Datapath Tab + +| Setting | Value | +| ---------- | -------------------------------------- | +| **Bridge** | `bridge1` (or the bridge used for LAN) | + +#### Interworking Tab + +Fill in as shown: + +
+ +
+ +### 4. Attach the Profile to an Interface + +Assign the configuration profile to the desired WiFi interface. Either click **New** (this will +create a virtual AP) or **Edit** an existing master interface. + +Make sure to select a correct 5/2.4 interface according to the band defined in the configuration +profile. + +Enable it on the General tab. + +
+ +
+ +### 5. Verification + +- Confirm that the `Helium` SSID is visible. +- In logs, watch for successful `radius` authentication messages. +- On the RadSecProxy host use `docker logs -f radsecproxy` to ensure TCP/TLS sessions are + established. +- On a compatible handset, ensure automatic connection with the carrier profile. diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-onboarding.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-onboarding.mdx new file mode 100644 index 000000000..07f0b759f --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-onboarding.mdx @@ -0,0 +1,120 @@ +--- +id: helium-plus-onboarding +title: Onboard Converted Networks +pagination_label: Onboard Converted Networks +sidebar_label: WiFi Conversion Onboarding +description: Helium Network Conversion Onboarding Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-onboarding +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + + +
+
+ +WiFi networks onboarded to Helium are eligible to earn HNT for handling carrier traffic. + +At this time, only [Helium Mobile](https://hellohelium.com/) traffic is rewardable on networks +onboarded through self-serve tooling. If you are interested in handling other carrier traffic +through your commercial or other high-traffic deployment, please use the +[Helium Plus](https://www.helium.com/plus) program. + +## Considerations for Entity Creation + +Each Mobile network onboard will represent a single pin on the coverage map, regardless of how many +Hotspots (APs) it may contain. The entity representing this network will also hold any rewards +earned from data transfer until they are claimed. When considering entity creation, try to constrain +the scope of the onboarded deployment to the size of one building or smaller. + +Self-serve onboards will be counted as a single Hotspot in Helium Network metrics. Networks +onboarded through the Helium Plus program carry additional metadata which represents the total +number of Hotspots in a given deployment. For large network deployments, please use the Helium Plus +program. + +## Prepare Wallet + +Download and configure the [Helium Wallet CLI](/wallets/cli-wallet) with a new or existing Solana +account. The following steps require Helium Wallet CLI `2.1.1` or newer. + +Onboarding a new WiFi Network requires a token fee per network or location. Ensure the account has +these minimum balances. + +| Token | Amount | | +| ----------------------------------- | --------------- | -------------------------------------------- | +| [Data Credits](/tokens/data-credit) | 200,000 ($2.00) | Mobile entity onboarding cost. | +| [SOL](/tokens/sol-token) | ~0.005 | Solana blockchain fees and NFT creation.[^1] | + +[^1]: + _At the time of writing, onboarding required 0.003778 SOL; however, the fee will fluctuate based + on network conditions._ + +## Create and Onboard Networks + +The process for converting a network begins by generating a Hotspot key and then creating and +onboarding a Rewardable Entity NFT using the Helium Wallet CLI. + +Create the Hotspot key by creating an onboarding token: + +```sh title="Generate an onboarding token." +helium-wallet hotspots add mobile token +``` + +The `token` command will return a response looking like this: + +```json {6} title="Example generated entity and token." +{ + "hotspot": { + "key": "14WaYzPtgvs3sranGNBxTSj9d4f36J6c6mjRWKqRwDr8NirmrmL", + "name": "recumbent-menthol-porcupine" + }, + "token": "CmUSIQHOP/T3SOWXnjrAZXyJ5CWmQChywBmpyigcLjNVr+nMJSONJexLDs1m61BLVetCqcXla0DmOWZVUORYBn4ya9gv0jy8pz8Av4JgnZzrJlp/9bskEZ4lIYjQVObuwh+54DlTAQ==" +} +``` + +Use the "token" value (highlighted above) along with the Hotspot's physical latitude and longitude +to assert its location to the network. A utility such as [latlong.net](https://www.latlong.net/) is +helpful for looking up coordinates. + +```sh title="Onboard the Rewardable Entity (Hotspot)" +helium-wallet hotspots add mobile onboard --lat=37.779930 --lon=-122.387906 --commit +``` + +The command prompts for the CLI wallet password, signs the transaction, and submits it to the +blockchain. A result will print as a successful transaction hash. + +If any errors are returned during the onboarding, double check token balances and retry the +onboarding transaction. + +## Hotspot RADIUS Certificates + +The last step is to create the certificates for the Hotspot. Certificates are created uniquely for +each onboard. + +```sh +helium-wallet hotspots add mobile cert --nas-id xx:xx:xx:xx:xx --address "South Beach Yacht Club, 899 2nd St, San Francisco, CA 94107" +``` + +`` is the key from first step (e.g. `14Wa...mrmL`). + +`--nas-id` must match the NAS-ID being broadcast from the SSID. Use a MAC address from the onboarded +network as the NAS-ID. + +`--address` should best represent the installed location of the network. If a business, include the +business name. If residential, a street address is sufficient. + +This command will create the Hotspot certs and save them in the active directory. + +```json title="Certificate response delivered from the CLI command." +{ + "expiration": "2028-02-21T23:10:51Z", + "private_key": "14WaYzPtgvs3sranGNBxTSj9d4f36J6c6mjRWKqRwDr8NirmrmL.pk", + "certificate": "14WaYzPtgvs3sranGNBxTSj9d4f36J6c6mjRWKqRwDr8NirmrmL.cer", + "ca_chain": "data-only.ca" +} +``` + +When the `cert` command is executed with both the NAS-ID and address, any existing certificates for +the specified Hotspot are retrieved. Should certificate files already exist in the active directory, +the command returns an error; the `--force` flag may be used to overwrite existing files. diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-radsecproxy.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-radsecproxy.mdx new file mode 100644 index 000000000..f96f6691b --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-radsecproxy.mdx @@ -0,0 +1,126 @@ +--- +id: helium-plus-radsecproxy +title: RadSecProxy for Converted Networks +pagination_label: RadSecProxy for Converted Networks +sidebar_label: RadSecProxy +description: RadSecProxy for Converted Networks Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-radsecproxy +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + + +
+
+ +# RadSecProxy + +radsecproxy is a generic open source RADIUS proxy that in addition to usual RADIUS UDP transport, +also supports TLS (RadSec) + +The project can be found at [https://radsecproxy.github.io/](https://radsecproxy.github.io/) + +Helium makes a preconfigured and containerized version of this project available at +[https://github.com/novalabsxyz/radsec-proxy](https://github.com/novalabsxyz/radsec-proxy) + +## Hardware Requirements + +RadSecProxy is designed to be lightweight at not require many hardware resources as it scales. Below +are suggested hardware specs that will support small (10's of WiFi APs) to medium (up to 1000 APs) +deployments. + +- Quad core CPU e.g. Intel i5 or better +- 2 GB RAM minimum, 4GB for bigger deployments +- 1.25 GB free disk space +- Docker supporting OS (Windows, MacOS, Linux) +- 1 Gbps Ethernet port +- RadSecProxy typically uses ports 2083 and 443 for RadSec communication. +- Ensure these ports are open and accessible outbound from the proxy. +- If using RADIUS/TLS, also ensure ports 1812 (UDP/TCP) and 1813 (UDP for accounting) are open. + +# Local Deployment Options + +The typical deployment used by converted Helium networks is to deploy an instance of RadSecProxy +locally within the deployer controlled network. This can take two forms depending on the how the +deployer controlled network is structured. + +## Secured Remote Sites - Local + +
+ +
+
+ +In this deployment model the Deployer has existing secure links between it's remote sites and a +central office where common infrastructure is housed. In this case, the RADIUS from WiFi APs at the +remote sites is secured back to central office where an instance of RadSecProxy can be deployed. +This one instance of RadSecProxy can then be used by all the APs in remote sites 1 - 4. + +## Unsecured Remote Sites - Local + +
+ +
+
+ +In this deployment model the Deployer has multiple remote sites, each of which are connected +directly to the internet with no secure link back to a central office location. In this scenario an +instance of RadSecProxy can be deployed locally at each site to securely proxy RADIUS traffic to +Helium over the open internet. + +# Cloud Deployment Options + +If the deployer is unable to deploy an instance of RadSecProxy locally using the options above, +another option is to purchase access to a cloud instance of RadSecProxy hosted by Helium. In this +deployment model each deployer site must be connected via IPsec VPN to the count instance to ensure +safe transport of unencrypted RADIUS to the proxy. + +## Secured Remote Sites - VPN + +
+ +
+
+ +In this deployment model the Deployer has existing secure links between it's remote sites and a +central office where common infrastructure is housed. However the deployer is unable to deploy a +local instance of RadSecProxy. Instead the Deployer can purchase access to a cloud hosted instance +of RadSecProxy managed by Helium. The deploy then establishes an IPsec based VPN link to the cloud +RadSecProxy. + +## Unsecured Remote Sites - VPN + +
+ +
+
+ +In this deployment model the Deployer has multiple remote sites, each of which are connected +directly to the internet with no secure link back to a central office location. In this scenario the +deployer can purchase access to a cloud hosted instance of RadSecProxy managed by Helium. Each site +is then connected to the cloud instance using an IPsec VPN to secure the link. diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-ruckus.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-ruckus.mdx new file mode 100644 index 000000000..2170b44b2 --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-ruckus.mdx @@ -0,0 +1,347 @@ +--- +id: helium-plus-ruckus +title: Ruckus Conversion Guide +pagination_label: Ruckus Conversion Guide +sidebar_label: Ruckus +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-ruckus +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +## Prerequisites + +- Ruckus SmartZone must be running version 6.1 or later +- Guide assumes SmartZone Ruckus Mobility Controller +- Ruckus system has AP(s) linked to your SmartZone Controller +- Ruckus system has basic traffic routing working with existing SSID(s) + +# High Level Steps + +1. Build Ruckus Helium Passpoint SSID + 1. Install Certs + 2. Setup RadSec Proxy + 3. Configuration HS2.0 Profile + 4. Build New SSID + +# Build Ruckus Helium Passpoint SSID + +The following steps will configure your Ruckus system to broadcast an SSID with the needed Passpoint +and RADIUS configurations to support Helium Mobile user offload. + +To start login to your Ruckus Dashboard in your browser, this will be our starting point for all +major steps below + +
+ +
+
+ +:::note + +In the following steps we will only mention mandatory fields to set. Most windows will have many +other parameters with default values set. Leave any unmentioned parameter at it's default value. + +::: + +## Install RadSec Certs: + +1. Click on **Administration\>System\>Certificates\>SZ Trusted CA Certificates/Chain(External)** + +
+ +
+
+ +2. Click **Import** +3. Load the **interim.pem, ca.pem,** and **root.pem** certificates from your local directory. + +
+ +
+
+ +4. Click **Validate** then **OK** +5. Next on sub-menu bar select **SZ as Client Certificate** tab + +
+ +
+
+ +6. Click **import** +7. Enter **Name** as **Helium_radsec_client** +8. Add **cert.pem** and **key.pem** +9. Click **Validate** then **OK** + +
+ +
+
+ +## Configure RadSec Authentication Proxy: + +1. Click on **Security\>Authentication\>Proxy(SZ Authenticator)** + +
+ +
+
+ +2. Click on **Create** +3. Fill in **Helium_Radsec** as **Name** +4. Click the toggle **Encryption** to **TLS On** +5. Enter **CN/SAN Identity** as **radius.stage.wifi.freedomfi.com** +6. Select **Client Certificate** from drop down to be **Helium_radsec_client** +7. Enter **IP Address/FQDN** to be **52.37.147.195** +8. Ensure **Port** is **2083** + +
+ +
+
+ +9. Click **OK** + +## Configure RadSec Accounting Proxy: + +1. Click on **Security\>Accounting\>Proxy** + +
+ +
+
+ +2. Click **Create** +3. Enter **Name** as **Helium_radsec_acct** +4. Enable the toggle for **Encryption** to **ON TLS** +5. Enter **CN/SAN Identity** as **radius.stage.wifi.freedomfi.com** +6. Select **Client Certificate** from drop down to be **Helium_radsec_client** +7. Enter **IP Address/FQDN** to be **52.37.147.195** +8. Ensure **Port** is **2083** + +
+ +
+
+ +9. Click **OK** + +## Build Hotspot2.0 Profile: + +1. Click **Services\>Hotspots\&Portals\>Hotspot 2.0** +2. Under **Wi-Fi Operator** click **Create** + +
+ +
+
+ +3. Configure: + 1. **Name** as **Helium_Operator** + 2. Enter **Domain Name** as **FreedomFi.com** and click **\+ADD** + 3. Repeat for **Domain Name** as **Hellohelium.com** + 4. Enter **Friendly Name** as **Helium** and click **\+ADD** +4. Click **OK** +5. Under **Identity Provider** click **Create** + 1. Fill in **Name** as **Helium_IDP** + 2. In the **Realms** section, enter **Name** as **Hellohelium.com** and click **\+Add** + 3. In the drop down for **EAP Method** select **EAP-TLS** and click Create, + +
+ +
+
+ +4. Choose **Auth Info** to be **Credential Type** and **Auth Type** to be **Certificate** and click + **OK.** + +
+ +
+
+ +5. Click **\+Add** +6. Repeat steps 5.b-5.e for Realm **FreedomFi.com** with all matching settings. + +
+ +
+
+ +6. Click Next +7. Leave online signup disabled, click Next + +
+ +
+
+ +8. In **Authentication** for both **no-match** and **unspecified**: + 1. Click on the Realm name to Select + 2. Click configure + 3. Choose Helium_Radsec from drop down + +
+ +
+
+ +9. When done you should see this: + +
+ +
+
+ +10. Repeat these steps for Accounting for both **no-match** and **unspecified**: + +
+ +
+
+ +11. Config should match this screen + +
+ +
+
+ +12. Review and make sure it matches below + +
+ +
+
+ +13. Click OK. + +## Build a new SSID + +1. Click on **Network\>Wireless LANS** +2. Select your Zone +3. Lick on **Create** +4. Name **Helium** +5. Select **Authentication Type** to be **Hotspot2.0 Access** +6. Under **Encryption** for **Method Choose WPA3** +7. **Under Hotspots 2.0 Profile** in **Hotspot 2.0 profile** click **\+** + 1. For **Name** enter **Helium** + 2. For **Operator** select **Helium_operator** + 3. For **IDP** select **Helium_IDP** click **\+Add** + 4. **Advanced** + 5. Set **Access Network Type** to **Chargeable Public Network** + 6. Select **IPv4 Double NATed private address** (or applicable to your network) + +
+ +
+
+ +8. Click **OK** and you should see configuration like the image below. + +
+ +
+
+ +9. Under **RADIUS Options** + 1. **NAS-ID \-\> User-Defined \>** enter your NAS-ID per Helium onboarding spreadsheet. + 2. For **Called Station ID** set to **AP MAC** + 3. **Enable** the toggle for **Single Session ID accounting** + +
+ +
+
+ +10. Click OK diff --git a/docs/network-mobile/helium-plus-guides/helium-plus-ubiquiti.mdx b/docs/network-mobile/helium-plus-guides/helium-plus-ubiquiti.mdx new file mode 100644 index 000000000..7dd60a3ae --- /dev/null +++ b/docs/network-mobile/helium-plus-guides/helium-plus-ubiquiti.mdx @@ -0,0 +1,216 @@ +--- +id: helium-plus-ubiquiti +title: Ubiquiti Conversion Guide +pagination_label: Ubiquiti Conversion Guide +sidebar_label: Ubiquiti +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-ubiquiti +--- + + +
+
+ +import useBaseUrl from '@docusaurus/useBaseUrl' + +Data-Only Mobile configuration requires the Passpoint protocol. Please ensure your Ubiquiti network +is using +[UniFi Network Controller version 8.4.54](https://community.ui.com/releases/UniFi-Network-Application-8-4-59/d3ba4443-ad36-4566-b1e6-2d21d8b4f225) +or higher and +[AP firmware version 6.6.77](https://community.ui.com/releases/UniFi-Access-Point-6-6-77/1368d5eb-f4d7-4861-9eae-a317e2bebce9) +or +[AP firmware version 7.0.66](https://community.ui.com/releases/UniFi-Access-Point-7-0-66/edfb7cb4-c629-4e3b-a362-549eec2e0e1b) +or higher, depending on hardware release track. + +## Obtain RadSec Certificates + +Each onboarded network requires a unique NAS-ID. For Ubiquiti networks, it is recommended to use the +MAC address of the network controller as the NAS-ID. + +Run the UniFi network controller locally or log into the cloud +[UniFi Site Manager](https://unifi.ui.com/). + +Navigate to **UniFi Devices**, choose your **Network Controller** and copy the **MAC Address**. + +
+ +
Retrieve the MAC address of the network controller.
+
+
+ +Use this NAS-ID in the [WiFi Conversion Onboarding](/mobile/helium-plus-onboarding) flow and return +to this guide after the network is onboarded and certificates have been delivered. + +:::important If updating from older RadSec certificates: + +If early access certificates were previously deployed on the network, a Ubiquiti bug may prevent new +certificates from propagating. +Restart all APs on the network after updating the certificates, and the new certificates should be +applied. + +::: + +## Configure UniFi Network Controller + +After retrieving certificates, configuring the network controller for Passpoint is a two-part +process. First, create the RADIUS profile, then apply the profile to a newly created WiFi SSID +called 'Helium'. + +
+ +
UniFi Settings screen within the UniFi Site Manager.
+
+ +### Create a RADIUS Profile + +Configure a TLS connection to Helium Cloud AAA server (aka Radiator), which performs Authentication, +Authorization, and Accounting for the end customers. Enabling RADIUS communication over TLS (RadSec) +increases the level of security for authentication that is carried out across the cloud network. + +In the sidebar, choose **Settings**, then **Profiles**, then **RADIUS**: + +
+ +
Open RADIUS profiles.
+
+
+ +Press **Create New**. + +Specify a profile name, for example "**Helium RadSec**". + +Configure RADIUS properties: + +
+ +
Configure RADIUS settings.
+
+
+ +1. Under **Radius Settings**, check the **TLS** box. + 1. Press **Upload** next to **Client Certificate**, choose the path to `cert.pem`. + 2. Press **Upload** next to **Private Key**, choose the path to `key.pem`. Keep Private Key + Password empty. + 3. Press **Upload** next to **CA Certificate**, choose the path to `ca.pem`. + +
+ +
Load the certificates from the network onboarding.
+
+
+ +2. Specify **Authentication Servers**: + + Add these three servers: + + 1. Enter IP Address: `52.37.147.195` Port: `2083` Shared Secret: `radsec`. Click **Add**. + 2. Enter IP Address: `44.229.62.214` Port: `2083` Shared Secret: `radsec`. Click **Add**. + 3. Enter IP Address: `44.241.107.197` Port: `2083` Shared Secret: `radsec`. Click **Add**. + +3. Check the **Accounting** checkbox. RADIUS Accounting Server settings will appear. + +4. Specify the following Accounting Servers: + + 1. Enter IP Address: `52.37.147.195` Port: `2083` Shared Secret: `radsec`. Click **Add**. + 2. Enter IP Address: `44.229.62.214` Port: `2083` Shared Secret: `radsec`. Click **Add**. + 3. Enter IP Address: `44.241.107.197` Port: `2083` Shared Secret: `radsec`. Click **Add**. + +5. Check **Interim Update Interval** box. +6. Specify **Interim Update Interval** with **300 Sec**, standard for the Helium Network. + +Click **Apply Changes** to create the new RADIUS Profile. + +### Create The Helium SSID + +Navigate to the **Settings** in the sidebar, choose **WiFi**, then press **Create New** + +
+ +
Create a new WiFi network.
+
+
+ +Configure settings for the new network. + +1. Set the **Name** of the SSID to `Helium`. Leave the password blank. +2. Set **Advanced** to **Manual**. +3. Set **Hotspot 2.0** to `Passpoint`. Passpoint settings will appear below. +4. Specify **Venue Name** to a name for your site. +5. Specify **Venue Type** with the option that best matches your site. +6. Set **Network Type** to `Chargeable Public Network` +7. Set **IP Address Type Availability**: + 1. IPv4 to `Double NATed private IPv4`. + 2. IPv6 to `Unavailable` +8. Add **NAI Realms** with the following two entries: + 1. Name: `freedomfi.com` EAP Method: `EAP-TLS` Sub-Methods: `Certificate`. + 2. Name: `hellohelium.com` EAP Method: `EAP-TLS` Sub-Methods: `Certificate`. +9. Add **Domain List**: `freedomfi.com` or leave your home domain, if any. Press **Add**. + +
+ +
Create a new WiFi network.
+
+
+ +10. Set **Security Protocol** to: `WPA3 Enterprise` + +11. Enter the NAS-ID used during onboarding to Helium in the **Custom** field of **NAS-ID**. + +
+ +
Identify the NAS ID using the MAC address.
+
+
+ +12. Choose **Radius Profile**: `Helium Radsec` +13. Click "Client Device Isolation" to enable secure networking. See this Ubiquiti guide on + [network and client isolation](https://help.ui.com/hc/en-us/articles/18965560820247-How-to-Implement-Network-and-Client-Isolation) + for more information. + +Press **Add WiFi Network**. + +Your Helium SSID is all set up. Verify access by forgetting the existing network on your device and +connecting to the new network using a device with a supported carrier, such as +[Helium Mobile](https://hellohelium.com). + +## Video Walkthrough + +import { YouTube } from 'mdx-embed' + + diff --git a/docs/network-mobile/helium-plus-mobile.mdx b/docs/network-mobile/helium-plus-mobile.mdx new file mode 100644 index 000000000..5446a7468 --- /dev/null +++ b/docs/network-mobile/helium-plus-mobile.mdx @@ -0,0 +1,65 @@ +--- +id: helium-plus-mobile +title: 'Convert WiFi Networks' +pagination_label: Convert WiFi Networks +sidebar_label: Introduction +description: Helium Network Conversion Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-mobile +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + + +
+
+ +The network conversion process activates Passpoint-enabled hardware for cellular network data +transfer on Helium. In the cellular industry, these are known as 'Brownfield' deployments – where +existing hardware is configured to operate a new network. Converted networks continue to work with +existing SSIDs. The Helium Network configurations are additive to other configurations and do not +impact existing network function. + +Using existing infrastructure reduces costs, making it a practical solution for venue owners. When +deciding between deploying a new Hotspot (Greenfield) or converting an existing network, consider +Proof of Coverage rewards, deployment costs, and coverage needs. Both options can complement each +other in the Helium Mobile network. + +## Getting Started + +For compatible networks, integrating with Helium Mobile is simple. Start by reviewing the +manufacturer-specific guides or refer to the generic deployment reference for guidance with other +manufacturers: + +- [General Conversion Guide](/mobile/helium-plus-generic) +- [Helium Plus Security FAQ](/mobile/helium-plus-security-faq) — Security considerations and best practices for converted networks + +## Deployment Requirements + +Existing WiFi networks must have Passpoint-enabled access points, which are typically supported by +manufacturers like Ubiquiti, Cisco, and Aruba. Additionally, these access points need to integrate +with the Helium MOBILE Network to handle traffic and qualify for data transfer rewards. This +integration involves network-level configurations for authentication, authorization, and accounting. + +### Enterprise Network Considerations + +Fleets are characterized on Helium with a public on-chain key which is paired with the RADIUS +certificates. The entities created from the self-serve tooling expect each pubkey/cert pair to be +attached to a single NAS-ID. Via the [Helium Plus](http://helium.com/plus) program, multiple NAS-IDs +may be onboarded to a single certificate set. + +### RadSecProxy Deployment options + +RADIUS is a UDP protocol meant for use inside an operators secure network. RADIUS in standard form +is not meant to traverse the open internet as this would expose private user identity data to the +open internet. To address this the industry created a RADIUS over TLS protocol called RadSec. Using +RadSec RADIUS contents are encrypted and packaged into a TCP session which makes it suitable to +traverse the open internet safely. + +If your WiFi OEM does not natively support RadSec in the network you want to convert, deployers must +choose one of two main options: + +- Deploy local RadSecProxy within the deployer controlled secure domain +- Establish a secure IPsec VPN to the Helium hosted cloud RadSecProxy instance + +[More details about RadSecProxy can be found here.](/mobile/helium-plus-radsecproxy) diff --git a/docs/network-mobile/helium-plus-security-faq.mdx b/docs/network-mobile/helium-plus-security-faq.mdx new file mode 100644 index 000000000..cd8f09812 --- /dev/null +++ b/docs/network-mobile/helium-plus-security-faq.mdx @@ -0,0 +1,146 @@ +--- +id: helium-plus-security-faq +title: WiFi Conversion Security FAQ +pagination_label: WiFi Conversion Security FAQ +sidebar_label: WiFi Conversion Security FAQ +description: Security considerations and best practices for converted WiFi networks on Helium +image: https://docs.helium.com/img/link-image.png +slug: /mobile/helium-plus-security-faq +--- + +Converted (brownfield) WiFi networks use existing infrastructure to provide Helium Mobile +connectivity. While Helium manages several security features centrally, deployers retain +responsibility for network-level security at their sites. This guide explains the security model and +best practices for brownfield deployments. + +## Security Feature Comparison + +| Feature | Greenfield (HMH) | Brownfield | +| ------------------------- | ------------------ | -------------------------- | +| Protocol (WPA3) | ✅ Helium enforced | ✅ Helium enforced | +| Passpoint Authentication | ✅ Helium enforced | ✅ Helium enforced | +| Certificate Lifecycle | ✅ Helium managed | ✅ Helium managed | +| RADIUS Transport (RadSec) | ✅ Helium provided | ✅ Helium provided | +| WAN Traffic Rejection | ✅ Helium enforced | ⚠️ Customer responsibility | +| Client Isolation | ✅ Helium enforced | ⚠️ Customer responsibility | +| VLAN Isolation | — N/A (single AP) | ⚠️ Customer responsibility | + +## Features Managed by Helium + +### WPA3 and Passpoint + +Helium enforces WPA3 and Passpoint with EAP-TLS for both greenfield and brownfield deployments. The +authentication flow uses certificate-based EAP-TLS, ensuring strong encryption and mutual +authentication between client devices and the network. + +### Certificate Lifecycle + +Helium manages the certificate lifecycle for RADIUS authentication. Certificates are generated +during onboarding and must be installed on your RadSec proxy or WiFi controller. Certificate +expiration dates are provided at creation time; plan for renewal before expiration. + +### RADIUS Authentication + +Helium operates RADIUS servers that authenticate Passpoint clients. Your network sends +authentication requests over RadSec (RADIUS over TLS) to Helium's infrastructure. Both deployment +options—local RadSec proxy and Helium-hosted RadSec with VPN—ultimately deliver RADIUS traffic to +Helium over TLS. However, the encryption boundaries differ: a local proxy encrypts RADIUS at your +site, while the hosted option relies on an IPsec VPN tunnel to carry unencrypted RADIUS to the cloud +proxy, which then forwards over TLS. + +## Customer Responsibilities and Best Practices + +### VLAN Isolation + +Segment Passpoint traffic on a dedicated VLAN or subnet. Do not mix Helium Mobile traffic with +internal corporate or guest networks. This limits blast radius if a client is compromised and +prevents lateral movement between network segments. + +### Reject WAN Traffic + +Configure your network so that Passpoint clients cannot reach your internal LAN or WAN resources. +Passpoint users should only have internet access through the designated VLAN. Use firewall rules to +block access to internal IP ranges and sensitive services. + +### Client Isolation + +Enable client isolation (also called AP isolation or wireless client isolation) on the Passpoint +SSID when supported by your hardware. This prevents connected devices from communicating with each +other, reducing the risk of device-to-device attacks. + +## RadSec: Securing RADIUS Authentication + +### Why Standard RADIUS Is Not Suitable + +RADIUS is a UDP protocol designed for use inside an operator's secure network. Standard RADIUS +traffic is unencrypted and contains user identity data. Sending RADIUS over the open internet would +expose this sensitive information. For brownfield deployments that must reach Helium's cloud RADIUS +servers, a secure transport is required. + +### RadSec (RADIUS over TLS) + +The industry solution is RadSec—RADIUS encapsulated in TLS. RadSec encrypts RADIUS messages and runs +over TCP, making it suitable for traversing the internet. Helium requires RadSec for all brownfield +RADIUS connectivity. + +### Shared Secret Note + +When configuring RadSec to Helium's servers, you will use a shared secret (e.g., `radsec`). This +secret authenticates your proxy to Helium's RADIUS endpoints. The shared secret is used in +conjunction with TLS client certificates. Keep your certificates and configuration secure; do not +expose them in public repositories or documentation. + +### Deployment Options + +You have two main deployment options: + +1. **Local RadSec Proxy**: Deploy RadSecProxy within your secure domain. Your APs send RADIUS to the + local proxy over your internal network; the proxy encrypts and forwards traffic to Helium over + RadSec. This is the recommended approach when you have a central site or can deploy a proxy at + each remote location. + +2. **Helium-Hosted RadSec with VPN**: If you cannot run a local RadSec proxy, you can use Helium's + hosted RadSecProxy. In this case, you must establish an IPsec VPN from your network to the Helium + cloud instance. Unencrypted RADIUS must never traverse the open internet—the VPN provides the + secure tunnel. + +[More details about RadSecProxy deployment options can be found here.](/mobile/helium-plus-radsecproxy) + +### Hosted Environment Security + +If using Helium-hosted RadSecProxy, your RADIUS traffic is encrypted over the VPN. Helium operates +the RadSecProxy in a secure cloud environment. Ensure your VPN configuration uses strong +authentication and encryption (e.g., IPsec with IKEv2). + +## Brownfield Security FAQ + +### Is my existing WiFi network less secure if I convert it to Helium? + +Converting to Helium does not reduce the security of your existing network. Helium configurations +are additive. You add a Passpoint SSID and RadSec integration; your existing SSIDs and policies +remain unchanged. Follow the best practices in this guide to keep the Passpoint segment secure. + +### Do I need to use RadSec, or can I send RADIUS directly to Helium? + +You must use RadSec (RADIUS over TLS). Standard RADIUS over UDP is not supported for connectivity to +Helium's cloud. If your WiFi equipment does not support RadSec natively, deploy RadSecProxy locally +or use the VPN option with Helium-hosted RadSecProxy. + +### What happens if my RADIUS certificates expire? + +Expired certificates will cause authentication failures. Clients will not be able to connect to the +Passpoint SSID. Monitor certificate expiration dates and renew before they expire. Use the Helium +Wallet CLI to generate new certificates when needed. + +### Should I put Passpoint traffic on the same VLAN as my guest WiFi? + +No. Use a dedicated VLAN for Passpoint traffic. Isolating Passpoint from guest and internal networks +improves security and simplifies troubleshooting. Apply firewall rules to restrict Passpoint clients +to internet-only access. + +### Can I use the same NAS-ID for multiple locations? + +Each onboarded network should use a unique NAS-ID that matches the MAC address (or configured +NAS-ID) of the deployed equipment. Sharing NAS-IDs across locations can cause accounting and reward +attribution issues. For large deployments with multiple NAS-IDs, consider the +[Helium Plus](https://www.helium.com/plus) program. diff --git a/docs/network-mobile/mobilebancheck.jsx b/docs/network-mobile/mobilebancheck.jsx new file mode 100644 index 000000000..86e11d82a --- /dev/null +++ b/docs/network-mobile/mobilebancheck.jsx @@ -0,0 +1,307 @@ +import React, { useState, useEffect } from 'react' +import styles from './mobilebancheck.module.css' + +//////////////////////////// +// SUGGESTION UTILITIES // +//////////////////////////// + +function charsMatchOrCommonMistake(a, b) { + if (a === b) return true + // 0 ↔ O + if ((a === '0' && b === 'O') || (a === 'O' && b === '0')) return true + // 1 ↔ I + if ((a === '1' && b === 'I') || (a === 'I' && b === '1')) return true + return false +} + +// Compare two same-length blocks, allowing up to 1 mismatch. +// letter↔digit mismatch counts as 2. +function isCloseBlock(blockA, blockB) { + if (blockA.length !== blockB.length) return false + let mismatch = 0 + for (let i = 0; i < blockA.length; i++) { + if (!charsMatchOrCommonMistake(blockA[i], blockB[i])) { + const letterDigit = + (/[A-Z]/.test(blockA[i]) && /\d/.test(blockB[i])) || + (/\d/.test(blockA[i]) && /[A-Z]/.test(blockB[i])) + mismatch += letterDigit ? 2 : 1 + if (mismatch > 1) return false + } + } + return mismatch <= 1 +} + +//////////////////////////// +// VALIDATION + FORMATTING +//////////////////////////// + +// The final valid pattern: (AT|EC|RK|XX|YY)(I|O)\d+(?:E)?-\d{4}-\d{8} +function validateSerial(serialWithDashes) { + const validSerialRegex = /^(?:AT|EC|RK|XX|YY)(?:I|O)\d+(?:E)?-\d{4}-\d{8}$/i + return validSerialRegex.test(serialWithDashes) +} + +// Insert dashes only if final string is fully valid. +// E.g. 'ATI6241200014971' => 'ATI6-2412-00014971' +function insertDashes(str) { + const len = str.length + if (len < 5) return str + if (len < 13) { + if (len <= 8) { + return str.slice(0, 4) + '-' + str.slice(4) + } else { + const firstCount = len - 12 + if (firstCount <= 0) { + return str.slice(0, 4) + '-' + str.slice(4, 8) + (str.length > 8 ? '-' + str.slice(8) : '') + } + } + } + const mainBlockCount = len - 12 + if (mainBlockCount < 1) { + return str + } + const block1 = str.slice(0, mainBlockCount) + const block2 = str.slice(mainBlockCount, mainBlockCount + 4) + const block3 = str.slice(mainBlockCount + 4) + return block1 + '-' + block2 + '-' + block3 +} + +// Keep A–Z, 0–9, and dashes. Uppercase letters. +function stripToAllowed(str) { + return str.replace(/[^A-Z0-9-]/gi, '').toUpperCase() +} + +// For validation or suggestions, remove dashes. +function removeDashes(str) { + return str.replace(/-/g, '') +} + +// Split a raw (no-dash) string into up to 3 blocks: first slab, next 4, last 8. +function parseBlocks(str) { + const len = str.length + if (len <= 4) { + return [str, '', ''] + } else if (len <= 8) { + return [str.slice(0, 4), str.slice(4), ''] + } else { + const mainBlockCount = len - 12 + if (mainBlockCount <= 0) { + // partial scenario + return [str.slice(0, 4), str.slice(4, 8), str.slice(8)] + } + const b1 = str.slice(0, mainBlockCount) + const b2 = str.slice(mainBlockCount, mainBlockCount + 4) + const b3 = str.slice(mainBlockCount + 4) + return [b1, b2, b3] + } +} + +// Replace hyphens with spaces, then capitalize each word. +function formatHotspotName(name) { + return name + .split('-') + .map((word) => { + if (!word) return '' + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() + }) + .join(' ') +} + +export function BanCheck() { + const [bannedHotspots, setBannedHotspots] = useState([]) + const [fetchError, setFetchError] = useState(false) + + // This is the raw typed string including possible dashes. + const [typedInput, setTypedInput] = useState('') + // The displayed value. If final is valid, we show the final dashed form, else typed. + const [displayValue, setDisplayValue] = useState('') + + const [matchedHotspot, setMatchedHotspot] = useState(null) + const [suggestion, setSuggestion] = useState(null) + const [isSerialValid, setIsSerialValid] = useState(false) + + // The last known fully valid dashed string, for re-check once ban data arrives. + const [lastValidDashed, setLastValidDashed] = useState('') + + useEffect(() => { + fetch('https://helium-banned-mobile-hotspots.s3.us-west-2.amazonaws.com/banned.json') + .then((res) => res.json()) + .then((data) => { + setBannedHotspots(data) + setFetchError(false) + }) + .catch((err) => { + console.error('Error fetching banned hotspots:', err) + setBannedHotspots([]) + setFetchError(true) + }) + }, []) + + useEffect(() => { + if (bannedHotspots.length > 0 && lastValidDashed) { + const found = bannedHotspots.find( + (h) => h.serial.toUpperCase() === lastValidDashed.toUpperCase(), + ) + setMatchedHotspot(found || null) + } + }, [bannedHotspots, lastValidDashed]) + + function checkForMatch(serial) { + if (!isSerialValid) { + setMatchedHotspot(null) + return + } + const found = bannedHotspots.find((h) => h.serial.toUpperCase() === serial.toUpperCase()) + setMatchedHotspot(found || null) + } + + function handleChange(e) { + // Let user type letters, digits, or dashes. + const raw = e.target.value || '' + const allowed = stripToAllowed(raw) + + // We'll keep that as typedInput. + setTypedInput(allowed) + + // For validation, we remove user typed dashes. + const noDash = removeDashes(allowed) + + // Attempt to insert final dashes if valid. + const dashed = insertDashes(noDash) + const valid = validateSerial(dashed) + setIsSerialValid(valid) + + // If valid, show the final dashed form. Else show the user typed input. + const displayed = valid ? dashed : allowed + setDisplayValue(displayed) + + if (valid) { + setLastValidDashed(dashed) + checkForMatch(dashed) + } else { + setLastValidDashed('') + setMatchedHotspot(null) + } + + // SUGGESTION logic + setSuggestion(null) + const [userFirst, userSecond, userThird] = parseBlocks(noDash) + if (userFirst.length >= 2) { + let candidate = null + for (const hotspot of bannedHotspots) { + // remove all dashes from the hotspot's serial + const hRaw = removeDashes(stripToAllowed(hotspot.serial)) + const [hFirst] = parseBlocks(hRaw) + if (isCloseBlock(userFirst, hFirst)) { + const correctedStr = hFirst + userSecond + userThird + const correctedDashed = insertDashes(correctedStr) + if (validateSerial(correctedDashed)) { + candidate = hFirst + break + } + } + } + if (candidate && candidate !== userFirst) { + setSuggestion(candidate) + } + } + } + + function applySuggestion() { + if (!suggestion) return + + // parse the typed input (minus dashes) into blocks. + const noDash = removeDashes(typedInput) + const [userFirst, userSecond, userThird] = parseBlocks(noDash) + const correctedStr = suggestion + userSecond + userThird + + // re-build typed input with the corrected first block, but keep no dashes? + // We'll just remove all dashes, combine, and re-check. + + const dashed = insertDashes(correctedStr) + const valid = validateSerial(dashed) + + // If valid, show final. Else show user typed with a dash? + if (valid) { + setDisplayValue(dashed) + setLastValidDashed(dashed) + setIsSerialValid(true) + checkForMatch(dashed) + } else { + // put the corrected raw block back into typed input. + // user typed dashes won't necessarily match up but let's keep it simple. + const newAllowed = suggestion + userSecond + userThird + setDisplayValue(newAllowed) + setIsSerialValid(false) + setLastValidDashed('') + setMatchedHotspot(null) + } + + setTypedInput(correctedStr) + setSuggestion(null) + } + + // 1) If matchedHotspot => ban UI. + // 2) Else if isSerialValid & displayValue.length > 0 => show "valid + not banned" notice. + const showBannedUi = matchedHotspot !== null + const showValidNotice = !showBannedUi && isSerialValid && displayValue.length > 0 + + return ( +
+
+ + + +
+ + {suggestion && !showBannedUi && ( + + Did you mean {suggestion}? + + )} + + {showBannedUi && ( +
+

+ The Hotspot {matchedHotspot && formatHotspotName(matchedHotspot.name)}{' '} + is marked as permanently banned. +

+

+ Public Key:{' '} + {matchedHotspot?.public_key} +

+

+ Serial:{' '} + {matchedHotspot?.serial} +

+
+ )} + + {showValidNotice && !fetchError && ( +

This Hotspot serial appears valid and is not banned.

+ )} + + {fetchError && ( +

+ Unable to load banned Hotspot data. Please try again later. +

+ )} +
+ ) +} diff --git a/docs/network-mobile/mobilebancheck.mdx b/docs/network-mobile/mobilebancheck.mdx new file mode 100644 index 000000000..cb8a02116 --- /dev/null +++ b/docs/network-mobile/mobilebancheck.mdx @@ -0,0 +1,21 @@ +--- +id: bancheck +title: Ban Check +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /mobile/bancheck +--- + +import BrowserOnly from '@docusaurus/BrowserOnly' +import { BanCheck } from './mobilebancheck' + +Hotspots provide valuable utility, and this utility must be protected. Any device found tampering +with or attempting to falsify data will be permanently removed from the network and cannot be +reactivated. + +When buying a Hotspot, always work with trusted vendors. Use this tool to check Mobile Hotspot +serial numbers. + +
+ Loading...
}>{() => } + diff --git a/docs/network-mobile/mobilebancheck.module.css b/docs/network-mobile/mobilebancheck.module.css new file mode 100644 index 000000000..e4cf9964b --- /dev/null +++ b/docs/network-mobile/mobilebancheck.module.css @@ -0,0 +1,102 @@ +.bancheckContainer { + padding: 1rem; + width: 100%; +} + +.inputGroup { + box-shadow: 0 3px 8px -3px #00000014; + border-radius: 8px; + box-sizing: content-box; +} +.inputGroup:focus-within { + outline: 2px solid var(--ifm-color-primary-lightest); +} + +.inputLabel { + display: block; + color: #53627c; + background: #eaeff9; + + padding: 0.5rem 1.5rem; + font-weight: 500; + border-radius: 8px 8px 0 0; +} +[data-theme='dark'] .inputLabel { + color: #eee; + background: #ffffff1a; +} + +.hotspotInput { + display: block; + margin-bottom: 0.25rem; + padding: 1rem 1.5rem; + width: 100%; + font-size: 1.5em; + font-family: Courier, monospace; + background: var(--ifm-background-color); + border: none; + border-radius: 0 0 8px 8px; +} +.hotspotInput::placeholder { + text-decoration: underline; + text-underline-offset: 0.18em; +} +.hotspotInput:focus { + outline: none; +} + +.successNotice, +.inputSuggestion, +.fetchError { + display: block; + color: #53627c; + margin: 0.5rem 1.5rem -0.5rem; + font-size: 1rem; + font-weight: 500; +} +.inputSuggestion { + cursor: pointer; + text-decoration: underline; + text-decoration-color: #bcc2cc; +} +.inputSuggestion strong { + color: var(--ifm-color-primary-dark); +} +[data-theme='dark'] .inputSuggestion { + color: var(--ifm-color-gray-300); +} +[data-theme='dark'] .inputSuggestion strong { + color: var(--ifm-color-primary-light); +} + +.isBanned_container { + background: #fff; + width: 100%; + padding: 0.75rem 1.5rem 1.25rem; + margin-top: 1rem; + border: none; + border-radius: 8px; + box-shadow: 0 3px 8px -3px #00000014; +} +[data-theme='dark'] .isBanned_container { + background: #ffffff0d; +} + +.header { + margin: 0.5em 0; +} +.publicKey, +.serial { + margin: 0; + font-size: smaller; + display: flex; + gap: 0.5em; +} +.publicKeyTruncate { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + display: inline-block; + width: 100%; + flex: 1; +} diff --git a/docs/open-source/docs/installation.mdx b/docs/open-source/docs/installation.mdx deleted file mode 100644 index 6e897c036..000000000 --- a/docs/open-source/docs/installation.mdx +++ /dev/null @@ -1,117 +0,0 @@ ---- -id: installation -hide_title: false -sidebar_label: Installation Guide -slug: /open-source/docs/installation ---- - -# Helium Documentation Installation Guide - -## Node.js - -Download latest software: -External link: [Node.js](https://nodejs.org/en/download) version >= 10.15.1 - -:::info -Windows Node.js installation you do not need to install the Compiler and Chocolaty dependencies. -::: - -Install Node.js - -## Yarn - -Download software: -External link: [Yarn](https://yarnpkg.com/getting-started/install) version >= 1.5 - -After you install Node.js, which will install Node.js and npm as a dependency you can do the following. - -``` -$ npm install -g yarn - -> yarn@1.22.11 preinstall /path/to/npm/node_modules/yarn -> :; (node ./preinstall.js > /dev/null 2>&1 || true) -``` -To upgrade the Yarn version to be >= 1.5 you must set each project directory to version berry. - -``` -$ cd ~/path/to/project -$ yarn set version berry - -Resolving berry to a url... -Downloading https://github.com/yarnpkg/berry/raw/master/packages/berry-cli/bin/berry.js... -Saving it into /path/to/fork/docs/.yarn/releases\yarn-berry.cjs... -Updating /path/to/prjoect/docs/.yarnrc.yml... -Done! -``` - -Then you can install Yarn which will download and compile all the project module dependencies. - -``` -$ yarn install - - YN0070: Migrating from Yarn 1; automatically enabling the compatibility node-modules linker - ... - YN0007: │ yarn@npm:1.22.10 must be built because it never has been before or the last one failed - YN0007: │ core-js@npm:3.12.1 must be built because it never has been before or the last one failed - YN0007: │ core-js-pure@npm:3.12.1 must be built because it never has been before or the last one failed - YN0000: └ Completed in 42s 725ms - YN0000: Done with warnings in 1m 31s -``` - -Check the final version and confirm that it is >= 1.5 - -``` -$ yarn --version -3.0.1 -``` - -### Local Development - -``` -$ yarn start - -Starting the development server... -Docusaurus website is running at: http://localhost:3000/ - -√ Client - Compiled successfully in 5.90s - -i 「wds」: Project is running at http://localhost:3000/ -i 「wds」: webpack output is served from / -i 「wds」: Content not from webpack is served from /path/to/project/docs -i 「wds」: 404s will fallback to /index.html - -* Client ... done (99%) plugins - WebpackDevMiddleware -``` - -This command starts a local development server and open up a browser window. Most changes are reflected live without having to restart the server. - -### Link Checking before your PR - -Checking links can be accomplished by using the `yarn build` command - -``` -$ yarn build - -[en] Creating an optimized production build... - -√ Client - -√ Server - Compiled successfully in 1.25m - -√ Client - -* Server █████████████████████████ cache (99%) shutdown IdleFileCachePlugin - stored - -Success! Generated static files in build. - -Use `npm run serve` to test your build locally. -``` - -### Developing - -Each time you save files under your local repo the site will get rebuilt and the pages refreshed on the fly, there is no need to keep restarting Yarn. - diff --git a/docs/open-source/open-source.mdx b/docs/open-source/open-source.mdx deleted file mode 100644 index da88fff77..000000000 --- a/docs/open-source/open-source.mdx +++ /dev/null @@ -1,92 +0,0 @@ ---- -id: open-source -hide_title: true -sidebar_label: Overview -slug: /open-source ---- - - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - - -# Helium is Open Source - -The Helium Network is built almost entirely on open source code. And we actively -encourage the community to develop and contribute to all parts of the Network. -Below is a subset of the code that plays an integral role in the Helium Network. -The full list can be found on the official -[Helium GitHub Organization](https://github.com/helium). - -### Helium Blockchain - -These are the core libraries and repos that make up the Helium blockchain. Most -things here are written in Erlang. - -- [Miner](https://github.com/helium/miner) - The Helium blockchain miner. - -- [Blockchain Core](https://github.com/helium/blockchain-core) - The glue that - ties together things like the `Helium miner` and the `blockchain api`. - -- [Blockchain API](https://github.com/helium/blockchain-api) - A full blockchain - node that exposes a JSON API. It's ideal for supplying data to things like - block explorers and mobile apps. - -- [Erlang HoneyBadgerBFT](https://github.com/helium/erlang-hbbft) - An Erlang - implementation of HoneyBadgerBFT's various protocols. - -- [Erlang DKG](https://github.com/helium/erlang-dkg) - Helium's implementation - of the protocol described in - [Distributed Key Generation in the Wild](https://eprint.iacr.org/2012/377.pdf). - Prepare yourself for some math. - -- [Erlang libp2p](https://github.com/helium/erlang-libp2p) - Libp2p swarms - written in (you guessed it) Erlang. - -- [Helium CLI Wallet](https://github.com/helium/helium-wallet-rs) - Command Line - Interface, written in Rust, used to created and administer Helium wallets, and - interact with the Helium Network. - -- [Helium JS](https://github.com/helium/helium-js) - Typescript SDKs for - interacting with the Helium blockchain. - -- [Packet Purchaser](https://github.com/helium/packet-purchaser) - Service that buys - Helium LoRaWAN packets from the Network and delivers the them to a target LoRaWAN Network server. - -- [Angry Purple Tiger](https://github.com/helium/angry-purple-tiger) - Ever - wonder how your Miner got its cute little animal name? Here it is. - - -### LoRaWAN - -The Helium Network is the largest, public LoRaWAN network in the world. This is -some of the code that makes it possible. - -- [Packet Forwarder](https://github.com/helium/packet_forwarder) - Helium's fork - of the Lora packet forwarder. - -- [Light Gateway](https://github.com/helium/gateway-rs) - The next-generation packet - forwarder for the Helium-enabled gateways. - -- [Helium Console](https://github.com/helium/console) - A web browser front-end for users to manage organizations and devices and a Helium Blockchain-compatible LoRaWAN Network Server (LNS). - -- [Console Decoders](https://github.com/helium/console-decoders) - A collection - of LoRaWAN sensor decoders used in Helium Console. - -### Mobile Apps, Web Apps, and Sites - -- [Helium Mobile Wallet](https://github.com/helium/hotspot-app) - Helium hotspot - app for iOS and Android. - -- [Helium Blockchain Explorer](https://github.com/helium/explorer) - Code that - powers the greatest block explorer in the crypto world. - -- [Helium Docs](https://github.com/helium/docs) - Docusaurus-based docs for all - things Helium. (You're reading them.) - - - [Installation](/open-source/docs/installation) - How to install the needed components - to start helping docs development. - -- [Helium Mappers](https://github.com/helium/mappers/) - Community generated - coverage map of the Helium network using real-world testing. \ No newline at end of file diff --git a/docs/style-guide.md b/docs/style-guide.md deleted file mode 100644 index 04a6e517e..000000000 --- a/docs/style-guide.md +++ /dev/null @@ -1,216 +0,0 @@ ---- -id: style-guide -title: Style Guide -sidebar_label: Style Guide ---- - -You can write content using -[GitHub-flavored Markdown syntax](https://github.github.com/gfm/). - -## Markdown Syntax - -To serve as an example page when styling markdown based Docusaurus sites. - -## Headers - -# H1 - Create the best documentation - -## H2 - Create the best documentation - -### H3 - Create the best documentation - -#### H4 - Create the best documentation - -##### H5 - Create the best documentation - -###### H6 - Create the best documentation - ---- - -## Emphasis - -Emphasis, aka italics, with _asterisks_ or _underscores_. - -Strong emphasis, aka bold, with **asterisks** or **underscores**. - -Combined emphasis with **asterisks and _underscores_**. - -Strikethrough uses two tildes. ~~Scratch this.~~ - ---- - -## Lists - -1. First ordered list item -1. Another item - - Unordered sub-list. -1. Actual numbers don't matter, just that it's a number - 1. Ordered sub-list -1. And another item. - -- Unordered list can use asterisks - -* Or minuses - -- Or pluses - ---- - -## Links - -[I'm an inline-style link](https://www.google.com/) - -[I'm an inline-style link with title](https://www.google.com/ "Google's Homepage") - -[I'm a reference-style link][arbitrary case-insensitive reference text] - -[You can use numbers for reference-style link definitions][1] - -Or leave it empty and use the [link text itself]. - -URLs and URLs in angle brackets will automatically get turned into links. -http://www.example.com/ or and sometimes example.com -(but not on GitHub, for example). - -Some text to show that the reference links can follow later. - -[arbitrary case-insensitive reference text]: https://www.mozilla.org/ -[1]: http://slashdot.org/ -[link text itself]: http://www.reddit.com/ - ---- - -## Images - -Here's our logo (hover to see the title text): - -Inline-style: -![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1") - -Reference-style: ![alt text][logo] - -[logo]: - https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png - "Logo Title Text 2" - -Images from any folder can be used by providing path to file. Path should be -relative to markdown file. - -![img](../static/img/icons/logo.svg) - ---- - -## Code - -```javascript -var s = "JavaScript syntax highlighting"; -alert(s); -``` - -```python -s = "Python syntax highlighting" -print(s) -``` - -``` -No language indicated, so no syntax highlighting. -But let's throw in a tag. -``` - -```js {2} -function highlightMe() { - console.log("This line can be highlighted!"); -} -``` - ---- - -## Tables - -Colons can be used to align columns. - -| Tables | Are | Cool | -| ------------- | :-----------: | -----: | -| col 3 is | right-aligned | \$1600 | -| col 2 is | centered | \$12 | -| zebra stripes | are neat | \$1 | - -There must be at least 3 dashes separating each header cell. The outer pipes (|) -are optional, and you don't need to make the raw Markdown line up prettily. You -can also use inline Markdown. - -| Markdown | Less | Pretty | -| -------- | --------- | ---------- | -| _Still_ | `renders` | **nicely** | -| 1 | 2 | 3 | - ---- - -## Blockquotes - -> Blockquotes are very handy in email to emulate reply text. This line is part -> of the same quote. - -Quote break. - -> This is a very long line that will still be quoted properly when it wraps. Oh -> boy let's keep writing to make sure this is long enough to actually wrap for -> everyone. Oh, you can _put_ **Markdown** into a blockquote. - ---- - -## Inline HTML - -
-
Definition list
-
Is something people use sometimes.
- -
Markdown in HTML
-
Does *not* work **very** well. Use HTML tags.
-
- ---- - -## Line Breaks - -Here's a line for us to start with. - -This line is separated from the one above by two newlines, so it will be a -_separate paragraph_. - -This line is also a separate paragraph, but... This line is only separated by a -single newline, so it's a separate line in the _same paragraph_. - ---- - -## Admonitions - -:::note - -This is a note - -::: - -:::tip - -This is a tip - -::: - -:::important - -This is important - -::: - -:::caution - -This is a caution - -::: - -:::warning - -This is a warning - -::: diff --git a/docs/tokens/DataCredit.jsx b/docs/tokens/DataCredit.jsx new file mode 100644 index 000000000..c22e2b90c --- /dev/null +++ b/docs/tokens/DataCredit.jsx @@ -0,0 +1,24 @@ +export const PayloadSize = () => ( +
+

Message Payload Size

+ + + + + + + + + + + + + + + +
0-24 bytes25-48 bytes... 241 bytes
1 DC2 DC... 11 DC
+
+ Data transfer is accounted for in 24-byte increments per message on the LoRaWAN network. +
+
+) diff --git a/docs/tokens/NetEmissions.jsx b/docs/tokens/NetEmissions.jsx new file mode 100644 index 000000000..137157501 --- /dev/null +++ b/docs/tokens/NetEmissions.jsx @@ -0,0 +1,132 @@ +import React, { useState } from 'react' +import BrowserOnly from '@docusaurus/BrowserOnly' +import styles from './NetEmissions.module.css' + +export const NetEmissions = () => ( + + {() => { + const EMISSIONS_CAP = 1643.83561643 + const formatter = new Intl.NumberFormat(navigator.language, { + minimumFractionDigits: 0, + maximumFractionDigits: 8, + }) + + const [yesterday, setYesterday] = useState(400) + const [today, setToday] = useState(9500) + + const uncappedTarget = (yesterday * 6) / 7 + (today * 1) / 7 + const isCapped = uncappedTarget > EMISSIONS_CAP + const netEmissions = Math.min(uncappedTarget, EMISSIONS_CAP) + const burned = Math.max(today - netEmissions, 0) + + const setPreset = (y, t) => { + setYesterday(y) + setToday(t) + } + + return ( +
+
+ + + +
+ +
+
+ setYesterday(Number(e.target.value))} + /> +
+

+ Yesterday's Net Emissions Target: {formatter.format(yesterday)} HNT +

+ +
+ setToday(Number(e.target.value))} + /> +
+

+ Today's HNT Burned: {formatter.format(today)} HNT +

+
+ +
+

+ If yesterday's Net Emissions Target was {yesterday.toLocaleString()}{' '} + HNT and today's HNT Burned is {formatter.format(today)} HNT, then + today's Net Emissions Target is calculated as follows: +

+

+ ({formatter.format(yesterday)} × 6/7) + ( + {formatter.format(today)} × 1/7) ={' '} + {formatter.format(uncappedTarget)} HNT{''} + {isCapped && ( + <> +
+ However, this will be capped at + {formatter.format(EMISSIONS_CAP)} + {' '} + HNT as today's Net Emissions. + + )} + {!isCapped && <> which is below the emissions cap.} +

+ +

+ The difference between the burn and emission represents the change in HNT supply. +
+ Today's HNT Burned value {today} HNT minus today's Net Emissions{' '} + {formatter.format(netEmissions)} HNT equals{' '} + {formatter.format(burned)} HNT permanently burned. +

+ +

+ Tomorrow, the uncapped number{' '} + + Net Emissions TargetToday + {' '} + ({formatter.format(uncappedTarget)}) will become{' '} + + Net Emissions TargetYesterday + + . +

+
+
+ ) + }} +
+) diff --git a/docs/tokens/NetEmissions.module.css b/docs/tokens/NetEmissions.module.css new file mode 100644 index 000000000..d8f7f9d54 --- /dev/null +++ b/docs/tokens/NetEmissions.module.css @@ -0,0 +1,67 @@ +.container { + padding: 16px 16px 0; + width: 100%; +} + +.box { + background: white; + border-radius: 8px; + padding: 16px; + margin-bottom: 1em; + box-shadow: 0 3px 8px -3px rgba(0, 0, 0, 0.08); +} + +[data-theme='dark'] .box { + background: rgba(255, 255, 255, 0.05); +} + +.inputRow { + display: flex; + margin: 0.5em 0; +} + +input[type='range'] { + flex: 1; +} + +.buttons { + display: flex; + justify-content: space-evenly; + gap: 1em; + margin-bottom: 1em; +} + +.button { + display: flex; + align-items: center; + appearance: none; + background: white; + border: none; + cursor: pointer; + color: #5a719a; + font-size: 1rem; + font-weight: 500; + padding: 1em; + gap: 1em; + text-decoration: none; + border-radius: 8px; + box-shadow: 0 3px 8px -3px rgba(0, 0, 0, 0.08); +} + +.example { + font-weight: normal; + text-align: left; +} + +[data-theme='dark'] .button { + color: #fff; + background: #53627c; +} + +.button:hover { + color: rgb(18, 49, 103); +} + +[data-theme='dark'] .button:hover { + color: #fff; +} diff --git a/docs/tokens/SolToken.jsx b/docs/tokens/SolToken.jsx new file mode 100644 index 000000000..2fb61637b --- /dev/null +++ b/docs/tokens/SolToken.jsx @@ -0,0 +1,18 @@ +export const HntToSol = () => ( +
+ +
+ Video of the process in action.{' '} + Click here to watch on YouTube. +
+
+) diff --git a/docs/tokens/data-credit-portal.mdx b/docs/tokens/data-credit-portal.mdx new file mode 100644 index 000000000..1f48397d8 --- /dev/null +++ b/docs/tokens/data-credit-portal.mdx @@ -0,0 +1,146 @@ +--- +id: data-credit-portal +title: Helium Data Credit Portal +pagination_label: Data Credit Portal +sidebar_label: Buy Data Credits with Credit Card +description: Helium Data Credit Portal Documentation +image: https://docs.helium.com/img/link-image.png +slug: /tokens/data-credit-portal +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + + +
+
+ +The Data Credit Portal built by [Sphere][sphere] allows Network users to acquire Data Credits +without directly holding cryptocurrency. The tool is designed to allocate Data Credits for Network +users like [LNS operators][open-lns] or mobile service providers. The tool provides a clear invoice +to simplify accounting. + +Access the Data Credit Portal at [dc-portal.helium.com][dc-portal]. + +
+ +
Helium Data Credit Portal powered by Sphere.
+
+
+ +:::note There may be select countries where access to this tool is unavailable. + +If access appears to be restricted in your region, please email +[hello@helium.foundation][mailto-foundation] for assistance. + +::: + +## Using the Data Credit Portal + +For the sake of this example, we will send 1,000,000 DC ($10.00 USD) to OUI 1 with the memo "test". + +As you type in the OUI number, you will notice a pop-up. OUI owners can see how many DC are +available under their OUI. For instance, there are just over 180 million DC available under OUI 1 +for the LoRaWAN network. An email address can also be specified in order to receive the purchase +receipt. + +
+ +
A preview is offered for each destination address.
+
+
+ +Upon clicking “Continue”, you will be taken to Sphere's crypto payment interface. Hit "Pay" when you +have filled in your payment information. + +
+ +
+
+ +### Confirm Purchase + +While Sphere is performing the underlying transactions for you, you will see this loading screen. Do +not refresh or exit the page. + +
+ +
+
+ +You will be notified when the transaction is complete. The transaction can be verified by clicking +on the Explorer link. + +
+ +
+
+ +### Invoice + +With the completion of a successful transaction, an invoice is promptly emailed to the account that +was used for the transaction. + +
+ +
A receipt will be emailed to the account responsible for the transaction.
+
+
+ +Click on the link to explore the transaction details. Scroll down to the transaction titled +"Delegate Data Credits V 0". As you can see, 970,000 DC was delegated to the OUI's escrow account +because there is a 3% transaction fee when you purchase DC through Sphere's Data Credit portal. + +
+ +
The transaction detail that delegates DC towards your OUI escrow account.
+
+ +## Deep Links + +The Data Credit portal provides a simple interface to pre-populate fields within the tool. Use URL +parameters to pre-fill fields on the Data Credit Portal such as OUI and memo. + +``` +https://dc-portal.helium.com/?oui=24&memo=HelloHelium +``` + +**Supported Parameters** + +| Description | Field | Example | +| ----------------- | ------ | ------------- | +| OUI | `oui` | `oui=24` | +| Transaction memo. | `memo` | `memo=aX0fe8` | + +[sphere]: https://spherepay.co +[open-lns]: /iot/lorawan-network-servers +[dc-portal]: https://dc-portal.helium.com +[payment-method]: #payment-method +[mailto-foundation]: mailto:hello@helium.foundation diff --git a/docs/tokens/data-credit.mdx b/docs/tokens/data-credit.mdx new file mode 100644 index 000000000..ca60c8fa5 --- /dev/null +++ b/docs/tokens/data-credit.mdx @@ -0,0 +1,155 @@ +--- +id: data-credit +title: Data Credit +pagination_label: Data Credit +sidebar_label: Data Credit (DC) +description: Helium Data Credit Documentation +image: https://docs.helium.com/img/link-image.png +slug: /tokens/data-credit +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' +import BrowserOnly from '@docusaurus/BrowserOnly' +import { PayloadSize } from './DataCredit' +import { TopLedgerEmbed } from '@site/src/theme/TopLedgerEmbed' + + + +Data Credits (DCs) are the mechanism by which all Helium network usage is paid for. This token is +redeemable for data transfer on both the IoT and Mobile subnetworks. Furthermore, certain actions +such as onboarding a Hotspot are paid for using DC. + +For further reading on DCs place in the overall mechanics of the Helium network, refer to +[burn and mint economics](/tokens/hnt-token#burn-and-mint-economics) in the HNT token documentation. + +## Data Credit Fundamentals + +**One Data Credit equals $0.00001 USD.** + +The amount of DC produced by burning one HNT will fluctuate based on the USD price of HNT as +reported by the price provider, [Pyth](https://pyth.network). The tool below demonstrates the +HNT-to-DC conversion rate based on the price of HNT. + +import { HntToDcSimulator } from '@theme/HntToDcSimulator' + +
+ Loading Data Credit simulator...
}> + {() => } + + + +## Data Credit Usage + +DCs are used first and foremost as the payment of data transfer on the Helium IoT and Mobile +networks. Unlike traditional wireless networks, the Helium Network has no annual fee, and users only +pay for data used. In the original design of the protocol, it was recognized that users of the +network would not be comfortable with the volatility that comes with typical token economics. +Therefore, DCs were designed such that all data transfer is pinned to USD, making it predictable. + +DCs are also used for specific functions on the Helium subnetworks, such as onboarding or asserting +the locations of Hotspots. See the [IoT](#dc-and-iot) and [Mobile](#dc-and-mobile) usage sections +below for more details. DCs are not transferable once created. When being used for network transfer, +they can be delegated to be used for data transfer accounting. Once DCs have been delegated, they +cannot be redelegated. + + + +--- + +## Data Credits and Mobile {#dc-and-mobile} + +The Helium Mobile Network leverages DCs as the sole mechanism of billing and fee management. The +Mobile Network charges data at a rate of **$0.50 per 1 gigabyte** (50,000 DC). + +On cellular networks, it is customary that network operators bill for bulk data rather than for +individual packets. By setting the data cost to \$0.50 per gigabyte, the Helium Mobile network +positions itself competitively in the marketplace while preserving valuable rewards for the Mobile +Hotspot operator. + +### Mobile Protocol Fees + +Fees related to onboarding and location assert were defined through community governance through +[HIP-89](https://github.com/helium/HIP/blob/main/0089-mobile-network-onboard-fees.md). + +| Action | Fee | +| ------------------------------------------------------- | ----- | +| WiFi Indoor Onboard (Included with Hotspot) | $20 | +| WiFi Outdoor Onboard (Included with Hotspot) | $30 | +| [Converted Network Onboard](/mobile/helium-plus-mobile) | $2.00 | + +## Data Credits and IoT {#dc-and-iot} + +On the Helium IoT network, the primary utility of DCs is for network data transfer. Data transfer is +billed in 24-byte increments based on the application payload size only. LoRaWAN protocol overhead +(headers, MIC, etc.) does not count toward the DC cost. Data transfer is only billed if the message +is delivered through the Helium network. + +Network users also have the choice to purchase multiple reports of the same packet. These additional +reports each account for their own cost. For instance, if three 24-byte copies are returned for a +given message, the cost would be 3 DC. + + +
+ +### Data Transfer Calculator + +Use this calculator to estimate deployment costs based on the number of devices and how often they +send data. + +This calculator assumes a 24-byte message size which is typical of most deployments. + +import OperationCostEstimator from '@site/src/theme/DcCostEstimator' + +
+ +
+ +### IoT Protocol Fees + +In addition to network data transfer, DCs are also utilized for certain network-related fees. + +| Action | Fee | +| --------------------------------------------------------- | ---------------------------------------------- | +| Hotspot Onboarding | $10 | +| Assert Location | $1 | +| Hotspot Onboarding [(Data-Only)](/iot/data-only-hotspots) | $0.50 | +| Assert Location [(Data-Only)](/iot/data-only-hotspots) | $0.50 | +| OUI | $100 | +| DevAddr Slab | \$100 ($12.50 × 8)([^1]) | + +[^1]: + DevAddrs must be purchased in slabs of 8. + [HIP-116](https://github.com/helium/HIP/blob/main/0116-lorawan-device-address-price-adjustment.md) reduced + the fees for DevAddr purchasing and set a path to utilize the IOT token for DevAddr and OUI + purchases instead of DC. + +## Acquiring Data Credits + +At a network level, DCs are only generated through the conversion of HNT. However, several tools +exist to simplify the process for network users. + +:::important Data Credits are non-transferable + +Once the DC mint transaction is complete, the receiving Helium wallet owns all of the DC and cannot +transfer them to any other Helium wallet. + +DC can be delegated to network operator wallets in arrangement with the operator. This is a one-time +action. Learn more in the [Fund an Organizationally Unique Identifier](/iot/run-an-lns/fund-an-oui) +documentation. + +::: + +### HNT Swap + +For individuals or organizations with HNT holdings and familiarity with using cryptocurrencies in +business operations, converting HNT to DCs via the on-chain Helium programs provides a +straightforward method for acquiring DCs. + +HNT can be converted to DC using the [Helium Wallet App](/wallets/helium-wallet-app) or +[Helium CLI](/wallets/cli-wallet) wallet. diff --git a/docs/tokens/hnt-token.mdx b/docs/tokens/hnt-token.mdx new file mode 100644 index 000000000..3a645a2b2 --- /dev/null +++ b/docs/tokens/hnt-token.mdx @@ -0,0 +1,148 @@ +--- +id: hnt-token +title: The Helium Network Token +pagination_label: Helium Network Token +sidebar_label: Helium Network Token (HNT) +description: Helium Network Token Documentation +image: https://docs.helium.com/img/link-image.png +slug: /tokens/hnt-token +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' +import { TopLedgerEmbed } from '@site/src/theme/TopLedgerEmbed' + + + +The Helium Network Token (HNT) is the native cryptocurrency and protocol token of the Helium +Network. The first HNT was emitted on July 29th, 2019. There was no pre-mine of HNT before the +launch of the Network. + +The Helium network migrated from its own purpose-built blockchain to the Solana Blockchain on April +18, 2023. The mint address for HNT is [`hntyVP6YFm1Hg25TN9WGLqM12b8TQmcknKrdu1oxWux`][hnt-mint-addr] +on the Solana blockchain. + +## HNT Usage + +HNT serves the needs of the two primary parties in the Helium Ecosystem: + +1. **Hotspot Hosts and Operators**. Hosts are rewarded in HNT network tokens while deploying and + maintaining network coverage. Operators, and some network mappers are also rewarded in HNT. +2. **Enterprises and Developers use the Helium Network** to connect devices and build Network + applications. [Data Credits][datacredit], which are a \$USD-pegged utility token derived from + HNT, are used to pay transaction fees for wireless data transmissions on the Network. + +## HNT Token Economic Concepts + +The Network uses three token economic concepts to ensure HNT supply is both plentiful for usage +needs and relatively scarce, with a known maximum. + + + +### Max Supply + +The Network targeted the distribution of 5,000,000 HNT per month at launch. Following the community +approval of HIP-20, the Network uses a two-year halving schedule, resulting in an initial maximum +HNT supply of 240,000,000 HNT, but slow blockchain times in year 1 resulted in an issuance that was +~17,000,000 HNT less than the schedule targeted. Thus, at the time HIP 20 was approved, max supply +had decreased to ~223,000,000 HNT. + +| Year | Year Start | HNT at Year Start | Target HNT Emission | +| :--: | ---------------: | ----------------: | ------------------: | +| 1 | August 1st, 2019 | 0 | 60,000,000 | +| 2 | August 1st, 2020 | 60,000,000 | 60,000,000 | +| 3 | August 1st, 2021 | 120,000,000 | 30,000,000 | +| 4 | August 1st, 2022 | 150,000,000 | 30,000,000 | +| 5 | August 1st, 2023 | 180,000,000 | 15,000,000 | +| 6 | August 1st, 2024 | 195,000,000 | 15,000,000 | +| 7 | August 1st, 2025 | 210,000,000 | 7,500,000 | +| 8 | August 1st, 2026 | 217,500,000 | 7,500,000 | +| 7 | August 1st, 2027 | 225,000,000 | 3,750,000 | +| 8 | August 1st, 2028 | 228,750,000 | 3,750,000 | + +> The full token emission schedule can be viewed in the HNT section of this document: [Token +> Emissions as of Solana Migration][sol-emissions]. + +[^1]: + Year 1 starts on **August 1st, 2019**. The first halving happened on day one of year three, + **August 1st, 2021**. + +### Burn and Mint Economics {#burn-and-mint-economics} + +[Data Credits][datacredit] (DC) are a $USD-pegged utility token derived from HNT and is used to pay +fees on the Helium Network. DC is only produced by burning HNT. This HNT to DC relationship is based +on a design commonly called a [burn and mint equilibrium][bme] and intends to allow for the supply +of HNT to respond to network usage trends. + +### Net Emissions + +As the halving schedule progresses, it is possible that the HNT minted per epoch is not sufficiently +divisible for data transfer rewards. Therefore, in order to ensure that miners are incentivized to +continue transmitting data and ensure a healthy, robust network, the Net Emissions mechanism was +instituted in August 2021. + +Net Emissions give the protocol enough HNT for rewards in perpetuity by monitoring the number of HNT +burned in a given epoch and adding that to the number of HNT to mint that epoch. Because HNT +produced via Net Emissions do not add to the total outstanding, they do not violate max supply. +However, to ensure that the deflationary pressure is still present, the Net Emission is capped at 1% +of the epoch emissions at the time when HIP 20 was approved. + +Initially, Net Emissions counted only HNT burned for Data Credits but now accounts for all HNT +burned, but does not include HNT not emitted. + +Review the [complete Net Emissions discussion in the HIP][hip-20] for more information. Note that in +HIP-20, the cap was 34.24 HNT because the epoch was every 30 minutes at the time HIP-20 was written. +The current epoch is only 24 hour basis, yielding a cap of 1,643.83561643 HNT. The cap is not +affected by the 2 year emissions halvings. + +The up-to-date value can be verified +[on chain at.](https://explorer.solana.com/address/BQ3MCuTT5zVBhNfQ4SjMh3NPVhFy73MPV8rjfq5d1zie/anchor-account) +Move the decimal point 8 positions left to measure `Net Emissions Cap` in HNT. + +HIP-20 proposed a Net Emissions Pool, which would smooth out the effects of large individual burn +events occurring infrequently over several days. Without smoothing, large HNT burns for DC would be +extremely capped as the burn and cap would happen only on one day. This pool was implemented as part +of [HRP 2025-03][hrp-2025-03] using a similar smoothing calculation to that for the Utility Score +described in [HIP-141][hip-141]. With smoothing, this has an effect that large burns on one day can +increase Net Emissions over several days, rather than just one day. + +Every day, a Net Emissions Target is calculated, which takes into account the daily burn of HNT, and +the Net Emissions Target of the previous day and smooths it. The target amount of HNT is then +re-emitted as Net Emissions, up to the cap of 1,643.83561643 HNT. + +The smoothing calculation multiplies yesterday's uncapped and smoothed HNT burned amount number and +multiplies it by 6/7 and then adds it to today's actual HNT burned amount, multiplied by 1/7 and the +resulting number then has the Net Emissions Cap applied to provide the calculated Net Emission HNT +number for today. + +$$ +\text{Net Emissions Target}_{\text{Today}} = \text{Net Emissions Target}_{\text{Yesterday}} \cdot \frac{6}{7} + \text{HNT Burn}_{\text{Today}} \cdot \frac{1}{7} +$$ + +$$ +\text{HNT Net Emissions}_{\text{Today}} = \min\left( \text{Net Emissions Target}_{\text{Today}},\ 1643.83561643 \right) +$$ + +import { NetEmissions } from './NetEmissions' + +
+ +
+ +[bme]: https://multicoin.capital/2018/02/13/new-models-utility-tokens/ +[datacredit]: /tokens/data-credit +[hip-20]: https://github.com/helium/HIP/blob/master/0020-hnt-max-supply.md#net-emissions +[hip-141]: + https://github.com/helium/HIP/blob/main/0141-single-token-governance-and-release-proposals.md#smoothing-function +[hrp-2025-03]: + https://github.com/helium/helium-release-proposals/blob/main/releases/20250312-core-devs.md#1-hnt-token-net-emissions-smoothing +[iot]: /tokens/iot-token +[mobile]: /tokens/mobile-token +[sol-emissions]: + https://github.com/helium/HIP/blob/main/files/0077/token-emissions-as-of-solana-migration.pdf +[hnt-mint-addr]: https://explorer.solana.com/address/hntyVP6YFm1Hg25TN9WGLqM12b8TQmcknKrdu1oxWux diff --git a/docs/tokens/sol-token.mdx b/docs/tokens/sol-token.mdx new file mode 100644 index 000000000..f8038219f --- /dev/null +++ b/docs/tokens/sol-token.mdx @@ -0,0 +1,61 @@ +--- +id: sol-token +title: The Solana Token +pagination_label: SOL Token +sidebar_label: Solana (SOL) +description: Solana Token Documentation +image: https://docs.helium.com/img/link-image.png +slug: /tokens/sol-token +--- + +import { HntToSol } from './SolToken' + +The Helium Network runs on the [Solana](https://solana.com/) blockchain, an extremely fast, +scalable, and low-cost blockchain. + +Interacting with the Solana blockchain requires a small fee (average transaction fee is 0.000014 +SOL) paid in SOL tokens, which is massively cheaper than the original Helium blockchain transaction +fee of \$0.35 in DC. + +All interactions with the Solana blockchain require fees, including sending tokens, staking tokens, +making payments, swapping tokens, minting NFTs, claiming rewards from your Hotspots, and all +on-chain Helium transactions. + +## Solana Accounts and Rent + +Information is stored on the Solana blockchain, such as token balances, NFTs, or other data, in +"accounts." Keeping this data on-chain takes up space, so Solana charges a "rent" fee of ~0.002 SOL +on accounts. + +Rent Facts: + +- Each account has an individual rent fee. +- There is typically one account for each token type. +- Having more accounts (meaning more token types) requires more rent fees. +- Closing accounts can return rent to your wallet. + +Performing more complex transactions, which include creating accounts, may require more SOL. For +example, if a Wallet does not have enough SOL for rent fees, the Wallet **cannot** create new +accounts to hold tokens, and transactions will fail. + +This includes reasserting your Hotspot's location, locking HNT to gain veHNT, and potentially more +complex DeFi actions where multiple accounts must be created (even temporarily). + +--- + +## SOL Swap Utility + +If you do not have enough SOL, you can use this tool to swap HNT for 0.02 SOL. Open this page from +within the browser of the [Helium Wallet App][wallet-app] to swap a small amount of HNT for SOL. + +import { HntToFeeSol } from '@theme/HntToFeeSol' + +
+ +
+
+ + + +[wallet-app]: /wallets/helium-wallet-app +[vehnt]: /governance/vehnt diff --git a/docs/troubleshooting/hotspot-led.mdx b/docs/troubleshooting/hotspot-led.mdx deleted file mode 100644 index 28b6cf5e0..000000000 --- a/docs/troubleshooting/hotspot-led.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -id: hotspot-led -title: Hotspot LED Meaning -sidebar_label: Hotspot LED Meaning -slug: /troubleshooting/hotspot-led ---- - -# Hotspot LED Meaning - -#### Here's a guide on what different colored lights on your Hotspot mean -On the top of the Hotspot: -* YELLOW: Connected to power, but not connected to the internet. -* GREEN: Online / connected to the internet -* BLUE: Bluetooth pairing mode to connect to your phone -* WHITE: The Firmware is being automatically updated. This can take several minutes and will go back to Green once it completes. - -#### The lights on the Raspberry Pi (for both RAK Hotspot Miners and inside the original Helium Hotspot): -* Red LED: Solid red is good, it means Pi is getting power. In normal operation only solid red should be seen. Flashing red means there is some issue with power supply, in which case you can try unplugging it and reconnecting power to check again. -* Green LED: At power-up Green LED will blink in random ways but after about 5 seconds it should stop. If Green blinking repeatedly for a long time it means there is some problem - usually this will be the SD card but may be a power issue too. -* In the case of a constant blinking Green it is recommended to:* Unplug USB-C power* Extract microSD card, check it and re-insert it making sure it’s well seated, The card could have moved in shipping it may have inserted it incorrectly (e.g. upside down) after backup.* Reconnect USB-C power making sure it's plugged in all the all way. -* If the lights on the pi are continue to blink in a specific sequence, you can review the different combinations here to get an idea of what’s going on: https://www.raspberrypi.org/documentation/configuration/led_blink_warnings.md diff --git a/docs/troubleshooting/hotspot-setup.mdx b/docs/troubleshooting/hotspot-setup.mdx deleted file mode 100644 index ed144bc8f..000000000 --- a/docs/troubleshooting/hotspot-setup.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -id: hotspot-setup-troubleshooting -title: Hotspot Setup -sidebar_label: Hotspot Setup -slug: /wallets/app-wallet/hotspot-setup-troubleshooting ---- - -# Hotspot Setup Troubleshooting - -If by chance you run into problems when adding a Hotspot to your account, here -are some basic troubleshooting tips to try out: - -## I plugged in the Hotspot, but no lights came on: - -- It may seem silly, but trying the plug in a different outlet (ideally on a - separate circuit) can help eliminate the possibility of a blown circuit as the - culprit. -- If you have more than one Hotspot, or an additional 5V 3A power adapter laying - around, trying a different power cord can help identify if it's a bad power - supply or if something else is the issue. Please do not try any power adapter (always confirm it is 5V 3A) or else you will short-circuit the Hotspot which is irreparable. -- If the power outlet and cord do not seem to be the issue, try plugging in the - Hotspot and leaving it plugged in for 2 minutes. Then check back to see if any - lights are on. - -If there's no lights or activity after these steps, please contact the Hotspot manufacturer. -Note that Helium is only able to RMA Hotspots that are under warranty and purchased -directly through Helium.com - -## I can't Pair the Hotspot with the App: - -- Double check that the phone's Bluetooth settings are enabled. Once enabled, - return to the app to try pairing again. Be sure to press and hold the Pairing - button for at least 3 seconds, then release. -- Make sure that the app has the Location permissions enabled. These can be - found under App Info > Permissions > Location -- Make sure you have the latest version of the app from the app store. -- Try power-cycling the Hotspot by unplugging it, waiting 10 seconds, and - plugging it back in. Force close and reopen the app, then attempt to Pair - again. If you still have trouble after trying these things, please - email your Hotspot manufacturer. It's - helpful to include the Hotspots name and what color the light on the Hotspot - is. -- Try downloading the Helium Hotspot Utility app from the app store, and see if - you can pair with that. This can help determine if there’s a potential issue - with the regular Helium app. - -## I can Pair, but I can't add my location: - -Similarly to above, double check that the phones Bluetooth settings are enabled. -Once enabled, return to the app to try pairing again. - -• Make sure that the app has the Location permissions enabled. These can be -found under App Info > Permissions > Location • Make sure you have the latest -version of the app from the app store. • Try power-cycling the Hotspot by -unplugging it, waiting 10 seconds, and plugging it back in. After it fully -reboots (can take a minute or two) Then attempt to Pair again. For RAK miners, -they are in pairing mode for the first 5 minutes after fully booting. • Try -completely closing and reopening the app. - -If you still have trouble and are able to run the diagnostics, please send a report -to the Hotspot manufacturer. Please include a video of your screen if possible, to -show the exact steps. -iOS 11 or later: https://support.apple.com/en-us/HT207935 (Android may require a -separate app for screenshots.) - -## I tried to add the Hotspot, but it says it’s owned by someone else: - -This means the Hotspot has already been added to the -blockchain and is already associated with a wallet. You may see this if you -purchased a Hotspot from a non-authorized reseller, or if you are part of a -Hosting program where you host the Hotspot for someone else. - -If you signed up to be a host, you would need to contact the entity you signed -up through for any information regarding your arrangement or rewards, as Helium -is not involved. diff --git a/docs/troubleshooting/improving-poc.mdx b/docs/troubleshooting/improving-poc.mdx deleted file mode 100644 index 4c181809a..000000000 --- a/docs/troubleshooting/improving-poc.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -id: improving-poc -title: Improving Proof-Of-Coverage -sidebar_label: Improving Proof-Of-Coverage -slug: /troubleshooting/improving-poc ---- - -# Improving Proof-Of-Coverage - -### Has your Hotspot been unable to complete challenges on the network? If there are known Hotspots in the neighborhood, they just may not be able to hear you because of interference or its position is poor. - -#### There are a few ways to try and address this. - -1. Moving the Hotspot to a different window, or higher floor if possible. Metal - window screens can also affect RF, so if those can be removed it may improve - the signal. -2. Placing the Hotspot outdoors. Some building materials in the surrounding - walls can block RF. For example, Stucco buildings have a layer of metal wire, - so placing at least the antenna outdoors would help with that. Look for IP-66 - Waterproof cases if you’re intending to place the Hotspot outside. You can - purchase these from mouser.com, amazon.com, or most hardware stores. -3. Some newer high-rise buildings have a UV protective layer on the outside of - the building glass that is known to block and interfere with radio signals. - If this occurs, you could try moving the Hotspot outside (in a weatherproof - case), or purchase an outdoor antenna so it can bypass the glass. -4. Check and see if you’re on a relay by searching for it here. If a Hotspot - being relayed, it means its internet connection is being relayed through - another Hotspot on the Network. To take the Hotspot out of relay requires - opening ports on your internet router (to port 44158), and may require some - additional work beyond opening ports, like setting a static IP, depending on - your router manufacturer. This can help it better maintain sync and properly - send/receive transaction receipts for Beacons and Witnesses. - -If you find your Hotspot relayed, You may need to check with your internet -router manufacturers documentation for the specific steps, as each one has a -different process for opening the ports. diff --git a/docs/troubleshooting/network-troubleshooting.mdx b/docs/troubleshooting/network-troubleshooting.mdx deleted file mode 100644 index 57807777e..000000000 --- a/docs/troubleshooting/network-troubleshooting.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -id: network-troubleshooting -title: Network Troubleshooting -sidebar_label: Network Troubleshooting -slug: /troubleshooting/network-troubleshooting ---- - -# Network Troubleshooting - -Can't connect to the internet? Connected but can't transmit? Here are some steps -that may help! - -Helium Hotspots may not work if the Hotspot is behind a firewall or uses an -incompatible NAT type. Other times it may be because of a router configuration -or the internet is offline. This article aims to help resolve any issues you may -have. - -:::info - -If none of the below fixes your Hotspot connection, please visit the Helium -Community Discord, #hotspot-setup-help. - -::: - -1. Check Your Cables If using Ethernet, make sure your Ethernet cable is - securely plugged into the Hotspot and your internet provider modem. A - blinking amber light next to the Ethernet port on the Hotspot means there is - a good connection. Cables can also fail from time to time, so trying a - different cable can help may also help. - -2. Check Your Internet Connection Confirm that you are able to connect to the - Internet from your location using your home computer, on the same network. If - you cannot connect to the Internet, you will need to contact your Internet - Service Provider (ISP) for additional assistance on your account/connection. - -If using Wi-Fi, confirm that you can connect to your wireless network with your -WEP or WPA security password. If you do not know how to operate or access your -wireless modem, you will need to contact the manufacturer of the equipment -directly. - -If you're able to connect to the internet, power cycle your router. Unplug your -Hotspot and router from your wall or power strip for 2 minutes. Then, plug them -back in to see if you are able to connect to the Internet. - -3. Internet Works and Cannot Connect to Helium Network/Hotspot is being Relayed - If you are able to connect to the Internet, but cannot get an inbound or - outbound connection to the network, it may be a firewall issue or your - Hotspot is being Relayed. - -Hotspots being Relayed are not directly connected to the internet, but through -another Hotspot on the network and can adversely affect mining and earnings. -Relayed Hotspots can be identified in Explorer. - -We recommend enabling TCP Ports 44158 in both directions in your router. Check -your Router's manufacturing instructions on how to open ports 44158. - -To get started with port forwarding, check out https://portforward.com - -For support and firmware updates, we will need ports 22 and 443 open Outbound. - -4. Router NAT Type Incompatible - -This information can be used to judge the ease or difficulty of connecting to -the network and is available by going to your router. - -- Type 1 / Open: The system is connected directly to the Internet and will - provide the best connection quality. -- Type 2 / Moderate: The system is connected to the Internet with a router, and - can only connect with other using Type 1 / Open or Type 2 / Moderate. -- Type 3 / Strict: The system is connected to the Internet with a router and can - only connect to those who use Type 1 / Open, meaning some or all connections - may be being blocked. - -Check your modem settings and documentation for more information on how to -configure NAT Type. diff --git a/docs/troubleshooting/replace-sd-card.mdx b/docs/troubleshooting/replace-sd-card.mdx deleted file mode 100644 index 1bc4b4159..000000000 --- a/docs/troubleshooting/replace-sd-card.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: replace-sd-card -title: Replacing SD Card -sidebar_label: Replacing SD Card -slug: /troubleshooting/replace-sd-card ---- - -# Replacing SD Card (Original Helium Hotspots) - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Required Tools: - -- Phillips Head or T8 bit screwdriver -- Strong fingernails, tweezers, or needle-nose pliers to remove the old SD card -- The ability to read/write a 64gb microSD card (unless pre-flashed card is - acquired) - -In the event that your microSD card fails, here are the steps to re-flash it or -replace it with a brand new one: - -1. Unplug and remove the 4 screws from the bottom of the unit using a Phillips - head screwdriver (Note that 1st gen Hotspots will need a T8 bit screwdriver, - and also have a gps antenna wire attaching the top plastic to the board, this - should stay connected.) -2. Carefully remove the installed microSD card located by the fan - tweezers or - needle-nose pliers may help with this. (see image below) - -3. Format the new card or re-format the existing card into ExFat format. -4. Download and install a program to Flash the card such as Etcher, if needed: - https://www.balena.io/etcher -5. Download the firmware image file to Flash. - Note: Since 24 Jan 2022 the Firmware and Miner Images are now separated, and can have different date releases - Replace the `date` part of the following URL with the latest GA tagged >>FIRMWARE<< release in the Community Discord's #announcements channel. - i.e. new firmware date of `2022.01.24.0` and `https://helium-nextgate.s3-us-west-2.amazonaws.com/artifacts/-sdcard.img.gz` - becomes `https://helium-nextgate.s3-us-west-2.amazonaws.com/artifacts/2022.01.24.0-sdcard.img.gz`and enter that url in your browser -6. Unzip the .gz file. -7. Use Etcher to Flash the newly formatted microSD card with the file. -8. Place the newly flashed card back into the card reader slot. -9. Plug the Hotspot back and and confirm that it boots up. -10. Screw the Hotspot back together. - -:::info - -This set of instructions are for Original Helium Hotspots. [The instructions for RAK/MNTD Hotspots can be found here](https://support.getmntd.com/hc/en-us/articles/4418137820951-I-need-to-replace-the-microSD-card-on-my-hotspot). - -::: - -#### If you have purchased a pre-flashed card, the only steps you need are: - -1. Unplug and remove the 4 screws from the bottom of the unit using a Phillips - head screwdriver (Note that 1st gen Hotspots will need a T8 bit screwdriver, - and also have a gps antenna wire attaching the top plastic to the board, this - should stay connected.) -2. Carefully remove the installed microSD card located by the fan - tweezers or - needle-nose pliers may help with this. (see image below) -3. Place the pre-flashed card into the card reader slot. -4. Plug the Hotspot back and and confirm that it boots up. -5. Screw the Hotspot back together. - -If successful, everything should boot up normally. - - -## SD Card Sources - -A 64GB SD card (or, even better, 128GB) like -[this](https://www.amazon.com/gp/product/B07FCMBLV6/ref=ppx_yo_dt_b_asin_title_o06_s00?ie=UTF8&psc=1) -would work, but any endurance type SD card comparable should suffice. Be careful to buy from a trusted vendor, as fake SD cards are often sold on the secondary market. - -You can also buy pre-flashed SD cards from -[Parley Labs 64GB](https://shop.parleylabs.com/collections/mine-hnt/products/sandisk-64gb-extreme-microsdxc-with-helium-firmware) or [PPL 128GB](https://peoplesantenna.com/sdcard). diff --git a/docs/troubleshooting/witnesses.mdx b/docs/troubleshooting/witnesses.mdx deleted file mode 100644 index 8f556a1aa..000000000 --- a/docs/troubleshooting/witnesses.mdx +++ /dev/null @@ -1,122 +0,0 @@ ---- -id: understanding-witnesses -title: Understanding Witnesses -sidebar_label: Understanding Witnesses and Relayed Hotspots -slug: /troubleshooting/understanding-witnesses ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -# Understanding Witnesses and Relayed Hotspots - -Witnesses on the Helium network are Hotspots that have seen (or witnessed) a Proof-of-Coverage packet from a Hotspot. This single-stage Proof-of-Coverage challenge is also known as a "Beacon". - -Witness lists used to be used to construct multi-hop challenges, but since the network moved to use single-hop challenges (or beacons), it is no longer used and only exists for informational purposes only. - - -:::info - -Beacons happen automatically, and Hotspots witness automatically. Successful Witnessing, Challenging, and Beaconing relies on a stable and fast internet connection. This means *relayed* Hotspots will often fail these tasks. More below. - -::: - -## Witnessed List in Explorer and Helium App - -:::info - -As of January 2022, Witnessed Lists in both the App and Explorer reflects the list of Hotspots that your Hotspot has seen beacon. This is an improved change from displaying a list of Hotspots that has witnessed your Hotspot as the new list directly correlates with mining rewards. - -::: - -The list you find in explorer.helium.com and the Helium app are a historical, cumulative set of Hotspots that your Hotspot has seen beacon. This list is based on 5 previous days of Proof-of-Coverage receipts. - - -Here is an example: - -| January 1 | January 2 | January 3 | January 4 | January 5 | -| :----: | :----: | :----: | :----: | :----: | -| 13 | 4 | 5 | 10 | 10 | - -Total: 42 Witnesses - -The following day, the witnesses from January 1 is rolled over and a new day's worth of data is added. - -| January 2 | January 3 | January 4 | January 5 | January 6 | -| :----: | :----: | :----: | :----: | :----: | -| 4 | 5 | 10 | 10 | 8 | - -Total: 37 Witnesses - - - -:::note - -Witnesses are *historical and informational only*. It is not indicative of future earnings. - -::: - -### Transmit Scale and Witnessed List -Typically, the more Hotspots in your witnessed list, the more likely you'll have higher mining rewards. This is heavily influenced by the transmit scale of the Hotspots you witness. - -In the App, for any Hotspot, tap on Hotspots Witnessed and you'll find the average transmit scale of all Hotspots in that list. The higher the transmit scale, the higher the rewards. This is why it's important to optimize your antenna placement so it can witness Hotspots in lesser populated areas and higher transmit scales. - - - -### Witness List Resets -Any time a Hotspot updates its location, antenna, or elevation, the list automatically resets. This does not affect earnings. - -## Relayed Hotspots and the importance of opening ports - -Relayed Hotspots do not just affect the Hotspot owner, but can affect its neighbors and the network. - -### Relayed Hotspot as a Challenger -When a Hotspot that is relayed issues a challenge, the receipt (or acknowledgement of the challenge) by the challengee and witnessing Hotspots may not arrive in time to be accepted. Why? Because the receipt has to traverse various other Hotspot connections in order to arrive at the relayed challenger. - -Any witnesses that heard the beacon will have issues submitting their receipts to the challenger in a timely manner. - -The Challenger does not earn HNT, Challengee (Beaconer) does not earn HNT, witnesses do not earn HNT. - - -Thanks to @oktyvm for these awesome graphics! - - - -### Relayed Hotspot as a Challengee (Beaconer) -A Challenger that sends a request to the Challengee expects an acknowledgement or a receipt by the Challangee within a certain period of time. If the Challengee is relayed, the initial request can take too long to arrive at the relayed Hotspot, and the request becomes stale and invalid. - -The Challenger does not earn HNT, Challengee (Beaconer) does not earn HNT. - - -Thanks to @oktyvm for these awesome graphics! - - - -### Relayed Hotspot as a Witness -Hotspots that witness Beacons have to submit their receipt to the Challenger in a timely manner in order to earn HNT. If the witnessing Hotspot is relayed, then they are unlikely to submit their receipt in time. - - -Thanks to @oktyvm for these awesome graphics! - - - - - -:::info - -To figure out if your Hotspot is relayed, check explorer, the app, or the API itself. Go to api.helium.io/v1/hotspots/:hotspot_address, and look at "listen_addrs". If there is a /p2p/ connection there, the Hotspot is relayed. - -::: - -Visit the Network Troubleshooting guide for more information. - -# FAQ -**My Hotspot went from x witnesses to y! What's wrong? I didn't do anything!** - -This is normal! The witnesses in the list is a historical summary of who your Hotspot has witnessed. This number can vary day to day and only Hotspots that sent receipts back to the challenger in a timely manner is included. - -**My witnesses dropped to zero! Will this affect my earnings?** - -Witnesses reset when a Hotspot updates its location, antenna dBi, or elevation. There is nothing to be concerned about and this will not affect your earnings. Keep in mind that as the network grows, the rewards going to each Hotspot goes lower day over day. - -However, if your Witnessed List is consistently zero without updating your location, antenna gain, or elevation, check your internet connection, that the Hotspot is online, and that there are no obstructions in the way of the antenna. - diff --git a/docs/use-the-network/community-projects/community-projects.mdx b/docs/use-the-network/community-projects/community-projects.mdx deleted file mode 100644 index ae9eae7d0..000000000 --- a/docs/use-the-network/community-projects/community-projects.mdx +++ /dev/null @@ -1,296 +0,0 @@ ---- -id: community-projects -sidebar_label: Community Projects -slug: /use-the-network/community-projects ---- - -# Community Projects - -Developers are using the Helium Network for hundreds of IoT and sensing applications. Here is a snapshot of what's being built. All these projects are hosted on the [Helium Hackster Community](https://www.hackster.io/helium). - - - -### Agricultural - - -    - -
- -    - -
- -### Dashboards - - -    - -
- - -### Environmental - - -    - -
- -    - -
- -    - -
- - -### Healthcare - - - -    - -
- -    - -
- - -### Industrial - - -    - -
- -    - -
- - - -### Security - - - - -### Tracking - - -    - -
- -    - -
- -    - - - - -### Utility - - -    - -
- -    - - diff --git a/docs/use-the-network/console/adding-devices.mdx b/docs/use-the-network/console/adding-devices.mdx deleted file mode 100644 index c4ecb18c7..000000000 --- a/docs/use-the-network/console/adding-devices.mdx +++ /dev/null @@ -1,88 +0,0 @@ ---- -id: adding-devices -sidebar_label: Adding Devices -slug: /use-the-network/console/adding-devices ---- - -# Adding Devices - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -### When Adding Devices for the First Time - -As network usage increases, a mechanism called the XOR filter allows the Console backend (router) to only process known traffic and avoid spending resources on unfamiliar packets, which significantly improves performance. - -However, the first time a device joins the network its keys need to be added to the blockchain and the updated block propagated to the miners (Hotspots). - -This initial join process could take up to 20 mins depending on: - -- when this transaction (batched with others) gets added to the blockchain -- the overall performance of the blockchain - -After the initial join takes place future rejoining of the same device will be much quicker. - -More information about XOR filters [here](https://engineering.helium.com/2021/07/29/console-updates-2.0.html). - -:::info -For a video tutorial on adding and importing devices, check out our Tips and Tricks video [here](https://youtu.be/ntr839pqWpg). -::: - -To add a device, go to **Devices** and click the **+ Add Device** icon. The Add New Device screen appears. - - - -Enter a name for your device. Device names do not have to be unique \(as every -device will be given a unique identifier generated by Console\). - -`DevEUI`, `AppEUI`, and `AppKey` are auto generated by the Helium Console when you create -a new device. - -However, you can input your own `DevEUI`, `AppEUI`, and `AppKey` -if your device is already provisioned with these credentials. - -- **Device EUI** - 64-bit end-device identifier, sometimes called Manufacturer - EUI -- **App EUI** - 64-bit application identifier -- **App Key** - 128-bit AES key, used to secure communication between device and - network - -Once added, you'll see a consolidated view of all your device details, as well -as the Activation Method \(only `OTAA` is currently supported\). - - - -## Importing Devices -Console provides a simple way to batch add multiple devices using a CSV file. - -To add a device, go to Devices and click the + Add Device icon. - -Under Import Devices choose a .csv file that contains the information for the imported devices. The .csv file needs to include the following fields as required columns: `DevEUI`, `AppEUI`, `AppKey`, and `Name`. Optionally you can include a `LabelID` column to add labels to imported devices. - - - -## Important Information When Adding Devices - - -### Potential Delays Related to Sub-band - -LoRaWAN devices may behave differently from one manufacturer to another. If your device does not try all 8 sub-bands, then you will need to ensure it is trying to communicate on the correct sub-band, which is sub-band 2. - -### MSB vs LSB; and using the Correct Endianness - -When copying EUIs and Keys into your device software, or into Console, make sure -you are using the correct byte ordering, known as "endianness". This is often -labeled as `MSB` \(Most Significant Bit\) and `LSB` \(Least Significant Bit\). -Reversing byte order is a very common mistake when adding a new device to the -network. On the device details page in Console, you can easily switch the byte -order of the EUIs and Key by cliking the `lsb` or `msb` label next to them. - -### Is The Helium Network a Public or Private LoRaWAN? - -The Helium Network is a Public LoRaWAN Network. You can read more about the -unique, blockchain-driven architecture [here](/blockchain). diff --git a/docs/use-the-network/console/alerts.mdx b/docs/use-the-network/console/alerts.mdx deleted file mode 100644 index 1390bcbe7..000000000 --- a/docs/use-the-network/console/alerts.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -id: alerts -sidebar_label: Alerts -slug: /use-the-network/console/alerts ---- - -# Alerts - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Alerts (email or webhooks) can be configured for a number of conditions related to devices and integrations including when devices are deleted, or when integrations are updated or deleted. - -User types (e.g., Administrator or Managers) can be specified to receive alerts. - -For a video walkthrough of how to set up Alerts in Console, check out our Tips & Tricks video [here](https://youtu.be/8zt6W_FCQcM). - -### Configuring Alerts - -To configure alerts from the Flows workspace, select a Device/Label node or Integration node depending on the type of alert to configure and select the Inspector tab. - -Select an existing alert or create a new one. - -To create a new one, select Create New Alert choose a name, alert type (email, webhook), and the alert. - - - -**Note:** For webhook alerts, obtain a webhook key for authorization by choosing Organizations from the side menu and copying relevant webhook key. \ No newline at end of file diff --git a/docs/use-the-network/console/api.mdx b/docs/use-the-network/console/api.mdx deleted file mode 100644 index 1befe1394..000000000 --- a/docs/use-the-network/console/api.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -id: console-api -sidebar_label: API -slug: /use-the-network/console/api ---- - -# Console API - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -The Console API lets you interact with the console via HTTP Requests. You can -either do that directly using the HTTP API or you can leverage the CLI, which -abstracts the API and provides higher level features like importing devices from -other network providers. - -View the API Specification [here](/api/console) diff --git a/docs/use-the-network/console/cli.mdx b/docs/use-the-network/console/cli.mdx deleted file mode 100644 index 3615a5b02..000000000 --- a/docs/use-the-network/console/cli.mdx +++ /dev/null @@ -1,146 +0,0 @@ ---- -id: console-cli -sidebar_label: CLI -slug: /use-the-network/console/cli ---- - -# Console CLI - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Introduction - -The Command Line Interface \(CLI\) allows you to interact with the Console API -without making HTTP Requests, but instead via a command line prompt. It's ideal -for mass provisioning or for integrating onto a production line. - -In addition, it has certain high-level features for account setup like importing -devices from other network providers. - -## Installation - -Download a compiled release -[here](https://github.com/helium/helium-console-cli/releases) for your -appropriate platform. - -## API Key - -You must activate [an API key](api#api-key) before using the CLI. - -The first time you run the CLI, it will prompt you for this key. It will save -the key in a local file: `.helium-console-config.toml` - -## Usage - -### Features - -You can view the most current commands, features, and documentation by accessing -the help menus. For example: `helium-console-cli --help` or -`helium-console-cli device --help`. - -Current high level features are: - -- create and delete devices records, using \(app_eui, app_key, dev_eui\) or UUID -- list all device records -- create and delete labels by UUID -- create and delete device labels, by using \(device_uuid, label_uuid\) -- import devices from The Things Network \(TTN\ - - ) - -### Examples - -Let's create a device: - -```text -helium-console-cli device create 000A000100000046 CB67C92DD5898D07872224202DED7E76 DEADBEEF23F23454 foo -``` - -You'll get a response with the full record of this new device: - -```text -Device { - app_eui: "000A000100000046", - app_key: "CB67C92DD5898D07872224202DED7E76", - dev_eui: "DEADBEEF23F23454", - id: "03f5967a-7c79-42a2-bd5f-6e51015e73e3", - name: "foo", - organization_id: "07273bc4-4bc9-44ec-b4d5-ad320f162e15", - oui: 1, -} -``` - -You can view this device again by either \(app_eui, app_key, dev_eui\) or by -id/uuid. For example: - -```text -helium-console-cli device get 000A000100000046 CB67C92DD5898D07872224202DED7E76 DEADBEEF23F23454 -``` - -or - -```text -helium-console-cli device get-by-id 03f5967a-7c79-42a2-bd5f-6e51015e73e3 -``` - -These commands will return the same record as above. - -Similarly, you may delete the device: - -```text -helium-console-cli device delete 000A000100000046 CB67C92DD5898D07872224202DED7E76 DEADBEEF23F23454 -``` - -or - -```text -helium-console-cli device delete-by-id 03f5967a-7c79-42a2-bd5f-6e51015e73e3 -``` - -Finally, at any time, you may list all your devices: - -```text -helium-console-cli device list -``` - -Which will return an array of all your devices: - -```text -[ - Device { - app_eui: "000A000100000046", - app_key: "CB67C92DD5898D07872224202DED7E76", - dev_eui: "DEADBEEF23F23454", - id: "03f5967a-7c79-42a2-bd5f-6e51015e73e3", - name: "foo", - organization_id: "07273bc4-4bc9-44ec-b4d5-ad320f162e15", - oui: 1, - } -] -``` - -### TTN Import - -To start an import session, use the ttn import command: - -```text -helium-console-cli ttn import -``` - -You will be prompted for a ttnctl access code, which you can generate by -clicking on `ttnctl access code` [here](https://account.thethingsnetwork.org/). -This single-use access code is valid for 5 minutes. During this time the CLI may -use the code to request an OAuth2 token; it expires after 60 minutes. - -The CLI's prompts will help you: - -- select to import from a single application or all applications \(maximum 10, - otherwise the OAuth2 token is "used up"\) -- you may import all the devices at once or you may approve device import one by - one. -- you may use the TTN App ID as an automatic label for every device or you may - approve device labelling one by one - -The import process tolerates attempts to re-import or re-label the same device. -As such, you may re-run the script to label devices with the TTN App ID even if -you already imported the devices during a previous session. diff --git a/docs/use-the-network/console/console.mdx b/docs/use-the-network/console/console.mdx deleted file mode 100644 index 2f273d32a..000000000 --- a/docs/use-the-network/console/console.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: console -sidebar_label: Helium Console -slug: /use-the-network/console ---- - -# Helium Console - -The [Helium Console](http://console.helium.com/) is a web-based device -management tool that allows developers to register, authenticate, and manage -their devices on the Helium network. In addition to device management, Console -provides prebuilt connections called Integrations to route device data via HTTPs -or MQTT; or directly to cloud services like AWS IoT. - -Device Management includes: - -- Flows: a visual-centric view of the key elements in Console and allows users to instantly understand the relationship among devices, functions, and integrations. -- Organization structure with labels, and user-level permissions -- Device ID registration and seamless, secure onboarding and authentication -- Data Credits for utilizing the Helium Network - -Console is available as a free to use hosted application at [console.helium.com](https://console.helium.com). - -Learn more about how to get started using Console with our Tips and Tricks videos [here](https://www.youtube.com/playlist?list=PLtKQNefsR5zNjWkXqdRXeBbSmYWRJFCuo). - -### Getting Started - -* [Console Quickstart](/use-the-network/console/quickstart) - -### Devices -* [Adding/Importing](/use-the-network/console/adding-devices) -* [Migrating](/use-the-network/console/migrating-devices) -* [Grouping](/use-the-network/console/labels) - -### Data -* [Transferring (Integrations)](/use-the-network/console/integrations) -* [Decoding](/use-the-network/console/functions) -* [Monitoring Gateways/Hotspots](/use-the-network/console/coverage) - -### Configurations -* [Node Interface (Flows)](/use-the-network/console/flows) -* [Alerts](/use-the-network/console/alerts) -* [Multiple Packets](/use-the-network/console/multi-packets) -* [Configuration Profiles (ADR, CF List, Receive Windows)](/use-the-network/console/profiles) - -### Admin -* [Users and Organizations](/use-the-network/console/users) -* [Data Payment](/use-the-network/console/data-credits) -* [CLI](/use-the-network/console/cli) -* [API](/use-the-network/console/api) -* [Account Security and API Keys](/use-the-network/console/my-account) - -### Issues -* [Debug](/use-the-network/console/debug) -* [Troubleshooting](/use-the-network/console/troubleshooting) \ No newline at end of file diff --git a/docs/use-the-network/console/coverage.mdx b/docs/use-the-network/console/coverage.mdx deleted file mode 100644 index 38ba73b59..000000000 --- a/docs/use-the-network/console/coverage.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -id: coverage -sidebar_label: Coverage -slug: /use-the-network/console/coverage ---- - -# Coverage - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Coverage provides visibility for Hotspots that transfer device packets as well as the status of those Hotspots within Console. - -:::info -To learn more about Coverage in Console, check out our Tips & Tricks video [here](https://youtu.be/Woh4RooY6L8). - -::: - -## Identify Hotspots that hear devices -Coverage makes it easy to identify which Hotspots have transferred an organization’s device packets. The `Coverage Breakdown` list is automatically populated with Hotspots that have sent traffic in the last 24 hrs for devices belonging to the Organization. - -:::info -Only Hotspots that have successfully transferred packets are displayed on the Coverage Breakdown tab. To show all Hotspots on this tab within range of the device, turn on Multiple Packets [here](/use-the-network/console/adr#multiple-packets) and choose to purchase all packets. Assuming there’s sufficient Data Credit balance, Console will purchase packets from all the Hotspots that heard the device and display them. - -::: - -`My Hotspots` is a simple way to filter and view only Hotspots users want to see. Select the flag icon next to a Hotspot name for it to appear in the My Hotspots list. - -If a Hotspot has not transferred data but is still of interest, simply navigate to `Hotspot Search` run a search for it, and it will appear in the My Hotspots list. Users can also use a wallet address and all Hotspots associated with that wallet address will appear. - -## Monitoring Hotspots stats and status -Coverage displays a number of Hotspots details including Hotspot location, packets transferred, and number of devices that it’s “seen”. - -Simply click a Hotspot name to view more detailed Hotspot stats. Depending on the tab, users can display overall stats (`Statistics` tab) or a list of the devices heard from the last 24 hours with the `My Devices Heard` tab. - -Clicking any device name takes users to the specific device page for more details. - -## Creating Hotspot Aliases -Coverage allows users to easily create an alias for easier identification of the Hotspot. Click a Hotspot name, then under its animal name, click `No Alias` to define an Alias. - - - - diff --git a/docs/use-the-network/console/data-credits.mdx b/docs/use-the-network/console/data-credits.mdx deleted file mode 100644 index 49855c825..000000000 --- a/docs/use-the-network/console/data-credits.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: data-credits -sidebar_label: Data Credits -slug: /use-the-network/console/data-credits ---- - -# Data Credits - -Data Credits (DCs) are central to the Helium Blockchain and Network. Read about -how they fit into our Tokenomics -[here](/blockchain/helium-token#data-credits-and-burn-and-mint-economics). - -For a video tutorial of how to purchase Data Credits on Console, check out our Tips & Tricks video [here](https://youtu.be/jyMGLymuOCE) - -:::info - -You can use the [Helium Data Credit Calculator](https://www.helium.com/use) to -understand exactly how much it will cost to send device data on the Network. - -::: - -Not only are DCs critical for asserting new Hotspots and their location on the -blockchain, registering OUIs and devices, but they are also used to pay for -every single uplink packet that is sent on the Helium network including inital -Joins. Downlinks, and ACKS do not require Data Credits. - -Every 24 bytes sent in an uplink or downlink packet cost 1 DC = $.00001. - -Unlike traditional wireless networks, the Helium Network has no annual fee and -you only pay for data you use. This transaction occurs between the Miner (which -runs on every Helium Hotspot) and the Helium LoRaWAN Network Server, identified -by the OUI, of the device owner. - -The transaction is as follows: - -- A Miner receives a packet and determines who it belongs to -- The Miner dials the appropriate Helium LoRaWAN Network Server and offers the - packet -- The Helium LoRaWAN Network Server expresses interest in the packet and accepts - delivery -- The Miner provides the packet under the promise that the LoRaWAN Network Server - will “burn a DC” in the name of the Miner - -You may have noticed that the final step includes a promise from the Helium -LoRaWAN Network Server. The principle at work here is that each packet in its -own is quite insignificant in value and so the Miner is willing to extend this -service of delivery in exchange for the promise; by doing such, usage experiences -low latencies. Should the Helium LoRaWAN Network Server fail to fulfill its -promise, the Miner would place the Helium LoRaWAN Network Server on a deny list -and would no longer route packets from any devices to this Helium LoRaWAN -Network Server. diff --git a/docs/use-the-network/console/debug.mdx b/docs/use-the-network/console/debug.mdx deleted file mode 100644 index 025efb398..000000000 --- a/docs/use-the-network/console/debug.mdx +++ /dev/null @@ -1,317 +0,0 @@ ---- -id: debug -sidebar_label: Debug -slug: /use-the-network/console/debug ---- - -# Debug - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -The Console Debug tool allows you to quickly and easily examine device messages. -This enables you to verify and debug issues much more easily without requiring -the data to be sent to an application endpoint first. For security and privacy reasons the -Debug tool does not persist data. Instead, the 40 most recent events are -accumulated from the time the Debug window is opened. - -### Using The Debug Tool - -The Debug tool is located on the upper right side of every device page \(shown -in the image below\). To access it, just click the Debug tab and a window will -pop out. - - - -At first you will see a spinning wheel and the message *waiting for data.* This -is because the Debug tool only shows packets that come through while the window -is open. - - - -Once packets are received or sent down to your device, you will see them display -immediately in the Debug window, seen here: - - - -### Debug Packet Types - -The Debug tool will display a message for every uplink or downlink. For detailed -information on the contents of the messages please see the JSON schema -documentation. - -:::info -Payloads shown in the debug messages are -[base64 encoded](https://en.wikipedia.org/wiki/Base64), as are the JSON messages -received by integrations. You will need to decode the payload strings in order -to correctly interpret the payload data. One way to do this is to use a -[Function Decoder](functions). -::: - -#### Activation - -When your device first joins the network, you will see a special uplink message -just for the activation, which will not have a payload, as shown below, and only -includes a single hotspot. - -```text -{ - "channels": [], - "devaddr": null, - "device_name": "Helium Dev Kit", - "frame_down": 0, - "frame_up": 1, - "hotspots": [ - { - "frequency": 903.9000244140625, - "id": "11D86CyMMt685XcsddPtaChWr3qz2UxDyhGG5EUeZbwqemxjBMb", - "name": "fancy-rusty-toad", - "rssi": -35, - "snr": 11.5, - "spreading": "SF10BW125" - } - ], - "id": "2091f225-4b7c-4524-a2c1-5f41fb429099", - "payload": null, - "payload_size": 0, - "port": 0 -} -``` - -#### Uplink - -For uplink packets, a message similar to the one below will be shown. In -addition to the original uplink message data, which starts at the very bottom, -these packet types will also show a message for each integration attached to the -device, so that you can examine what is being sent to those endpoints. For the -message shown below, you can see there is a message for a **RequestBin** and -**Cayenne** Integrations attached to this device. You can differentiate uplink -messages by keeping track of the `frame_up` count. - -```text -{ - "channels": [ - { - "debug": { - "req": { - "body": { - "app_eui": "5C23E22B09F08C65", - "dev_eui": "00D644FC35CFC35E", - "devaddr": "94020048", - "downlink_url": "https://console.helium.com/api/v1/down/a22f600d-8453-4eac-912d-83f713f1df2b//d2c7b8dc-221a-4ec8-aedd-6c19ae348a33", - "fcnt": 1, - "hotspots": [ - { - "channel": 10, - "frequency": 904.2999877929688, - "id": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88", - "lat": 37.76921631427912, - "long": -122.40353864671341, - "name": "rare-burlap-python", - "reported_at": 1593801826, - "rssi": -46, - "snr": 9.800000190734863, - "spreading": "SF9BW125", - "status": "success" - }, - { - "channel": 10, - "frequency": 904.2999877929688, - "id": "117ei8DWNjSFuLgg3BrtTNSTi2tt14LRUFgt1Bk2kYqkHWrg82c", - "lat": 37.850571034925125, - "long": -122.24405901009771, - "name": "square-goldenrod-gorilla", - "reported_at": 1593801826, - "rssi": -73, - "snr": 10, - "spreading": "SF9BW125", - "status": "success" - } - ], - "id": "d2c7b8dc-221a-4ec8-aedd-6c19ae348a33", - "metadata": { - "labels": [ - { - "id": "153baa5c-9bbe-4afb-bab4-a13358f2638d", - "name": "RequestBin", - "organization_id": "ef7c0454-177f-4ef3-aaab-d2a9ba6e9d15" - }, - { - "id": "fe5d41e4-82e6-4ea5-8e6e-e94aed3de79a", - "name": "Cayenne Integration", - "organization_id": "ef7c0454-177f-4ef3-aaab-d2a9ba6e9d15" - } - ] - }, - "name": "Helium Dev Kit", - "payload": "SGVsbG8sIFdvcmxkIQA=", - "port": 1, - "reported_at": 1593801826 - }, - "headers": { - "Content-Type": "application/json" - }, - "method": "post", - "url": "https://lora.mydevices.com/v1/networks/helium/uplink" - }, - "res": { - "body": "", - "code": 200, - "headers": { - "Connection": "keep-alive", - "Content-Length": "0", - "Date": "Fri, 03 Jul 2020 18:43:47 GMT", - "cache-control": "no-cache", - "vary": "origin" - } - } - }, - "description": "Connection established", - "id": "a22f600d-8453-4eac-912d-83f713f1df2b", - "name": "CayenneIntegration", - "status": "success" - }, - { - "debug": { - "req": { - "body": { - "app_eui": "5C23E22B09F08C65", - "dev_eui": "00D644FC35CFC35E", - "devaddr": "94020048", - "downlink_url": "https://console.helium.com/api/v1/down/897780bc-6980-42c1-a659-30077e8dbcd1/h4IxFDle6biV1ZKmrUJamaXhKjRRF3c-/d2c7b8dc-221a-4ec8-aedd-6c19ae348a33", - "fcnt": 1, - "hotspots": [ - { - "channel": 10, - "frequency": 904.2999877929688, - "id": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88", - "lat": 37.76921631427912, - "long": -122.40353864671341, - "name": "rare-burlap-python", - "reported_at": 1593801826, - "rssi": -46, - "snr": 9.800000190734863, - "spreading": "SF9BW125", - "status": "success" - }, - { - "channel": 10, - "frequency": 904.2999877929688, - "id": "117ei8DWNjSFuLgg3BrtTNSTi2tt14LRUFgt1Bk2kYqkHWrg82c", - "lat": 37.850571034925125, - "long": -122.24405901009771, - "name": "square-goldenrod-gorilla", - "reported_at": 1593801826, - "rssi": -73, - "snr": 10, - "spreading": "SF9BW125", - "status": "success" - } - ], - "id": "d2c7b8dc-221a-4ec8-aedd-6c19ae348a33", - "metadata": { - "labels": [ - { - "id": "153baa5c-9bbe-4afb-bab4-a13358f2638d", - "name": "RequestBin", - "organization_id": "ef7c0454-177f-4ef3-aaab-d2a9ba6e9d15" - }, - { - "id": "fe5d41e4-82e6-4ea5-8e6e-e94aed3de79a", - "name": "Cayenne Integration", - "organization_id": "ef7c0454-177f-4ef3-aaab-d2a9ba6e9d15" - } - ] - }, - "name": "Helium Dev Kit", - "payload": "SGVsbG8sIFdvcmxkIQA=", - "port": 1, - "reported_at": 1593801826 - }, - "headers": { - "Content-Type": "application/json" - }, - "method": "post", - "url": "https://enyfenof1pbel.x.pipedream.net/" - }, - "res": { - "body": { - "success": true - }, - "code": 200, - "headers": { - "Access-Control-Allow-Origin": "*", - "Connection": "keep-alive", - "Content-Length": "16", - "Content-Type": "application/json; charset=utf-8", - "Date": "Fri, 03 Jul 2020 18:43:47 GMT", - "X-Powered-By": "Express", - "x-pd-status": "sent to primary" - } - } - }, - "description": "{\"success\":true}", - "id": "897780bc-6980-42c1-a659-30077e8dbcd1", - "name": "RequestBin", - "status": "success" - } - ], - "devaddr": "94020048", - "device_name": "Helium Dev Kit", - "frame_down": 1, - "frame_up": 1, - "hotspots": [ - { - "frequency": 904.2999877929688, - "id": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88", - "name": "rare-burlap-python", - "rssi": -46, - "snr": 9.800000190734863, - "spreading": "SF9BW125" - }, - { - "frequency": 904.2999877929688, - "id": "117ei8DWNjSFuLgg3BrtTNSTi2tt14LRUFgt1Bk2kYqkHWrg82c", - "name": "square-goldenrod-gorilla", - "rssi": -73, - "snr": 10, - "spreading": "SF9BW125" - } - ], - "id": "3d62df26-a153-406c-ab85-028a5107d681", - "payload": "SGVsbG8sIFdvcmxkIQA=", - "payload_size": 14, - "port": 1 -} -``` - -#### Downlink / ACK - -`Downlink` and `ACK` messages will only show a single hotspot, similar to the -activation message. You can differentiate downlink messages by keeping track of -the `frame_down` count. - -```text -{ - "channels": [], - "devaddr": null, - "device_name": "Helium Dev Kit", - "frame_down": 2, - "frame_up": 1, - "hotspots": [ - { - "frequency": 903.9000244140625, - "id": "11D86CyMMt685XcsddPtaChWr3qz2UxDyhGG5EUeZbwqemxjBMb", - "name": "fancy-rusty-toad", - "rssi": -35, - "snr": 11.5, - "spreading": "SF10BW125" - } - ], - "id": "2091f225-4b7c-4524-a2c1-5f41fb429099", - "payload": null, - "payload_size": 0, - "port": 0 -} -``` diff --git a/docs/use-the-network/console/flows/actions.mdx b/docs/use-the-network/console/flows/actions.mdx deleted file mode 100644 index 2ec32c8c5..000000000 --- a/docs/use-the-network/console/flows/actions.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -id: actions -sidebar_label: Common Flow Actions -slug: /use-the-network/console/flows/actions ---- - -# Common Flows Actions - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Frequent actions performed from the Flows workspace include the following: - -- creating node elements -- adding nodes to the workspace -- accessing debug mode -- viewing the inspector - -### Creating Node Elements - -To use Flows the node elements (devices, labels, integrations, and functions) must already have been created. - -To create any node element from the Flows workspace, click the **+** circle and choose the desired node element. - - -### Adding Nodes to the Workspace -Important the core node elements must have been previously created before you can add them to the workspace (for info on creating node elements go here). - -To add nodes to the workspace, go to the Nodes list, click **+**. - - - -The Nodes panel appears: - - - -### Accessing Debug mode - -Debug mode shows packet transfer in real time. - -To access Debug mode from the Flows workspace, select a device or label and click the Debug mode tab. - - - -### Viewing the Inspector - -The Inspector allows users to see node details, remove nodes/edges, as well as make limited changes. - - - - -### Add Labels to Devices - -To add a label to a device from the Flows workspace, select the desired label, then on the Inspector choose from the Quick Action menu. - - - diff --git a/docs/use-the-network/console/flows/flows-faq.mdx b/docs/use-the-network/console/flows/flows-faq.mdx deleted file mode 100644 index 37f19c8d3..000000000 --- a/docs/use-the-network/console/flows/flows-faq.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -id: flows-faq -sidebar_label: Frequently Asked Questions -slug: /use-the-network/console/flows/flows-faq ---- - -# Frequently Asked Questions - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -### What’s changed in Helium Console? - -The biggest new feature of Console is Flows. -Flows is a visual-centric view of the key elements in Console and allows users to instantly understand the relationship among devices, functions, and integrations. Flows enables users to visually connect nodes and control the flow of data. - -### What’s the same in Helium Console? - -The interface and work flows for the following have remained largely unchanged: -- Data Credits -- Organizations -- Users - -### Why did you make these updates to Console? - -Based on learnings from your feedback, the team wanted to deliver a much more streamlined and intuitive experience to accomplish core user goals including adding devices, defining functions, and setting up integrations to transfer data to endpoints. - -### Do labels still exist? Do I still need labels? What capabilities do labels have? - -Yes. Labels will still exist to organize and manage devices. Users can choose to apply a single or multiple Labels to as many devices as needed; for example, to identify a sensor type like a "temp sensor" or location of the sensor. Anytime Labels are updated the changes flow to all devices with the Labels. - -### What happens to functionality that used to be tied to labels (ADR, Notifications, multiple packet purchases)? - -This functionality still exists. ADR and CF List can be directly applied to a device or group of devices. With notification and packet purchase users can define these features with general settings and apply to devices or groups of devices in the Flows workspace. - -### What will happen to devices and settings when you migrate Console to the production server? - -Nothing. Your devices and configurations will be preserved and you won’t need to take any action. - -### What happens to my Data Credit balance? -This migration has no impact on Data Credit balances. \ No newline at end of file diff --git a/docs/use-the-network/console/flows/flows.mdx b/docs/use-the-network/console/flows/flows.mdx deleted file mode 100644 index 3811cb608..000000000 --- a/docs/use-the-network/console/flows/flows.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -id: flows -sidebar_label: Flows -slug: /use-the-network/console/flows ---- - -# Flows - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -Welcome to Flows. Flows is a visual-centric view of the key elements in Console and allows users to instantly understand the relationship among devices, functions, and integrations. Flows enables users to visually connect nodes and control the flow of data. - -Although Flows is a new feature, it’s designed to be much more intuitive based on core user goals of adding devices, defining functions, and setting up integrations to transfer data to their endpoints. - -For a video walkthough of the basic Flows functions, check out our Tips and Tricks video [here](https://youtu.be/XrbN1CHApBI). - -- [Flows Orientation](/use-the-network/console/flows/orientation) -- [Common Actions](/use-the-network/console/flows/actions) -- [Frequently Asked Questions](/use-the-network/console/flows/flows-faq) \ No newline at end of file diff --git a/docs/use-the-network/console/flows/orientation.mdx b/docs/use-the-network/console/flows/orientation.mdx deleted file mode 100644 index a944de275..000000000 --- a/docs/use-the-network/console/flows/orientation.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -id: orientation -sidebar_label: Flows Orientation -slug: /use-the-network/console/flows/orientation ---- - -# Flows Orientation - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -The main elements of Flows are: - -- [The Workspace](#workspace) -- [Nodes and Edges](#nodes-and-edges) -- [Inspector](#inspector) -- [Debug Mode](#debug-mode) - - -## Workspace -The Workspace is where you access and manipulate nodes, make connections among nodes, and make node configuration settings using the Inspector. - -The Workspace is optimized for manipulation of visual elements, and there’s a subset of configuration changes that can be made via the Inspector. - -Whenever you change elements on the workspace, save your changes so it’s the same when you come back to it after navigating to other parts of Console. - -## Nodes and Edges - -### Nodes - -Nodes are graphical representations of Console elements and for quick identification are color coded. Connection points are used to create relationships among nodes. - - -Devices: device nodes represent the hardware that is sending the packets. Since devices are the source of data and integrations can only receive data there’s only one connection point for edges. - - - -Labels: label nodes represent a group of devices with a common - - - -Functions: users can transform and/or parse payloads before sending to an endpoint. Functions can both receive data from devices and continue sending data after taking action to integrations. - - - - - -Integrations: enable devices to customer endpoints over HTTP or MQTT. - - - - -### Edges - -Edges represent the flow of data from device or label nodes moving from left to right. Edges use connection points create relationships among nodes. - -Users can control the flow of device data using edges to provide the following connections from devices/groups of devices (via labels): -- to integrations -- to functions -- to function and on to integrations - - - -## Inspector -The Inspector provides the ability to: -- Visually inspect node details -- Make common node configuration changes -- Access node in other areas of Console for more complete edits - - - -To access the Inspector simply click a node and different options appear for the following: - -- Devices or Labels -- Functions -- Integrations - -## Debug Mode - -The Console Debug tool allows you to quickly and easily examine device messages. This enables you to verify and debug issues much more easily without requiring the data to be sent to an application endpoint first. For security and privacy reasons the Debug tool does not persist data. Instead, the 40 most recent events are accumulated from the time the Debug window is opened. - - - -For more information about Debug Mode go [here](/use-the-network/console/debug). \ No newline at end of file diff --git a/docs/use-the-network/console/functions.mdx b/docs/use-the-network/console/functions.mdx deleted file mode 100644 index 25ee11d9f..000000000 --- a/docs/use-the-network/console/functions.mdx +++ /dev/null @@ -1,123 +0,0 @@ ---- -id: functions -sidebar_label: Functions -slug: /use-the-network/console/functions ---- - -# Functions - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -You can now execute functions on Console! With the Decoder Function, users can -transform and/or parse a raw payload before it is posted to an endpoint. - -When a Decoder Function is applied to a device or integration the -Decoder Function code is executed on the payload sent by the device. The Decoder -Function can be written using custom JavaScript code provided by the user or -selected from prebuilt decoders \(currently Browan Object Locator and Cayenne -LPP\). - -Console decoders are compatible with The Things Network \(TTN\) decoders, which -are already available for a wide variety of devices. - -In addition, to providing a custom decoder a growing list of community-created functions can be found [here](https://github.com/helium/console-decoders). - -For more information on how to create and attach functions, check out our Tips and Tricks video [here](https://youtu.be/UNUOLbIKXww). - - -## A Primer on Encoding and Decoding - -LoRaWAN networks are, by design, low bandwidth. This means that we must make the -very most out of every byte that we send over the air. This also means that we -shouldn't send inefficient types like characters and strings. For example, to -represent a single English letter with the widely used ASCII encoding standard, -you have to use an entire byte. This makes sense if your data can only be stored -as English words, but in the case of IoT devices, there is often only the need -to store numeric values. For every transmission, we want to pack as much -information into as few bytes as possible. Because of this, there are special -encoding standards specifically made for sending common IoT device data such as -[CayenneLPP](https://developers.mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload). - -These types of standards allow you to easily encode your data much more -efficiently. Once your data has been received over the air by the network, there -is no longer the necessity of encoding the data with a standard that can make it -more challenging for humans to interpret. This is where Function Decoders come -in. They allow you to decode your device data so that you can interpret it for -debugging issues or translate it before sending it to your application or -another service. - -## Creating a Decoder Function - -:::info -**Decoder Library on GitHub** -If you have purchased an off-the-shelf device, it is likely that there already -exists a decoder you can use! We have a -[repository ](https://github.com/helium/console-decoders)that contains decoders -for a number of popular devices. -::: - -To begin creating a new function within the Helium Console, select Functions -from the left side navigation. Then create a new Function by clicking the -Add New Function **+** icon. [IMAGE] - -Name your new Function, select "Decoder" as Function Type, and "Custom Script" -as Format if you want to enter your own script, or select from the predefined -decoders. - - - -Next we need to enter the JavaScript that will decode our payloads for us. The -Script Validator allows you to easily test inputs in hexadecimal form to ensure -that your script will run successfully. - - - -### Decoder Function Definition - -The decoder function parameters will include the device uplink payload as an -array of bytes and the uplink port. You can return any valid type value which -will then be used at the decoder output. - -```text -function Decoder(bytes, port) { - - return decoded; -} -``` - -### Decoder Function Output - -The data returned by your function decoder will be included in an additional -decoded.payload field in the standard -[JSON message](integrations/json-schema), -it will not alter the original payload field. An example of the decoded field is -shown below. - -```text -"decoded": { - "payload": { - "BatV": 3.039, - "Ext_sensor": "Temperature Sensor", - "Hum_SHT": "53.8", - "TempC_DS": "327.67", - "TempC_SHT": "24.58" - }, - "status": "success" -}, -``` - -### Attaching Functions - -You need to attach functions to: - -- a device or a group of devices (via a label): This results in the function only being applied to the device payload in the Debug utility. - - - a device or group of devices (via a label) and an integration: This results in the function being applied to payloads before being sent to the integration. - -Easily attach functions to devices, labels, and integations in the Flows Workspace. For more information about Flows click here [https://docs.helium.com/use-the-network/console/flows](/use-the-network/console/flows/) diff --git a/docs/use-the-network/console/integrations/adafruitio.mdx b/docs/use-the-network/console/integrations/adafruitio.mdx deleted file mode 100644 index 83f98f5e3..000000000 --- a/docs/use-the-network/console/integrations/adafruitio.mdx +++ /dev/null @@ -1,98 +0,0 @@ ---- -id: adafruitio -sidebar_label: AdafruitIO -slug: /use-the-network/console/integrations/adafruitio ---- - -# Adafruit IO - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -[Adafruit IO](https://io.adafruit.com/) is a powerful but simple to use Internet -of Things platform from Adafruit. It makes data from devices useful by allowing -you to display, respond, and interact with it. You can sign up for a free -account at [https://io.adafruit.com](https://io.adafruit.com/). - -To add the integration in Console, go to **Integrations** on the left-hand menu. -Select the integration to add - in this case, the **Adafruit IO** integration as -shown below. - - - -The next step is to enter your Adafruit IO username and key. These can be found -by visiting [https://io.adafruit.com](https://io.adafruit.com/) and clicking -_MyKey_ in the top right corner as shown below. - - - -You will then be presented with both your username and key as shown below. - - - -Copy these values into the username and key fields in Console for the -integration configuration shown below. - - - -Last for this step, you can optionally change the group name that is set to -`{{device_id}}` by default. The group name is used to group one or more data -values that is received from a device and sent to AdafruitIO in a single -message. This name is used as the default because it is guaranteed to be unique -for every Helium device. You can use any of the the available template tags -which are auto populated when messages are actually sent, which are -`{{device_id}}`, `{{device_eui}}`, and `{{device_name}}`. This integration uses -group topics to send device data to AdafruitIO over MQTT, you can read more -about it [here](https://io.adafruit.com/api/docs/mqtt.html#group-topics). - -Next, let's name the integration in step 3. You will use this name to -identify the integration when attaching it to devices. - - - -The very last step is to select the decoder that will be used to decode the data -payload received from your device. We suggest using the _CayenneLPP_ decoder as -shown below and encoding your data with CayenneLPP as this will be a seamless -experience and not require any further configuration on Console. You can learn -more about CayenneLPP encoding -[here ](https://developers.mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload)as -well as find an Arduino library for it -[here](https://www.arduino.cc/reference/en/libraries/cayennelpp/). If you are -comfortable with writing your own decoder and template then simply select -_Custom_ and then search for your function decoder. Last be sure to click -_Create Integration_ to finish. - - - -## Connecting Integrations to Devices - -Devices or groups of devices (via labels) can be directly connected to integrations on the Flows Worskpace. Labels are identifiers used to group devices for easy management. To connect one or more devices to one or more integrations, simply connect the Device and Integration nodes on the Flows Workspace. - -:::info -Quick video tutorial connecting devices to an integration [here](https://www.youtube.com/watch?v=lnERw1f7TGE). -::: - -Node elements (devices, labels, integrations) need to be created before they're available on the Flows Workspace. More information about Flows [here](https://docs.helium.com/use-the-network/console/flows/). diff --git a/docs/use-the-network/console/integrations/akenza.mdx b/docs/use-the-network/console/integrations/akenza.mdx deleted file mode 100644 index f08f5d637..000000000 --- a/docs/use-the-network/console/integrations/akenza.mdx +++ /dev/null @@ -1,147 +0,0 @@ ---- -id: akenza -sidebar_label: Akenza -slug: /use-the-network/console/integrations/akenza ---- - -# Akenza - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -[Akenza](https://www.akenza.io/) is an IoT application enablement platform, -allowing you to build great IoT products and services with value. It connects, -controls, and manages IoT devices; all in one place. You can sign up for a free -account at [https://auth.akenza.io/register](https://auth.akenza.io/register). - -## Create Integration in Console - -To add the integration in Console, go to **Integrations** on the left-hand menu. -Select the integration to add - in this case, the **Akenza** integration as -shown below. - - - -Next you will need to navgigate to your Akenza portal in another browser window -in order to obtain the Akenza uplink secret. - -In the Akenza user portal, navigate to the **Data Flows** section as shown below -and click Create Data Flow in the top right. - - - -Next, select **HTTP** for connectivity. - - - -Next, name the device connector and select Helium for the decoding type. Lastly, -save the connector. - - - -Next, for simplicity we will pick the **Passthrough** device type and the E-Mail -connector to complete the data flow. Finally, click **Save Data Flow**. This -Data Flow will send an email every time the device transmits an uplink. - - - -To complete the integration creation on Console, copy the **Uplink Secret** as -shown below. - - - -Next, navigate back to your Console browser window, paste it in the **Uplink -Secret** field for step 2. Lastly, name the integration and click **Add -Integration** - - - -## Create Device in Akenza - -Before we connect the Akenza integration to our device in Console, we first need -to make Akenza aware of it. - -To do this, navigate back to your Akenza user portal window and create a new -device by going to the **Asset Inventory** section and clicking **Create -Device** in the top right as shown below. - - - -Next fill in details such as the name and description. At the very bottom, we -can establish the connection between this new device and the Data Flow we -created above with the new device. - - - -After filling in those details click Next. The final step to creating the new -device is to enter the Device EUI of the device from Console. **Important**, -this is not the ID on the Console device page, but the Device EUI as shown -below. Copy the Device EUI on the Console device page as shown below. - - - -Paste it in the Device ID field on Akenza, then finish by clicking **Create -Device**. - - - -This completes the steps required for setup on Akenza, but now we must connect -our device to the Akenza Integration on Console, follow the steps below. - -## Connect Akenza Integration to Device - -The final step to completing the Akenza integration with a device is to create a -flow connection. Navigate to the Flows page on Console, add the device and -integration nodes, and finally connect both of them as shown below. - - - -Your device data should now be flowing to Akenza once your device transmits an -uplink. diff --git a/docs/use-the-network/console/integrations/aws-iot-core.mdx b/docs/use-the-network/console/integrations/aws-iot-core.mdx deleted file mode 100644 index f9ab936fd..000000000 --- a/docs/use-the-network/console/integrations/aws-iot-core.mdx +++ /dev/null @@ -1,261 +0,0 @@ ---- -id: aws-iot-core -sidebar_label: AWS IoT Core -slug: /use-the-network/console/integrations/aws-iot-core ---- - -# AWS IoT Core - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -[AWS IoT Core](https://aws.amazon.com/iot-core/) is a powerful offering that -lets developers build device-based applications and services on the AWS Cloud. -And this Integration via Helium Console automates the complexity of securely -connecting your devices to AWS IoT Core. - -### Add an AWS IoT Core Integration - -To add an **AWS IoT Core Integration**, go to **Integrations** on the left-hand -menu. Select the integration to add - in this case, the **AWS IoT Core** -integration: - - - -The next step is to create a new user with limited permissions that this -Integration will use. - -Open up the [AWS Console](https://console.aws.amazon.com/) - -Under the Services menu in the upper-left, go to **Security, Identity, & -Compliance**->**IAM**: - - - -We are now going to create a new **User:** - - - -Set the user name to "**HeliumIntegrationAccess**" and select only -"**Programmatic access**" - - - -We now attach a policy to the newly created user that defines what permissions -they hold. - -Select "**Attach existing policies directly**" and type "**AWSIoTConfigAccess"** -into the "**Filter Policies**" box and check the box to the left of the row: - - - - - -:::warning -Ensure you record and store these keys securely, as you will not have -an opportunity to get access to them again! -::: - -Back in the **Helium Console**, enter the credentials we just created under -**AWS Connection Details,** as well as the AWS region that you would like AWS -IoT to run in. - - - -The **Topic** field is the AWS IoT MQTT topic that this integration will publish -uplink messages to, from devices. - -Finally, we give our new Integration a name and click **Create Integration**. Your new Integration is now ready for use. - -### Connecting Integrations to Devices - -Devices or groups of devices (via labels) can be directly connected to integrations on the Flows Worskpace. Labels are identifiers used to group devices for easy management. To connect one or more devices to one or more integrations, simply connect the Device and Integration nodes on the Flows Workspace. - -:::info -Quick video tutorial connecting devices to an integration [here](https://www.youtube.com/watch?v=lnERw1f7TGE). -::: - -Node elements (devices, labels, integrations) need to be created before they're available on the Flows Workspace. More information about Flows [here](https://docs.helium.com/use-the-network/console/flows/). - -## AWS IoT MQTT Topic composition: - -### Device Uplink \(Receive Data from Device\) - -This topic is defined in the **Topic** field when creating the AWS IoT -intgeration. - -**Subscribe to:** `{custom_topic}` - -### Device Downlink \(Send Data to Device\) - -**Publish to:** `helium/devices/{Device ID}/down` - -Example: `helium/devices/4f10d99a-e22e-4007-a3f0-6af3bc63acfe/down` - -## AWS IoT MQTT Messages - -To send data to a device, use JSON with a `payload_raw` field with a base64 -encoded string. -**Sending Data to Device \(Downlink\):** - -```javascript -{ - "payload_raw": "encoded_string" -} -``` - -When receiving data from a device, the messages will be in JSON and look like -the following. The data from the device is in the `payload` field, and is a -base64 encoded string. -**Receiving data from Device \(Uplink\):** - -```javascript -{ - "app_eui": "06B02F1A0E482128", - "dev_eui": "5F67F99E10B47006", - "devaddr": "1A2FB006", - "fcnt": 10, - "hotspots": [ - { - "frequency": 911.9000244140625, - "id": "112ErPy4pa8bRBQj9XgtRrHdk4i4ciTzB5gHwBbFupgNnwaGdExi", - "name": "mammoth-tartan-tortoise", - "reported_at": 1586466818, - "rssi": -57, - "snr": 12.5, - "spreading": "SF9BW125", - "status": "success" - }, - { - "frequency": 911.9000244140625, - "id": "112kFNJoxBYn7UWwZqUABrTXjhn7mkP8ePrbi6w9Hj1NXJfodwP3", - "name": "howling-gauze-guppy", - "reported_at": 1586466818, - "rssi": -91, - "snr": 13, - "spreading": "SF9BW125", - "status": "success" - } - ], - "id": "4f10d99a-e22e-4007-a3f0-6af3bc63acfe", - "metadata": { - "labels": [ - { - "id": "0ec71594-de64-4794-acd7-9ace0b7137a3", - "name": "aws-iot-integration-label", - "organization_id": "0c3fbfb6-f8ed-4dbe-af7c-1a86bf372764" - } - ] - }, - "name": "Sparkfun Pro RF", - "payload": "AWcA8AJodANzJ18Ecc04B9CYMAWGyVCIuDaw", - "port": 1, - "reported_at": 1586466818 -} -``` - -### Viewing Integration in AWS IoT Core - -Once our devices have been connected on the Flows Worskpace to our new Integration, -let's return to the [AWS Console](https://console.aws.amazon.com/), and go to -**IoT Core** under the **Services** menu: - - - -Here you are able to monitor the connections to AWS: - - - -When data comes in from the Helium Network Integration, Things will be -automatically created within AWS IoT Core: - - - -Going to **Interact** on the left while on a **Thing** takes us to a list of -topics for interacting with the **Thing Shadows**: - - - - - -To monitor in real-time what is being sent to AWS from Helium, we can open the -**MQTT monitor**, and subscribe to a topic with "\#" wildcard \(to catch all -messages, or use the topic we set in **Helium Console** if just wanting to -monitor those\). - - - - - -The payload field is the actual data received from the device, -[encoded in a base64](https://www.base64decode.org/) string. - -### Integration Details - -View the details of your integration by clicking on the Integration name. - -**Integration Details** shows the integration ID that is unique to each -integration, the name, the type of integration, and whether it is active or not. - -**Devices Piped** lists all the devices that are currently sending their data to -the selected integration. - -**Update your AWS Connection Details** allows you to update your AWS connection -details for the currently viewed integration. - -### diff --git a/docs/use-the-network/console/integrations/azure.mdx b/docs/use-the-network/console/integrations/azure.mdx deleted file mode 100644 index bc548e28e..000000000 --- a/docs/use-the-network/console/integrations/azure.mdx +++ /dev/null @@ -1,66 +0,0 @@ ---- -id: azure -sidebar_label: Azure IoT Hub -slug: /use-the-network/console/integrations/azure ---- - -# Azure IoT Hub - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -[Microsoft Azure IoT Hub](https://azure.microsoft.com/en-us/overview/iot/#overview) enables highly secure and reliable communication between your Internet of Things (IoT) application and the devices it manages. - -To help ensure stable device connectivity only use Console to connect to client ids. Other device monitoring tools in IoT Hub will connect to the device using the same client id which will cause connectivity instability. - -:::important -For more information getting started with the Azure IoT Hub integration, check out our Tips & Tricks video on YouTube [here](https://youtu.be/emJ88cGF-Ew). -::: - -## On Azure IoT Hub -Prior to setting up an integration in Console, the following Azure IoT Hub information is required: - -- Hub Name -- Policy Name -- Primary Key - -Log into your Azure IoT Hub account and on the left hand menu go to "Shared access policies". - -Console requires the following permissions. -- Registry Read: query Azure for devices in your hub -- Registry Write: create devices in your hub -- Device Connect: send messages through http/mqtt to your azure device - -:::important -You must create your own policy and ensure it includes the permissions listed above. Although the `iothubowner` policy includes those by default it's not designed to be used for external integrations. -::: - -Whatever policy you choose, click it and a pane will appear. Copy the `Primary Key` information. - -## On Console -To add the integration in Console, go to **Integrations** on the left-hand menu. - -Click the **Add** integration button. - - - -Choose the **Azure IoT** integration icon. - - -Enter the Azure IoT Hub information into the corresponding fields on Console: - -- `Hub Name` (note just the hub name, not the entire hostname) -- `Policy Name` -- `Primary Key` - -Remember the Azure IoT Hub policy must have the following permissions enabled: Registry Read, Registry Write, and Device Connect. - -## Adding a device -Every time the Azure IoT Hub integration starts up on Console, it will check if the device exists on IoT Hub, and if it doesn’t it will create one. diff --git a/docs/use-the-network/console/integrations/cargo.mdx b/docs/use-the-network/console/integrations/cargo.mdx deleted file mode 100644 index 4fb0c2177..000000000 --- a/docs/use-the-network/console/integrations/cargo.mdx +++ /dev/null @@ -1,125 +0,0 @@ ---- -id: cargo -sidebar_label: Cargo -slug: /use-the-network/console/integrations/cargo ---- - -# Cargo - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -:::info -[Helium Cargo](http://cargo.helium.com/) is an evaluation tool and the -data collected is available to all developers. Please do not share any sensitive -information. Use at your own discretion. -::: - -## Add a Cargo Integration - -To add an integration, go to **Integrations** on the left-hand menu. Select the -integration to add - in this case, the **Cargo** integration. - - - -The next step is to name the integration. - -## Connecting Integrations to Devices - -Devices or groups of devices (via labels) can be directly connected to integrations on the Flows Worskpace. Labels are identifiers used to group devices for easy management. To connect one or more devices to one or more integrations, simply connect the Device and Integration nodes on the Flows Workspace. - -:::info -Quick video tutorial connecting devices to an integration [here](https://www.youtube.com/watch?v=lnERw1f7TGE). -::: - -Node elements (devices, labels, integrations) need to be created before they're available on the Flows Workspace. More information about Flows [here](https://docs.helium.com/use-the-network/console/flows/). - -## Cargo Endpoint - -The Cargo endpoint is where device data is sent if connected with a Label. - -**HTTP Details** -Method: `post` -Endpoint: `https://cargo.helium.com/api/payloads` -Headers: `{"Content-Type":"application/json"}` - -## Cargo Payload - -The Cargo payload defines the content and structure of the data payload that -must be sent to the cargo endpoint from a device or separate application. Cargo -currently accepts data from either the `decoded` or the`payload` field. Each -field has different requirements described below. - -### Decoded Field - -The `decoded` field is the preferred method for sending data to Cargo. This -method requires the use of a [Function Decoder](../../functions) on Console in -order to decode the device payload before sending it to Cargo. The accepted -fields are listed below and can be located at any depth within the `decoded` -field. - -| Required JSON Fields | Description | -| :------------------- | :------------------- | -| latitude | Latitude in Degrees | -| longitude | Longitude in Degrees | -| altitude | Altitude in Meters | - -| Optional JSON Fields | Description | -| :------------------- | :-------------- | -| speed | Speed in mph | -| battery | Battery Voltage | - -### Payload Field - -Cargo is also capable of decoding the `payload` field, but is only compatible -with a few common tracking devices. - -#### Compatible Devices: - -- RAK 7200 -- Dragino LGT-92 -- Browan Object Locator -- Digital Matter Oyster & Yabby - -You also have the option of encoding the required data on a development device -before transmitting it as described below. - -**Total Payload:** - -- 12 Bytes without Battery Voltage -- 14 Bytes with Battery Voltage - -**Packed in the following order:** - -- int32_t Latitude in Degrees -- int32_t Longitude in Degrees -- int16_t Elevation in Meters -- int16_t Speed in mph -- uint16_t Battery Voltage \(Optional\) - -### Example: - -```c -if (GPS.hasFix) { - idx = 0; - data = (uint32_t)(GPS.latitudeDegrees * 1E7); - payload[idx++] = data >> 24; - payload[idx++] = data >> 16; - payload[idx++] = data >> 8; - payload[idx++] = data; - data = (uint32_t)(GPS.longitudeDegrees * 1E7); - payload[idx++] = data >> 24; - payload[idx++] = data >> 16; - payload[idx++] = data >> 8; - payload[idx++] = data; - data = (int)(GPS.altitude); - payload[idx++] = data >> 8; - payload[idx++] = data; - data = (int)(GPS.speed); - payload[idx++] = data >> 8; - payload[idx++] = data; -} -``` diff --git a/docs/use-the-network/console/integrations/datacake.mdx b/docs/use-the-network/console/integrations/datacake.mdx deleted file mode 100644 index 804ab76a7..000000000 --- a/docs/use-the-network/console/integrations/datacake.mdx +++ /dev/null @@ -1,69 +0,0 @@ ---- -id: datacake -sidebar_label: Datacake -slug: /use-the-network/console/integrations/datacake ---- - -# Datacake - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -[Datacake](https://datacake.co) is a multi-purpose, low-code IoT platform that requires no programming skills and minimal time to create custom IoT applications. You can sign up for a free -account at [https://datacake.co](https://datacake.co). - -To add the integration in Console, go to **Integrations** on the left-hand menu. -Select the integration to add - in this case, the **Datacake** integration as -shown below. - - - -To integrate Helium Console with Datacake, you'll need to input your **personal access token** from Datacake. When you register on the Datacake platform and create a user account, a token is automatically created. -You can view your own token via the User Settings Menu. You can reach this menu by clicking on "Edit Profile" at the end of the list using the Workspace Selector: - - - - -You will now see a menu where you can make your personal account settings. There is also a sidebar and in this you will find the item "API". If you click on it, you will find your personal access token there: - - - - - -Copy this value into the **Enter Datacake Token** field in Console for the integration configuration shown below. - - - -Set a name for the integration in step 3. You will use this name to -identify the integration when attaching it to devices. Simply calling the integration 'Datacake' is sufficient for most implementations. - - - -## Connecting Integrations to Devices - -Devices or groups of devices (via labels) can be directly connected to integrations on the Flows Worskpace. Labels are identifiers used to group devices for easy management. To connect one or more devices to one or more integrations, simply connect the Device and Integration nodes on the Flows Workspace. - -:::info -Quick video tutorial connecting devices to an integration [here](https://www.youtube.com/watch?v=lnERw1f7TGE). -::: - -Node elements (devices, labels, integrations) need to be created before they're available on the Flows Workspace. More information about Flows [here](https://docs.helium.com/use-the-network/console/flows/). diff --git a/docs/use-the-network/console/integrations/google-sheets.mdx b/docs/use-the-network/console/integrations/google-sheets.mdx deleted file mode 100644 index 1fe51819d..000000000 --- a/docs/use-the-network/console/integrations/google-sheets.mdx +++ /dev/null @@ -1,116 +0,0 @@ ---- -id: google-sheets -sidebar_label: Google Sheets -slug: /use-the-network/console/integrations/google-sheets ---- - -# Google Sheets - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Creating a Form - -[Google Forms](https://forms.google.com) - -Create a form. - -Make a question for each field you want to capture from your device. -We're going to use an environment sensor for this example. - -We recommend setting questions to "Short Answer". - - - - -## Make Form Public - -In the top right, click the settings cog next to the send button. - - - -Make sure the form is publicly accessible. - - - - -## Connecting to Google Sheets - -Head over to the responses tab and tell the form you want your results sent to Google Sheets by clicking the Google Sheets button. - - - -## Get Share Link - -Now go to the **Send** button in the top right corner, and we're going to grab the share link. -Do not shorten the URL. - - - -## Adding the Integration - -Moving over to Console, to add a Google Sheets integration in Console, go to **Integrations** on the left-hand menu. -Select the integration to add - in this case, the **Google Sheets** integration as shown below. - - - -## Get the Form Fields - -Paste the share link in the **Enter Google Form ID** field. - -We're only after the ID of the form, so we're going to remove the prefix `https://docs.google.com/forms/d/e/` and suffix `/viewform?usp=sf_link`. We should be left with a big string that contains no slashes. - -Now we can click the **Get Google Form Fields** button to verify we've done things correctly. - - - -## Create your Decoder - -Click the **Generate Function Body with Fields Above** button and Decoder template will be created for you to translate your data into how Google Form expects it. - -Take this time to name your integration. - -We can fill out the Function Body now, or save the integration and edit it later under **Functions**. -We're going to fill it out now. - -The data in this example is coming from a [Wisblock](https://docs.helium.com/use-the-network/devices/development/rakwireless/wisblock-4631/) with an environment sensor that's included in the [RAK Helium Devkit](https://store.rakwireless.com/collections/helium/products/helium-developer-kit). -The Decoder function for this environment sensor is pasted into the **Function Body** section and passed the data from the device so it can get us the fields we need. We then map those to the google forms fields. - - - -With that done, we can click **Add Integration**. - -## Attach to Device - -Going to **Devices** on the left-hand menu, we can now [add our label](../labels). diff --git a/docs/use-the-network/console/integrations/http.mdx b/docs/use-the-network/console/integrations/http.mdx deleted file mode 100644 index ec490f8d3..000000000 --- a/docs/use-the-network/console/integrations/http.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -id: http -sidebar_label: HTTP -slug: /use-the-network/console/integrations/http ---- - -# HTTP - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Add an HTTP Integration - -To add a Integration, go to **Integrations** on the left-hand menu. Select the -integration to add - in this case, the **HTTP** integration. - - - -The next step is to paste the HTTP endpoint. - -If you're still testing, you can find popular sites that can create HTTP -endpoints for you and inspect packets. [Requestbin](https://www.requestbin.com) -and [Beeceptor](https://www.beeceptor.com) provide tools to make an HTTP -endpoint quickly and easily. - -### Uplink \(Receive Data from Device\) - -Uplink refers to your device sending data to be received by the network. With -regards to the HTTP integration, this will be the device data that is sent to -your HTTP endpoint of choice. - -### RequestBin Example - -Create an endpoint by going to requestbin.com and click **Create a Request -Bin**. Once created, copy the endpoint. - - - -... and paste it in Console. - - - -**HTTP Header** and **Value** are not required and those can be left blank. - -Lastly, provide a name for the integration. Names do not have to be unique. - -Click **Add Integration**. - -Your new integration is now ready for use! Please read about the JSON schema to -understand how to parse data received. - -### Integration Details - -View the details of your integration by clicking on the Integration name. - -**Integration Details** shows the integration ID that is unique to each -integration, the name, the type of integration, and whether it is active or not. - -**HTTP Details** shows the specific endpoint which can be changed. - -**Devices Piped** lists all the devices that are currently sending their data to -the selected integration. - -**Update your Connection Details** allows you to update your HTTP connection -details for the currently viewed integration. - -## Downlink \(Send Data to Device\) - -Downlink refers to the network sending data down to be received by your device. -With regards to the HTTP integration, this will be data sent to a unique URL -called the `downlink_url` provided by Console. - -#### Downlink URL Format - -`https://console.helium.com/api/v1/down/{Integration_ID}/{Downlink_Key}/{:optional_device_id}` - -You can send downlinks to every device that your HTTP integration is attached to -or just a single device by including the device UUID at the end. You can find -this `downlink_url` with the required downlink key in it on the HTTP integration -page in the details section, an example is shown below. - - - -The downlink URL can also be found in the uplink JSON message for that -particular device. It will look similar to the URL shown below. You can also -find it using the Debug window on your device page. - -#### Downlink URL Example \(Sends to all Devices with Integration Attached\) - -```text -"downlink_url": "https://console.helium.com/api/v1/down/897780bc-6980-42c1-a659-30077e8dbcd1/h4IxFDle6biV1ZKmrUJamaXhKjRRF3c-" -``` - -#### Downlink URL Example \(Device Specific\) - -```text -"downlink_url": "https://console.helium.com/api/v1/down/897780bc-6980-42c1-a659-30077e8dbcd1/h4IxFDle6biV1ZKmrUJamaXhKjRRF3c-/d2c7b8dc-221a-4ec8-aedd-6c19ae348a33" -``` - -To send the downlink message, make a POST request including a JSON body with the -following fields shown below, see more details on the fields -[here](/use-the-network/console/integrations/json-schema#downlink-transmitting-data-to-a-device). - -#### Downlink JSON Message Example - -```text -{ - "payload_raw": "SGVsbG8sIHdvcmxkIQ==", - "port": 1, - "confirmed": false -} -``` - -### Downlink Tool Example - -The easiest way to send a downlink to your device is to use the built-in -downlink tool in Console. You will find it on the right side of every device -page, as shown below. In order to use the downlink tool, you must have an HTTP -integration attached to the device. - - - -Once you have the downlink tool open, you can input the downlink payload string -in the payload field. Select _Encoded_ if you are inputting a string that is -already Base64 encoded, and _Plain_ if it is plain text. Last, select your -Fport, whether or not you want to send a confirmed downlink, and click the -downlink send button as shown below. - - - -Once you have initiated the downlink, you should see the downlink event show in -the event log, as shown below. - - - -### Postman Example - -Postman is a popular developer utility for HTTP based services, you can download -it [here](https://www.postman.com/downloads/). We can use this utility to easily -make a POST request to the downlink URL with our downlink JSON message. Follow -the steps below to successfully send your downlink message to your device. - -1. Select the type of HTTP request, POST in this case. -2. Enter the downlink URL here. -3. Select Body to begin entering your message details. -4. Select `raw` as your body type. -5. Select `JSON` as the body format. -6. Enter your JSON message with the required fields. -7. Finally press `Send` to transmit the message. -8. You should see a response of `Downlink scheduled` if successful. - - - -## Connecting Integrations to Devices - -Devices or groups of devices (via labels) can be directly connected to integrations on the Flows Worskpace. Labels are identifiers used to group devices for easy management. To connect one or more devices to one or more integrations, simply connect the Device and Integration nodes on the Flows Workspace. - -:::info -Quick video tutorial connecting devices to an integration [here](https://www.youtube.com/watch?v=lnERw1f7TGE). -::: - -Node elements (devices, labels, integrations) need to be created before they're available on the Flows Workspace. More information about Flows [here](https://docs.helium.com/use-the-network/console/flows/). - diff --git a/docs/use-the-network/console/integrations/integrations.mdx b/docs/use-the-network/console/integrations/integrations.mdx deleted file mode 100644 index 9c49efb5a..000000000 --- a/docs/use-the-network/console/integrations/integrations.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: integrations -sidebar_label: Integrations -slug: /use-the-network/console/integrations ---- - -# Integrations - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Integrations enable devices to connect to pre-configured, cloud-based -applications or send data directly over HTTP or MQTT. - -For a video walkthrough of how to use Integrations, check out our Tips and Tricks video [here](https://youtu.be/lnERw1f7TGE). - -## Add Integration - -To add a new integration, navigate to the **Integrations** page using the left -side navigation, click the Add New Integration **+** and then select from the available integrations as shown below. -Follow the specific integration guides below for more details. - - - -## Connecting Integrations to Devices - -Devices or groups of devices (via labels) can be directly connected to integrations on the Flows Worskpace. Labels are identifiers used to group devices for easy management. To connect one or more devices to one or more integrations, simply connect the Device and Integration nodes on the Flows Workspace. - -:::info -Quick video tutorial connecting devices to an integration [here](https://www.youtube.com/watch?v=lnERw1f7TGE). -::: - -Node elements (devices, labels, integrations) need to be created before they're available on the Flows Workspace. More information about Flows [here](https://docs.helium.com/use-the-network/console/flows/). - -[JSON Schema](/use-the-network/console/integrations/json-schema) - -[HTTP](/use-the-network/console/integrations/http) - -[MQTT](/use-the-network/console/integrations/mqtt) - -[Microsoft Azure IoT Hub](/use-the-network/console/integrations/azure) - -[AWS IoT Core](/use-the-network/console/integrations/aws-iot-core) - -[Cargo](/use-the-network/console/integrations/cargo) - -[Datacake](/use-the-network/console/integrations/datacake) - -[MyDevices Cayenne](/use-the-network/console/integrations/mydevices-cayenne) - -[Adafruit IO](/use-the-network/console/integrations/adafruitio) - -[Ubidots](/use-the-network/console/integrations/ubidots) - -[Tago.IO](/use-the-network/console/integrations/tago) - -[Google Sheets](/use-the-network/console/integrations/google-sheets) - -[Microshare](/use-the-network/console/integrations/microshare) - -[Akenza](/use-the-network/console/integrations/akenza) diff --git a/docs/use-the-network/console/integrations/json-schema.mdx b/docs/use-the-network/console/integrations/json-schema.mdx deleted file mode 100644 index 356042cb9..000000000 --- a/docs/use-the-network/console/integrations/json-schema.mdx +++ /dev/null @@ -1,118 +0,0 @@ ---- -id: json-schema -sidebar_label: JSON Schema -slug: /use-the-network/console/integrations/json-schema ---- - -# JSON Schema - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -When receiving or transmitting data with an integration there is a consistent -JSON Schema for the data. - -## Uplink: Receiving Data from a Device - -Here is an example of data received: - -```text -{ - "app_eui": "6948A4B59F4666AD", - "dev_eui": "1C29FBD1D2084E21", - "devaddr": "B5A44869", - "fcnt": 19, - "hotspots": [ - { - "frequency": 912.2999877929688, - "id": "11KHJW1ePkfhLYptMwKyDzn4opLc62daahbi35uxhH3wwi7p6xr", - "name": "icy-fiery-hippo", - "reported_at": 15868685461234, - "rssi": -54, - "snr": 9.800000190734863, - "spreading": "SF9BW125", - "status": "success" - }, - { - "frequency": 912.2999877929688, - "id": "11ni2CACdVUAshDvXif2pYUduAsvoawoxvVub6aqgHjSNsPEapZ", - "name": "cool-chiffon-hornet", - "reported_at": 15868685461235, - "rssi": -51, - "snr": 9, - "spreading": "SF9BW125", - "status": "success" - } - ], - "id": "7c523974-4ce7-4a92-948b-55171a6e4d77", - "metadata": { - "labels": [ - { - "id": "7d11aef4-4daf-4caf-b72a-f789b191ebe4", - "name": "DontLabelMe", - "organization_id": "d724b93a-895a-4175-9852-8738ae31050b" - } - ] - }, - "name": "Test Me", - "payload": "SGVsbG8sIHdvcmxkIQ==", - "port": 1, - "reported_at": 15868685461234 -} -``` - -### Root - -| Field | Type | Description | -| :--------------- | :-------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **app_eui** | String | LoRaWAN 64-bit Application Identifier \(AppEUI\) in MSB hex; conventionally this is used to identify a type of sensor or actuator, e.g. "temperature sensor" or "valve controller" | -| **dev_eui** | String | LoRaWAN 64-bit Device Identifier \(DevEUI\) in MSB hex; conventionally this is used to identify a unique device within a specific application \(AppEUI\) or even within an entire organization | -| **devaddr** | String | Upon a successful Join, the device is allocated a LoRaWAN 64-bit DevAddr which is unique across the entire Helium Network as long the session is active; the data is represented here in MSB hex | -| **fcnt** | Number | LoRaWAN FCnt for uplink packets; this increments with every uplink packet and can be useful for surmising whether an uplink was missed | -| **hotspots** | Array\(hotspot\) | Array of hotspots which received the same packet \(schema description in a following table\) | -| **id** | String | UUID used to identify the device within Helium Console; this is assigned during device creation and maps to a unique set of AppEui, DevEui, and AppKey | -| **metadata** | Object\("label": Array\(label\)\) | A nested JSON object with a single field, "labels", which is an array of label Objects, described in the next table | -| **name** | String | Name assigned to the device by Console user | -| **payload** | String | Data transmitted by your device as a base64 encoded String. Most computer languages will have some built-in libraries for parsing this \(e.g. base64.decode\(payload\)\) | -| **payload_size** | Number | Size of the payload in bytes; you can use this to verify your libraries parsing output | -| **port** | Number | LoRaWAN FPort on which the data was transmitted; this can be useful for routing data within the application | -| **reported_at** | Number | Timestamp in milliseconds | - -### Hotspot - -| Field | Type | Description | -| :------------ | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **frequency** | Number | In MHz, the frequency which the packet was received upon | -| **id** | String | A base58 encoding of the hotspot's public key; this may serve as a concise unique identifier | -| **name** | String | A human-friendly three-word encoding of the hotspot's public key; link to [JavaScript](https://github.com/helium/angry-purple-tiger) and [Erlang](https://github.com/helium/erl_angry_purple_tiger) implementations | -| **reported_at** | Number | Timestamp in milliseconds | -| **rssi** | Number | Received Signal Strength Indicator is reported by the hotspot and indicates how strong the signal device's radio signal was; the larger the number \(closer to 0\), the better the signal | -| **snr** | Number | In dB, Signal to Noise Ratio is reported by the hotspot to indicate how clear the signal was relative to environmental noise; this generally ranges between -20 and +10 and the larger the number \(closer to 10 dB\) the better | -| **spreading** | String | LoRa Spreading Factor and Bandwidth used for the radio transmission. In the US, spreading factor ranges from 7 to 10 and bandwidth is always 125 kHz. For example, "SF7BW125" means a Spreading Factor of 7 was used and a channel width of 125 kHz. | - -### Metadata - -| Field | Type | Description | -| :--------- | :----- | :-------------------------------------- | -| **labels** | String | A list of Labels attached to the device | - -## Downlink: Transmitting Data to a Device - -Here is an example of data received: - -```text -{ - "payload_raw": "SGVsbG8sIHdvcmxkIQ==", - "port": 1, - "confirmed": false -} -``` - -| Field | Description | | -| :-------------- | :---------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **payload_raw** | String | Data transmitted to your device as a base64 encoded String. Most computer languages will have some built-in libraries for parsing this \(e.g. base64.encode\(payload\)\) | -| **port** | Number | LoRaWAN FPort on which the data was transmitted; this can be useful for routing data within the application | -| **confirmed** | Bool | Whether or not a device acknowledgement is required | - -### Clearing a Device Queue - -If the **payload_raw** field is the base64 encoded value `'__clear_downlink_queue__'` any downlinks queued for that device will be removed. diff --git a/docs/use-the-network/console/integrations/microshare.mdx b/docs/use-the-network/console/integrations/microshare.mdx deleted file mode 100644 index e3a590f3c..000000000 --- a/docs/use-the-network/console/integrations/microshare.mdx +++ /dev/null @@ -1,84 +0,0 @@ ---- -id: microshare -sidebar_label: Microshare -slug: /use-the-network/console/integrations/microshare ---- - -# Microshare - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -[Microshare](https://www.microshare.io/) is a data leverage platform -for the IoT era, providing a solution to sharing, privacy, security, audit, confidentiality, -data monetization and cost savings. You can sign up for a free account at -[https://www.microshare.io/](https://www.microshare.io/). - -To add the integration in Console, go to **Integrations** on the left-hand menu. -Select the integration to add - in this case, the **Microshare** integration as -shown below. - - - -Now we need to go over to the **Microshare** console and get our Pipe Token. - -In the ***Microshare*** console, click on "Keys" at the bottom-left, then "Create New App" in the upper-right. - - - -Now, we give it a name - in this case, we simply call it "Helium Console" and click "Create App". - - - -Click on the "Generate a Token" button, select "Pipe Token" and click the "Create Token" button. - - - - - -Now that the token is generated, let's copy it so that we can enter it into the Helium Console. -Select the "Tokens" tab at the top of the screen, then click the Token itself to copy it to your clipboard. - - - -Finally, let's paste in the token from **Microshare** in step 2 and name the integration in step 3. You will use this name to -identify the integration when attaching it to devices. - - - -## Connecting Integrations to Devices - -Devices or groups of devices (via labels) can be directly connected to integrations on the Flows Worskpace. Labels are identifiers used to group devices for easy management. To connect one or more devices to one or more integrations, simply connect the Device and Integration nodes on the Flows Workspace. - -:::info -Quick video tutorial connecting devices to an integration [here](https://www.youtube.com/watch?v=lnERw1f7TGE). -::: - -Node elements (devices, labels, integrations) need to be created before they're available on the Flows Workspace. More information about Flows [here](https://docs.helium.com/use-the-network/console/flows/). \ No newline at end of file diff --git a/docs/use-the-network/console/integrations/mqtt.mdx b/docs/use-the-network/console/integrations/mqtt.mdx deleted file mode 100644 index 6d1580ca1..000000000 --- a/docs/use-the-network/console/integrations/mqtt.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -id: mqtt -sidebar_label: MQTT -slug: /use-the-network/console/integrations/mqtt ---- - -# MQTT - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Add an MQTT Integration - -To add an integration, go to **Integrations** on the left-hand menu. Select the -integration to add - in this case, the **MQTT** integration. - - - -The next step is to paste your MQTT broker endpoint, and optional topic prefix. - -## Connecting Integrations to Devices - -Devices or groups of devices (via labels) can be directly connected to integrations on the Flows Worskpace. Labels are identifiers used to group devices for easy management. To connect one or more devices to one or more integrations, simply connect the Device and Integration nodes on the Flows Workspace. - -:::info -Quick video tutorial connecting devices to an integration [here](https://www.youtube.com/watch?v=lnERw1f7TGE). -::: - -Node elements (devices, labels, integrations) need to be created before they're available on the Flows Workspace. More information about Flows [here](https://docs.helium.com/use-the-network/console/flows/). - -## MQTT Topic composition: - -### Device Uplink \(Receive Data from Device\) - -**Subscribe to:** `{optional_prefix}/helium/{Device ID}/rx` - -Example with prefix: `mqtt/helium/3c822699-37fd-4df6-a84d-93037a450843/rx` -Example without prefix: `helium/3c822699-37fd-4df6-a84d-93037a450843/rx` - -### Device Downlink \(Send Data to Device\) - -**Publish to:** `{optional_prefix}/helium/{Device ID}/tx` - -Example with prefix: `mqtt/helium/3c822699-37fd-4df6-a84d-93037a450843/tx` -Example without prefix: `helium/3c822699-37fd-4df6-a84d-93037a450843/tx` - -## MQTT Messages - -The MQTT for downlink and uplink follow the -[JSON schema documented here.](/use-the-network/console/integrations/json-schema) - -## Send and Receive Device Data - -The following examples are done with the -[MQTT CLI](https://hivemq.github.io/mqtt-cli) utility. - -Example MQTT - -**Subscribe to Uplink Packets:** - -```text -mqtt sub -V 3 -t helium/3c822699-37fd-4df6-a84d-93037a450843/rx -h {mqtt_broker_host} -p {mqtt_broker_host_port} -u "user" -pw "password" -``` - -**Publish Downlink Packet:** - -```text -mqtt pub -V 3 -t helium/3c822699-37fd-4df6-a84d-93037a450843/tx -h {mqtt_broker_host} -p {mqtt_broker_host_port} -u "user" -pw "password" -m "{\"payload_raw\":\"encoded_string\"}" -``` diff --git a/docs/use-the-network/console/integrations/mydevices-cayenne.mdx b/docs/use-the-network/console/integrations/mydevices-cayenne.mdx deleted file mode 100644 index 4d9ffaaf5..000000000 --- a/docs/use-the-network/console/integrations/mydevices-cayenne.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -id: mydevices-cayenne -sidebar_label: MyDevices Cayenne -slug: /use-the-network/console/integrations/mydevices-cayenne ---- - -# MyDevices Cayenne - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -[Cayenne](https://developers.mydevices.com/cayenne/features/) from -[myDevices](https://mydevices.com/), is a free, drag and drop IoT project -builder, that empowers developers, designers and engineers to quickly prototype -and share their connected device projects. Cayenne was designed to help users -create Internet of Things prototypes and then bring them to production. It -supports -[hundreds of devices](https://developers.mydevices.com/cayenne/supported-hardware/), -including everything from popular development boards to professional grade -remote sensors. Cayenne offers both a web and mobile based application. - - - -### Add a myDevices Cayenne Integration - -To add a **myDevices Cayenne** Integration, go to Integrations on the left-hand -menu. Select the integration to add, in this case, the **myDevices Cayenne** -integration: - - - -The next step is to name the integration - -:::info -**Downlink Not Yet Supported** -The MyDevices integration currently only supports uplinks. Downlinks are in the -process of being implemented and will be available soon. -::: - -## Connecting Integrations to Devices -Devices or groups of devices (via labels) can be directly connected to integrations on the Flows Worskpace. Labels are identifiers used to group devices for easy management. To connect one or more devices to one or more integrations, simply connect the Device and Integration nodes on the Flows Workspace. - -:::info -Quick video tutorial connecting devices to an integration [here](https://www.youtube.com/watch?v=lnERw1f7TGE). -::: - -Node elements (devices, labels, integrations) need to be created before they're available on the Flows Workspace. More information about Flows [here](https://docs.helium.com/use-the-network/console/flows/). - -### Adding Your Device on myDevices Cayenne - -Before adding your device to Cayenne, be sure you've successfully added it to -the Helium network as well as connected it the myDevices Cayenne integration. If you haven't done so yet, start -[here](../adding-devices). Once you have a device added on Console and you have -verified that packets are being received, you can then proceed to add the device -on Cayenne. - -First, signup for Cayenne -[here](https://developers.mydevices.com/cayenne/signup/), if you have not -already. - -From the Cayenne dashboard, click **Add New** > **Device / Widget**. - - - -From the list of devices & widgets that appears, click **LoRa** and select the -**Helium** Network option to view a list of Helium supported devices. - - -:::warning -**Ensure you have selected the Helium Network** -You must select the Helium Network **before** searching for your device, else you may add your device on the wrong network and will not receive data. -::: - - - -Here we've selected the popular -[STM32 B-L072Z-LRWAN1 ](https://www.st.com/en/evaluation-tools/b-l072z-lrwan1.html)LoRaWAN -development board. - - - -The only information you'll need once you've selected your device is to enter -the **DevEUI**, which is found on your device details page on Console, shown -below. - - - -### Downlinks - -Your device first needs to report an Actuator, either Digital or Analog one. You -can check LPP doc here -[https://developers.mydevices.com/cayenne/docs/lora/\#lora-cayenne-low-power-payload-overview](https://developers.mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload-overview) - -Once the device starts reporting DigitalActuator or AnalogActuator, you will -automatically get a button or a slider on Cayenne UI. Using that new control -will then trigger downlink commands. - -Please note that both Actuators types inherit from AnalogSensor DataType, e.g. -using 2-byte integers with 0.01 precision. This means a Digital Actuator set to -HIGH from the UI will trigger a Downlink with the value = 0x0064 = 100. - -### Device Data Payload Format - -When adding your device on Cayenne, you'll need to pay close attention to -whether or not the device requires the Cayenne Low Power Payload \(CayenneLPP\). -If your device is in the list of supported devices, it will specify whether or -not it requires CayenneLPP directly above the name field when you've selected -the device, and shown in the Cayenne dashboard image above. If you do not see -the line 'This device uses Cayenne LPP', then it is automatically supported by -Cayenne. You can find the official documentation on CayenneLPP -[here](https://developers.mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload), -as well as a popular Arduino library -[here](https://github.com/ElectronicCats/CayenneLPP). If you have a custom -device or it is not in the list of supported devices, then select the -[STM32 B-L072Z-LRWAN1](https://www.st.com/en/evaluation-tools/b-l072z-lrwan1.html) -board as a placeholder, and be sure to use CayenneLPP formatting in your -firmware. diff --git a/docs/use-the-network/console/integrations/tago.mdx b/docs/use-the-network/console/integrations/tago.mdx deleted file mode 100644 index 7eb6d70f4..000000000 --- a/docs/use-the-network/console/integrations/tago.mdx +++ /dev/null @@ -1,73 +0,0 @@ ---- -id: tago -sidebar_label: Tago.IO -slug: /use-the-network/console/integrations/tago ---- - -# Tago.IO - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -[Tago.IO](https://tago.io/) combines advanced device management, services, data storage, visualization, and analytics with an easy to implement cloud-based IoT platform. - -You can sign up for a free account at [https://tago.io](https://tago.io/). - -To get started, log in to your Tago.IO account and click **Devices** from the menu on the left: - - - -Generate a new **Authorization Token** by entering any name on the **Token name** field and click -the **Generate token** button. - - - -Now we simply copy the **Authorization Token** by clicking on the **Copy** icon: - - - -At this point, we move back over to the Helium Console to complete the Integration. - -Click on **Integrations** on the menu on the left and select the **Tago.IO** Prebuilt Integration: - - - -Paste the **Tago.IO Authorization Token** that we copied from the Tago.IO site above and enter a name for our Integration: - - - -Click **Add Integration**. You should now see a verification message that the Integration was created successfully: - - - -## Connecting Integrations to Devices -Devices or groups of devices (via labels) can be directly connected to integrations on the Flows Worskpace. Labels are identifiers used to group devices for easy management. To connect one or more devices to one or more integrations, simply connect the Device and Integration nodes on the Flows Workspace. - -:::info -Quick video tutorial connecting devices to an integration [here](https://www.youtube.com/watch?v=lnERw1f7TGE). -::: - -Node elements (devices, labels, integrations) need to be created before they're available on the Flows Workspace. More information about Flows [here](https://docs.helium.com/use-the-network/console/flows/). diff --git a/docs/use-the-network/console/integrations/ubidots.mdx b/docs/use-the-network/console/integrations/ubidots.mdx deleted file mode 100644 index 51bf62238..000000000 --- a/docs/use-the-network/console/integrations/ubidots.mdx +++ /dev/null @@ -1,193 +0,0 @@ ---- -id: ubidots -sidebar_label: Ubidots -slug: /use-the-network/console/integrations/ubidots ---- - -# Ubidots - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -[Ubidots](https://ubidots.com/) allows you to rapidly assemble and launch -Internet of Things (IoT) applications without having to write code or hire -a software development team. You can sign up for a free -account at [https://ubidots.com](https://ubidots.com/). - -To get started, log in to your Ubidots account and select **Plugins** from the -**Devices** dropdown menu at the top of your screen: - - - -Click the **Create Data Plugin** button: - - - -Select **Helium**: - - - -Click the **>** (forward) button: - - - -Under **Ubidots Token**, select the **Token** you wish to associate with this integration -(we will just use **Default token**) and make sure **Device tags** is selected under -**Use Helium labels as**: - - - -Now, simply click the checkbox button: - - - -You should get a confirmation message: - - - -And see your new Data Plugin being configured: - - - -Now, click your avatar in the upper-right of your screen and select **API Credentials**: - - - -Click the **Clipboard** button to the right of **Default token** to copy it: - - - -Now, let's move over to the **Helium Console** and create our **Integration**. -Select **Integrations** from the menu on the left of the screen: - - - -And click **Ubidots** under **Add a Prebuilt Integration**: - - - -Now, under **Enter Auth Token**, paste the Ubidots Default token we copied and click -the **Get Webhook URL** button: - - - -You should now get another confirmation message: - - - -And see the **Ubidots Webhook URL**: - - - -Now, we simply name our Integration: - - - -After clicking on the **Add Integration** button, we can review the details: - - - -Notice that currently, no devices are piped through this Integration: - - - -Let's fix that! - -## Connecting Integrations to Devices -Devices or groups of devices (via labels) can be directly connected to integrations on the Flows Worskpace. Labels are identifiers used to group devices for easy management. To connect one or more devices to one or more integrations, simply connect the Device and Integration nodes on the Flows Workspace. - -:::info -Quick video tutorial connecting devices to an integration [here](https://www.youtube.com/watch?v=lnERw1f7TGE). -::: - -Node elements (devices, labels, integrations) need to be created before they're available on the Flows Workspace. More information about Flows [here](https://docs.helium.com/use-the-network/console/flows/). - -Click on **Devices** on the menu on the left of your screen. - -And open up a device that we want to send through to Ubidots. - - - -At this point, we should be good to go! We can click on the **Debug** button on -the right of the Device screen and wait for the data to start coming through: - - diff --git a/docs/use-the-network/console/labels.mdx b/docs/use-the-network/console/labels.mdx deleted file mode 100644 index b584e8aec..000000000 --- a/docs/use-the-network/console/labels.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -id: labels -sidebar_label: Labels -slug: /use-the-network/console/labels ---- - -# Labels - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Labels are used to group devices for better organization allowing flexibility as your projects scale and grow. Think of a label as simply a group of devices. - -## Organizing with Labels - -Labels are simply user-defined identifiers that can be attached to one or more devices. Also multiple labels can be added to a single device so users can choose to identify devices based on attributes such as geography \(e.g. `SF`\) and device type \(e.g. `temperature` or `humidity`\). - -## Add Labels - -During device creation you can add an existing label or create a new one. - -Alternatively you can create labels beforehand. - -To add a new label, on the Devices page click the Add New Label icon. - -The following screen appears. - - - -## Attaching Labels - -Labels can be attached to devices during or after creation. If -you would like to attach a label to a device during creation, -make sure to create the label beforehand, and it will be available to select. - - - -To attach a label after creating a new device, -go to the specific device details page and click the Add Label button. You can choose an existing label from the dropdown list or create a label. - -To attach a label to a device from the Flows workspace check [here](/use-the-network/console/flows/actions#add-labels-to-devices). - -## Label Configurations - -Label and device configurations (Alerts, ADR, Packets, CF List) have been updated, go [here](/use-the-network/console/adr) for information about how to configure these settings. diff --git a/docs/use-the-network/console/migrating-devices/migrating-devices.mdx b/docs/use-the-network/console/migrating-devices/migrating-devices.mdx deleted file mode 100644 index e066c08fd..000000000 --- a/docs/use-the-network/console/migrating-devices/migrating-devices.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -id: migrating-devices -sidebar_label: Migrating Devices -slug: /use-the-network/console/migrating-devices ---- - -# Migrating Devices to Helium - -If you already have LoRaWAN devices deployed on another network, you can easily -migrate them to the Helium Network. Typically this only involves adding your -existing `DevEUI`, `AppEUI`, and `AppKey` to a new device in the Helium Console. - -The following is a list of network-specific migration guides. Join us! - -### When Migrating Devices for the First Time - -As network usage increases, a mechanism called the XOR filter allows the Console backend (router) to only process known traffic and avoid spending resources on unfamiliar packets, which significantly improves performance. - -However, the first time a device joins the network its keys need to be added to the blockchain and the updated block propagated to the miners (Hotspots). - -This initial join process could take up to 20 mins depending on: - -- when this transaction (batched with others) gets added to the blockchain -- the overall performance of the blockchain - -After the initial join takes place future rejoining of the same device will be much quicker. - -More information about XOR filters [here](https://engineering.helium.com/2021/07/29/console-updates-2.0.html). - -### Migrating from The Things Network to Helium - -- [Importing TTN Devices with Console Tool](/use-the-network/console/migrating-devices/ttn-import) -- [Manually Migrating Devices from TTN](/use-the-network/console/migrating-devices/ttn-manual) \ No newline at end of file diff --git a/docs/use-the-network/console/migrating-devices/ttn-import.mdx b/docs/use-the-network/console/migrating-devices/ttn-import.mdx deleted file mode 100644 index 2ba19b749..000000000 --- a/docs/use-the-network/console/migrating-devices/ttn-import.mdx +++ /dev/null @@ -1,133 +0,0 @@ ---- -id: ttn-import -sidebar_label: TTN Import Migration -slug: /use-the-network/console/migrating-devices/ttn-import ---- - -# Import Devices From The Things Network - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Helium Console now supports importing devices from The Things Network directly -from the web interface. - -This guide will walk you through the process of migrating devices from TTN over -to Helium. As you'll see the, process is quite painless. - -## Starting the Import Process - -To get started, open up the [Helium Console](https://console.helium.com/) and -switch to the Organization that you want to import the devices into: - - - -Next, select "Devices" on the left-hand menu and click the Add New Device **+** button. - - - -Click the "Import from the Things Network" button. - -## Retrieving a TTN Access Code - -Next we need to retrieve a code from The Things Network that will allow us to -manage devices programatically. - - - -Go to -[https://account.thethingsnetwork.org](https://account.thethingsnetwork.org/) -and enter your TTN Console credentials. - - - -At this point, you should be taken to our account page on the TTN Console. Click -the link directly beneath your avatar, and you will be given a -`ttnctl access code` that should be valid for the next five minutes. - - - -## - - - -Copy this code over to our _Import Devices_ page back on the Helium Console and -click the "Start Importing Devices" button! - - - -## Select the devices to Migrate - -Next, select the devices you want to migrate from The Things Network to the -Helium Network. We encourage you to move them all. - - - - - -As shown in the screenshot above, we include the option to auto-create a -[Helium label ](../labels#organizing-and-connecting-with-labels)based on the TTN -Application name. As you'll see momentarily, his can be very convenient and is -recommended. - -We can also delete the devices from The Things Network so that your device will -no longer attempt to join TTN rather than Helium. - - - -Now we simply click the "Import Devices" button, and wait a few seconds as the -devices are pulled over into your Helium Console! - -In the example migrated device below, you can see the attached label that was -created from the TTN Application name. - -:::info -Once your devices are organized using Labels, you can address them -programmatically via the Console API. -::: - - - -And you're done. That is all that it takes to migrate devices from The Things -Network over to The People's Network! diff --git a/docs/use-the-network/console/migrating-devices/ttn-manual.mdx b/docs/use-the-network/console/migrating-devices/ttn-manual.mdx deleted file mode 100644 index 791d93095..000000000 --- a/docs/use-the-network/console/migrating-devices/ttn-manual.mdx +++ /dev/null @@ -1,84 +0,0 @@ ---- -id: ttn-manual -sidebar_label: TTN Manual Migration -slug: /use-the-network/console/migrating-devices/ttn-manual ---- - -# Migrating Devices From The Things Network - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -This short guide will walk you through porting your devices to the Helium -Network \(and Helium Console\) from TTN and the TTN Console. If you are doing -more than a few devices though, you may want to try the -[Command-Line Interface for automated import](/use-the-network/console/cli#ttn-import). - -At a high level, there are two steps to accomplish this migration: - -1. Copying your keys from the TTN Console to the Helium Console. \(Right now - this is a manual process, but we'll soon have a CLI that automates this\). -2. Porting your `application`logic from TTN Console to use the far superior - `labels` construct in the Helium Console. - -## Copying Keys and Ensuring you're using Sub Band 2 - -In the [TTN Console](https://console.thethingsnetwork.org/), we go to the -[Application](https://console.thethingsnetwork.org/applications) containing the -device we want to migrate and copy these keys over into a new Device created in -[Helium Console](https://console.helium.com). - - - - - -Next, you need to ensure the device can use LoRaWAN US channels `8-15` \(also -known as `Sub-band 2`\). This process can vary by device. Some come bundled with -configuration utilities, others you will have to recompile and flash the -firmware yourself. It is also possible that the network negotiates the -sub-channel band itself. - -The full frequency table for the US915 band is found here but comparison is -available below. - -By default, LoRaWAN compliant end nodes should use all channels \(0-63\) for the -OTAA join process. After OTAA Joined, the first uplink packet on sub-band 2 will -receive a downlink response with an ADR command with the appropriate channel -mask; thereafter, the end node should use these channels \(8-15\) to send uplink -packets. - -### Comparison \(MHz\): - -| **TTN Frequency** | **Helium Frequency** | **SFBW** | -| :---------------- | :------------------- | :-------------------- | -| 903.9 | **903.9** | SF7BW125 to SF10BW125 | -| 904.1 | **904.1** | SF7BW125 to SF10BW125 | -| 904.3 | **904.3** | SF7BW125 to SF10BW125 | -| 904.5 | **904.5** | SF7BW125 to SF10BW125 | -| 904.7 | **904.7** | SF7BW125 to SF10BW125 | -| 904.9 | **904.9** | SF7BW125 to SF10BW125 | -| 905.1 | **905.1** | SF7BW125 to SF10BW125 | -| 905.3 | **905.3** | SF7BW125 to SF10BW125 | -| 904.6 | **904.6** | SF8BW500 | - -## Porting Your Application Logic to use Helium's Labels Construct - -After you've added your device to the Helium Console, you'll likely need to -reconstruct the -[Application](https://www.thethingsnetwork.org/docs/applications/) you've built -for your devices in TTN's Console. - -Instead of an `application`, Helium uses [labels](../labels), and instead of -creating your TTN application first, then adding devices to it, Helium lets you -add any number of devices to Console, then group them by labels after the fact. -Devices can also have more than one label. - -To read more about Labels and how you should use them to replace and extend -`applications`, head [here](../labels). diff --git a/docs/use-the-network/console/multi-packets.mdx b/docs/use-the-network/console/multi-packets.mdx deleted file mode 100644 index 38b9a003f..000000000 --- a/docs/use-the-network/console/multi-packets.mdx +++ /dev/null @@ -1,49 +0,0 @@ ---- -id: multi-packets -sidebar_label: Multiple Packets -slug: /use-the-network/console/multi-packets ---- - -# Multiple Packets - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -By default, Data Credits are only charged for uplinks. The Multiple Packets feature provides the ability to pay for additional packets for redundancy and location triangulation purposes. - -To learn more about enabling Multiple Packets, check out our Tips and Tricks video [here](https://youtu.be/rDJcGspnq1A). - -**Note:** Regardless of the Multiple Packet feature setting, under certain conditions the system purchases multiple packets to help ensure successful packet transmission (these cost additional Data Credits and happen automatically). These include: initial joining of the device (up to five packets) and downlinks that contain data payloads (up to three packets). These additional packets help ensure connection reliability to downlink via the Hotspot with the strongest connection. - -## Configuring Multiple Packets - -Configuring multiple packets for a device a group of devices involved two main steps: - -1. Set up the multiple packet configuration. - - Select **Multiple Packets** on the side menu. - - - - - Click the Add **+** icon. - - - - - Enter a name and choose the desired number of packets. - - Click **Create Multiple Packet Config** - -2. Apply the Multiple Packet configuration to a device or group of devices. - - On the Flows Workspace, choose a Device/Label node and select the Inspector tab. - - Select **Packets** and choose the configuration to apply. - - diff --git a/docs/use-the-network/console/my-account.mdx b/docs/use-the-network/console/my-account.mdx deleted file mode 100644 index 87ca9fa51..000000000 --- a/docs/use-the-network/console/my-account.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -id: my-account -sidebar_label: My Account -slug: /use-the-network/console/my-account ---- - -# Console Account Settings - -## Console 2FA - -Two Factor Authentication, usually written `2FA`, provides a higher level of security for your Helium Console account by requiring a separate, one-time use password in -addition to your primary password that's always required. Helium Console features 2FA and we recommend you turn it on. - -To enable it, start by logging in and [heading to your profile](https://console.helium.com/profile). Click `Enroll in 2FA`. From there, you'll be guided to provision the 2GA application of your choosing. ([Authy](https://authy.com/), Google Authenticator, [1Password](https://1password.com/), and [LastPass](https://www.lastpass.com) are a few of the popular apps that make 2FA easy.) - -:::important - -During the 2FA setup process, you'll be provided a backup code. This is what you'll need to regain access to your account in the event that you lose access to your 2FA application. Do not lose this backup code. Otherwise you'll be locked out of your account if you lose access to your 2FA application. - -::: - - - - -## Console API Keys - -To use the [Helium Console API](/api/console), you'll need an API Key. API Keys are organization- and role-specific. - -To generate an API Key, once logged in, navigate to your [Console Account Settings](https://console.helium.com/profile). In the **Your API Keys** section, create a name for your new API Key, select the role for this key (currently only `Admin` is supported), and click **Generate Key**. You'll then see a pop up with your API Key. This will be the only time it's revealed to you. - -:::important - -Once Console shows you your API key, it won't be shown to you again. If you lose it, you'll need to create a new one. - -::: - -After generating the API Key, it will not be active. You'll see it listed in the table as `Active`:`False`. To activate it, you'll need to confirm activation via the email Console will send you once the key is created. After confirming, you'll see the status as `Active`:`True`. - -Now that you've generated an API key, put it to use! Head over to the [Console API docs](/api/console) to get started. \ No newline at end of file diff --git a/docs/use-the-network/console/profiles.mdx b/docs/use-the-network/console/profiles.mdx deleted file mode 100644 index bed0a1d70..000000000 --- a/docs/use-the-network/console/profiles.mdx +++ /dev/null @@ -1,99 +0,0 @@ ---- -id: profiles -sidebar_label: Configuration Profiles -slug: /use-the-network/console/profiles ---- - -# Configuration Profiles - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Configuration Profiles provide users with a streamlined way to configure, save, and apply settings to a device or group of devices (via labels). - -Unlike other configuration settings, Profiles impact LoRAWAN’s protocol behavior and are binary in nature. - -:::important -Configuration Profiles can be added to Device/Label nodes. The last Profile assigned to a device takes priority. For example, if a device has Profile A, and a label has Profile B, if that label is applied to the device then Profile B overrides Profile A. -::: - -Current settings that can be set via Profiles: - -- [ADR](#adr) -- [CF List](#cf-list) -- [Receive Window Delay](#receive-window-delay) - -:::info -For a video walkthrough of Configuration Profiles, check out our Tips and Tricks video [here](https://youtu.be/U0IHGT_irj8). -::: - -## ADR - -Adaptive Data Rate (ADR) is a mechanism for adapting the data rate of devices -in a LoRaWAN network. This allows a device's airtime and power consumption to be -optimized by the Network Server. Learn more about ADR from Semtech's developer -portal -[here](https://lora-developers.semtech.com/library/tech-papers-and-guides/understanding-adr/). - -:::warning - -- ADR will only work if your device requests ADR. -- Using ADR is only suggested for devices that are static for long periods of - times. ADR is not suggested for devices that are constantly changing location - or have unstable RF conditions. - -::: - -### ADR Algorithm - -The network server behind Console implements a specific algorithm for -determining the optimal data rate and transmit power to send down to the device. -ADR not only increases the device's data rate, but it increases or decreases -transmit power as needed. The network only calculates data-rate/power -corrections after it collects 20 contiguous uplink packets with the ADR bit set -to `1`. From this point on, the network may send downlink LinkADRReq MAC -commands, either alone or with already-scheduled downlink packets. The network -server clears its ADR history whenever a device sends an uplink packet with ADR -set to `0`. - -## CF List - -The Join-Accept CF List configures channels according to the LoRaWAN spec to use sub-band 2. Devices that have not correctly implemented the LoRaWAN spec may experience transfer issues when this setting is enabled. -- Enabled, the server will send a CF List with every other join. -- Disabled, the server will not send a CF List. The channel mask is still transmitted via ADR command. - -**Notes:** By default this setting is disabled and only applicable to US915 devices. - -## Receive Window Delay - -This setting allows users to specify the number of seconds the device's first receive window begins after the transmit ends. - -The range window can be adjusted from 1 (default) to 15 seconds. - -A higher number increases the receive delay window and generally can increase downlink reliability as higher latencies between the LoRaWAN gateway and network server will be tolerated. - -However, devices that suffer from drift may not work as well and a longer delay reduces the theoretical maximum rate of communication since a subsequent transmit may only be accomplished after both receive windows. - -Note: According to the LoRaWAN spec, the second receive window always begins one second after the first. - -## Creating Profiles -Profiles need to be created before they can be applied to devices. - -- To create Profiles, on the left-hand menu, click **Profiles** and click the **+** button. -- Choose a descriptive name for the Profile, the desired settings, and click **Create Profile**. - -### Applying Profiles - -User can apply profiles: -- During setup of devices or labels -- On the Flows workspace or non-Flows areas - - Specific device page - - On the Label page - -On the Flows Worskpace for quick identification of devices with a Profile, a symbol appears on the node. - -Flows Workspace -- Choose device or label, and on the side pane click the Profile tab. -- Choose the Profile to apply or create a new one. - -### Editing or Deleting Profiles -To edit or delete a profile, select it and make changes or click **Delete Profile**. \ No newline at end of file diff --git a/docs/use-the-network/console/quickstart.mdx b/docs/use-the-network/console/quickstart.mdx deleted file mode 100644 index b62ca775c..000000000 --- a/docs/use-the-network/console/quickstart.mdx +++ /dev/null @@ -1,103 +0,0 @@ ---- -id: quickstart -sidebar_label: Quickstart -slug: /use-the-network/console/quickstart ---- - -# Console Quickstart - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Objective - -This Console quickstart guide will cover how to: - -- Register an account on Helium Console -- Add a device to Helium Console and record device details - -:::info -The cost per packet is $0.00001 USD \(24 byte packets\) which is -equivalent to 1 Data Credit \(DC\). For more information please go -[here](https://docs.helium.com/use-the-network/console/data-credits/). -::: - -## Create an account - -To register for an account, visit [Helium Console](https://console.helium.com) -and click **Sign Up**. - -During registration, you'll be asked to provide an Organization name. For more information about Organizations go [here](/use-the-network/console/users#organizations). - -Define an Organization name for the top level owner of the account \(i.e. company -name\). - - - -### Confirm your account - -A confirmation email will be sent to the email address used to create an -account. You must confirm the account in order to continue using Console. If you -did not receive an email, please check your spam folders. - -## Device Management - -Helium Console allows developers to add devices and grab the device identifiers -to load onto their device firmware that authenticates and identifies the device -for the Helium Network. - -### Add a Device - -To add a device, go to **Devices** and click the **+ Add Device** icon on the -top right of the window. - -When prompted, enter a name for your device. Device names do not have to be -unique \(as every device will be given a unique identifier generated by -Console\). `DevEUI`, `AppEUI`, and `AppKey` are auto generated by the Helium -Console when you create a new device. However, you can input your own `DevEUI`, -`AppEUI`, and `AppKey` if your device is already provisioned with these -credentials. - - - -Once added, you'll see a consolidated view of all your device details, as well -as the Activation Method \(only `OTAA` is currently supported\) and the LoRaWAN -US Channels used by the Helium Network \(which will always be `sub-band 2`\). - - - -## Live Data and Event Logs - -When a valid data packet is received from that device, a dot will appear from -the left side of the chart and flow towards the right as time goes on. - -Blue dots represent packets that have been successfully sent to endpoints, while -orange dots have failed to reach an endpoint, and red dots do not have a defined -endpoint. - -The size of the dot is related to the size of the packet. Larger sized packets -will be a larger dot, and small data packets will be a smaller dot. - -### Event Log - -Event Logs display real-time packets in table form. There's different categories including Uplinks, Downlinks, Join Request/Accept, Acknowledge. Here you can see size of packet, Port, and Devaddr. In addition, which -Hotspot(s) received the packet, its RSSI, SNR, Frequency, Spreading Factor and time of receipt. As well as Integration success or failure messages. - -The Event Log also provides a filter to display dropped uplinks, and allows users to filter events w/commands. - -The information in the Event Log can also exported as a JSON file. - -## Connecting Integrations to Devices - -Devices or groups of devices can be directly connected to integrations. - -To connect one or more devices to one or more integrations, simply define an integration and attach a device to it on the Flows workspace. Integrations need to be created before -they're available. You can use Labels to group devices together for easy identification and management read more on labels [here](/use-the-network/console/labels). - -## Next Steps - -Now that you have learned how to add a device on Console it's time to get an -actual device connected. We have several quickstart guides for some of the most -popular development and ready to use devices -[here](/use-the-network/devices). diff --git a/docs/use-the-network/console/troubleshooting.mdx b/docs/use-the-network/console/troubleshooting.mdx deleted file mode 100644 index 6b5a2d75e..000000000 --- a/docs/use-the-network/console/troubleshooting.mdx +++ /dev/null @@ -1,91 +0,0 @@ ---- -id: troubleshooting -title: Console Troubleshooting -sidebar_label: Troubleshooting -slug: /use-the-network/console/troubleshooting ---- - -# Console Troubleshooting - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Common issues - -### I just added my device in Console. Why am I not receiving data? - -If you are having issues receiving data after adding a new device, the first -thing to check is that the keys from the device (dev eui, app eui, app key) -match exactly what is provided by the device; it is very common for app eui and -dev eui in particular to be swapped You may also want to ensure that you are -using the correct byte ordering or “endianness” this is often labeled as MSB -(Most Significant Bit) and LSB (Least Significant Bit). Reversing byte order is -a very common mistake when adding a new device to the network. You may also want -to check that your device is a Class A device as we do not currently support -Class B, or C devices. - -### How can I view Decoded Payloads? - -To view a decoded payload using the Debug tool, you will need to first create a -function. To access Debug mode, go to your device > and click on the little bug -on the right hand side. The Decoder Function can be written using custom -JavaScript code provided by the user or selected from prebuilt decoders -(currently Browan Object Locator and Cayenne LPP). Once the function has been -created it will need to be attached to a Label or Integration. This Label that -attaches to the device must also be applied to the device. Please see -[complete Function documentation for more information](/use-the-network/console/functions/). - -### How do I manage my Hotspots on Console? - -Currently Hotspots can’t be managed or connected on Console. You will need to -use the Helium Mobile app to manage your Hotspots. - -### What does it mean when my label is greyed out? - -When a label looks greyed out, like the image below, this would indicate that it -does not have a function attached to it. - -### Why can't my sensor/device join? - -There's a number of possibilities why a sensor/device may not be able to join. See below for reasons and actions: - -- Confirm the sensor still has power (check batteries), and is configured properly. If other similar devices have joined successfully, this may be a hardware or firmware issue for that specific sensor. -- Ensure Helium Hotspot coverage is available in your area: - - Explorer for Hotspot asserted [locations](https://explorer.helium.com/) - - Mapping [data](https://mappers.helium.com/) from community members mapping coverage -- Double check to verify the **sensor keys (Dev EUI, App EUI, App Key) have been entered correctly** into Console. These keys are typically provided by the sensor manufacturer. -- If there’s only one Hotspot in the area ensure the sensor and Hotspot are separated by a minimum of at least 3m (approximatelty 10 feet), but ideally no closer than 30-50 feet. A sensor that is too close to a Hotspot may also result in repeated Join Request and Join Accept attempts. -- Once all the above items have been checked and there's still no join attempts after a few minutes try and re-initiate a rejoin by whatever means the particular device requires. - -Remember after initial joining: - -- It takes up to (20-30 mins) for a sensor to be added for the first time due to XOR filter adding sensor credentials to blockchain: for more info check [here](https://docs.helium.com/use-the-network/console/adding-devices/#when-adding-devices-for-the-first-time). - - - -### Why are my downlinks not working? - -A LoRaWAN Class A device only listens for downlinks immediately after sending -an uplink. The LoRaWAN specification defines this as the "receive windows" -(ie:`RX1`) which starts `RX_DELAY1` seconds after the uplink is complete. - - - -If the device receives no downlinks during the first window, it will listen -again one second later during the second receive window (ie: `RX2`). - -Sometimes an enqueued downlink may be received by a LoRaWAN gateway too late -for both windows. This can be due to geographic distance between the gateway -and the server or due to high latency backhauls used by the gateway (such as -cellular). - -In these cases, it is recommended to explore increasing the `RX_DELAY1` value. -More information about how to use LoRaWAN Profiles on Console to configure the -`RX_DELAY1` value is available [here](https://docs.helium.com/use-the-network/console/profiles/#receive-window-delay). \ No newline at end of file diff --git a/docs/use-the-network/console/users.mdx b/docs/use-the-network/console/users.mdx deleted file mode 100644 index 0990bf99e..000000000 --- a/docs/use-the-network/console/users.mdx +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: users -sidebar_label: Users and Organizations -slug: /use-the-network/console/users ---- - -# Users and Organizations - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -This section describes the system of Users and Organizations within Helium Console. At a high level: - -* A `user` is someone registered for Console via their email address. -* An `organization` can have any number of `users`. -* A `user` can be part of any number of `organizations`. - - -## User Roles - -The first user to register a new organization is given the highest role of -`Administrator`. - -### User Role Definitions - -User permissions and privileges are as follows: - -**Administrator** -* Manage Devices -* Manage Flows -* Manage Labels -* Manage Data Credits -* Manage Users -* Manage API Keys - -**Manager** -* Manage Devices -* Manage Flows -* Manage Labels - -**Read-Only** -* View Devices - -### Managing Users - -If you're an administrator, you can manage users for your organizations. To add a new user, once logged in, [navigate to the Users page](https://console.helium.com/users) and then click **+ Add User** in the upper right. You will be presented with a pop-up that asks you to supply the email of the new user, and select their desired access level. Once you've done this, hit **Submit** and they will be invited to join the organization via email. - - -## Organizations - -An Organization is created when first registering an account. All Organizations of which you're a member can be [viewed and managed from here](https://console.helium.com/organizations). From this screen you can switch between Organizations, delete Organizations (with appropriate permissions), view your DC balances, and make all devices for an organization either `Active` or `Inactive`(with appropriate permissions). - -Users can add additional Organizations by navigating to the **Dashboard** page using the left side -navigation, and then click **+ Add Organization** in the upper right. To switch -to another Organization click the **Switch** button on the list of Organizations -on the **Dashboard** page. - - - - - - - - diff --git a/docs/use-the-network/coverage-mapping/adeunis-mapper.mdx b/docs/use-the-network/coverage-mapping/adeunis-mapper.mdx deleted file mode 100644 index d2871d82c..000000000 --- a/docs/use-the-network/coverage-mapping/adeunis-mapper.mdx +++ /dev/null @@ -1,159 +0,0 @@ ---- -id: adeunis-mapper -sidebar_label: Adeunis Mapper -slug: /use-the-network/coverage-mapping/adeunis-mapper ---- - -# Adeunis Mapper - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Mapping Tips - -- Only operate at an above ground level of 1-2 meters, otherwise your data will - not be representative of most real world devices. -- The device is configured with an uplink interval of five seconds, sufficient - for mapping on foot or in a moving vehicle. - -## Device Instructions - -### Charging - -The device is rechargeable via a micro USB connector located on the bottom. It -will charge automatically in the ON or OFF state. The device can be used while -charging. Any charger supplying 5V and at least 500mA is sufficient. - - - -If the battery is completely empty, it will be necessary to recharge the device -for 6 hours in order for it to be fully charged. - -### Operating Procedure - -Follow all the steps provided below for step-by-step instructions on how to -properly operate the field test device. - -:::important - You must power on the device in a location with coverage in order -for the device to first join the network. If the device is not able to join, it -will never begin sending uplinks. -::: - -First, power the device On by flipping the switch on the bottom of the device -into the ON position. - - - -After you are presented with the start screen, you will see the join screen. - -{" "} - -Start Screen - - - -Join Screen - -Press _Push Button 2,_ shown below, once to navigate to the GPS screen, also -shown below. If the backlight is off, you will have to press the button twice, -once to turn the backlight back on and another time to navigate to the next -screen. - - - -Push Button 2 - - - -GPS Screen - -Once you have navigated to the GPS screen you'll next be monitoring this screen -to validate that the device has a sufficient GPS fix (enough satellites are -visible to accurately calculate its position and time). Make sure the device is -located in a place where a good amount of the sky is visible. Once your device -obtains a fix (this may take a few minutes), you will see a latitude and -longitude show as well as how many satellites are visible. It's best if six or -more satellites are visible. You can now navigate to the Packet Count screen by -again pressing the same _Push Button 2_, once if the display backlight is on, -and twice if it is off. - -:::important -Ignore the PER % number as shown in the packet count screen below. -This value is not meaningful for the current configuration. Only pay attention -to the UL\(Uplink\) Count. -::: - - - -Packet Count Screen - -Once you see a positive number in the UL Count field, you have successfully -joined the network and are now transmitting packets with location data. At this -point you are ready to begin mapping new area. Read about how you can view your -location live with Helium Cargo below! When you are finished, simply switch the -power switch to OFF. - -## Viewing on Cargo - -When your device is transmitting packets with a valid GPS fix your device will -be visible on [cargo.helium.com](https://cargo.helium.com/). The device names -are in the format of _Mapper \#_, with the number being that which is displayed -on the front of your device with a label as shown below. The Avg Speed, -Elevation, and Voltage will always show zero, as these values were not included. - - - -When you click on your device on the left, you will see a details window pop up -in the right top of the window. Here you can click on the _Sequence No_ box -shown below to get a time series view of each packet that was received in -sequence as well as the Hotspot that received it. The sequence number should -match the _UL Count_ on the _Packet Count_ screen shown on the device, although -it will likely be a few seconds delayed. The sequence number will start from -zero after each power cycle of the device. - - - -You can also click on the _RSSI_ box shown below to view a time series view -again, but with the signal strength and Hotspot that received each packet. - - diff --git a/docs/use-the-network/coverage-mapping/coverage-mapping.mdx b/docs/use-the-network/coverage-mapping/coverage-mapping.mdx deleted file mode 100644 index dab2e4b92..000000000 --- a/docs/use-the-network/coverage-mapping/coverage-mapping.mdx +++ /dev/null @@ -1,177 +0,0 @@ ---- -id: coverage-mapping -hide_title: true -sidebar_label: Coverage Mapping -slug: /use-the-network/coverage-mapping ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - - -# Coverage Mapping - -Coverage mapping is a crowd-sourced effort to build a true-signal coverage map of the Helium network across the globe. By mapping real-world coverage, network users can understand where sensor deployments are likely to have success connecting to Helium. - -> Coverage mapping should only be done from ground level, or slightly above it. We would like the map to indicate the expected coverage a standard sensor device would experience. If you want to fly a GPS tracker on a balloon or aircraft, please do not contribute this data to the coverage map. - -Be sure to check out the ongoing conversation in the dedicated `#mappers` channel on the [Helium Discord Server](https://discord.gg/helium). - -## Mapping Projects - -### Helium Mappers - -Helium Mappers lets you see the areas that have been explored by participants in the coverage mapping project. The map also shows the Helium hotspots that have provided coverage to these areas. Helium Mappers uses the H3 hexagon tiles to aggregate survey results and provided statistics. -View Mappers data at [mappers.helium.com](https://mappers.helium.com/). - -### Helium Cargo - -Cargo is an evaluation tool for LoRaWAN GPS tracking devices. It shows the current location of these devices, along with the coverage of the network as an H3 hex grid. While Helium Mappers shows an aggregate view of the network coverage, Cargo can display specific mapper devices by name, and their most-recent position reports. - -View GPS trackers on Cargo at [cargo.helium.com](https://cargo.helium.com/). - -### CoverageMap.net - -Coverage Map is a third party tool that draws heatmaps for LoRaWAN networks. This tool has the ability to show raw survey results for devices and hotspots. It aggregates coverage measurements into a heatmap, radar plots and alpha shapes. -View Helium's heatmap at [CoverageMap.net](https://coveragemap.net/). - -## Mappers Newsletter -Join the Mappers [newsletter](https://www.helium.com/mappers) to stay up to date on new and upcoming features. - -## Project Roadmap -Take a look at the big picture in the [Mappers Roadmap](/use-the-network/coverage-mapping/mappers-roadmap). The roadmap is a great way to understand the full scope of the project and find an area to make your own contributions to the project. - -## Frequently Asked Questions - -### How does Mappers work? -Participants use low cost LoRaWAN devices to survey the real-world network created by Helium. Many contributors bring their mapper with them when they walk, hike, bike, drive or even boat! They’re small and fit well in a pocket or on a car dash. Some have set up their mappers so they’re contributing to the coverage map every time they take a drive. - -In order to place a mark on the map, the mapper device sends out a signal with a GPS location encoded. If a Helium Hotspot ‘hears’ that signal, data is passed through the internet and recorded in the Mappers database. The Mappers database uses the GPS information from the Mapper to ‘light up’ the hex on the map. - -### Why should I contribute to Mappers? -There are a variety of ways that Mapping is valuable to both hotspot owners and network users. -For hotspot owners, the collected data helps to visualize the coverage provided by all Helium hotspots - identifying areas where coverage is lacking or even where hotspot placements could be made that would participate in Proof of Coverage with other hotspots. A marked hex on the map indicates that uplink signals from registered Helium LoRaWAN sensors have been proven to be “heard” by the Helium network somewhere within that hex shaped area. - -For network users, the map proves the real-world coverage that hotspots provide. This is like looking at the Verizon or T-Mobile map when evaluating phone plans, but for business users. This real world evidence at the scale and resolution offered by our map gives prospective network users the information they need to make decisions about their deployments. -As an example, this map is what someone like Lime scooters would look to before they sign a contract. - -In short, a robust map means high priced customers, which means adoption, which means the network grows and the token value increases. - -### Do I earn HNT for contributing? -No, coverage mapping is entirely voluntary. In order to participate in mapping, you will need to spend Data Credits to pay for the data transfer that your mapper uses. To get you started, new Helium Console accounts are funded with 10,000 DC. Beyond that, HNT can be converted to DC to fund device data transfer or DC can be purchased directly through Console. - -Mapping does not make a hotspot earn more HNT through Proof of Coverage. -The real value is to prove the network, drive adoption, and increase the purchase of data credits by commercial users. - -If the hotspots that you are mapping are your own, those data credits are paid back to your hotspots in the form of HNT. Hotspots earn HNT for data packets they transfer, for mapping or otherwise. - -### How can I use Mappers for my own hotspot deployments? -* Find new locations for hotspots. -* Get real-world information about how far your hotspot reaches. -* Learn RF data analytics in an interactive way. - -### How can I use Mappers for my own sensor deployments? -Take a mapping device to the area where you want to deploy sensors and watch to see if it is picked up by a hotspot in the hex where you want to deploy a sensor. If it’s picked up by only one hotspot, decide if you want to deploy an additional hotspot in that area for sensor connection redundancy. Look at existing mapped areas for confirmation that your sensors can be deployed in that area and how many hotspot can pick them up. It only takes one hotspot to receive and transmit data through the internet, but the redundancy offered by the Helium Network helps to ensure that your data is received. - -## Get Started with Mapping -There are a wide variety of ways to get involved depending on your level of comfort with arduino-type devices. A few common devices are listed below, but in no way is this list exhaustive. - -### Fully Preconfigured -Fully managed mapping devices are ready to use as soon as they arrive. These are pre-configured and enrolled by the seller, and not your own Helium Console. The Data Credits are provided by the seller, and the devices have pre-selected back-end Integrations that are not user-configurable. Generally, these devices are the most easy and accessible, requiring just power to start mapping. -* IoWe Coverage Mapper - * [Product page](https://www.internetofwe.net/product-page/helium-coverage-mapper) -* Wio Terminal LoRaWAN Field Tester - * [Product page](https://www.seeedstudio.com/WioField-Tester-Kit-p-5282.html) - -### Plug & Play -Console-ready device that you onboard to spend your own Data Credits. -The [Mappers Quickstart](/use-the-network/coverage-mapping/mappers-quickstart) guide focuses on the the Dragino LGT-92, but the steps are effectively the same for any mapping device. -* Adeunis Field Test Device - * [Product page](https://www.adeunis.com/en/produit/ftd-network-tester/) - * [Adeunis tutorial](/use-the-network/coverage-mapping/adeunis-mapper) -* Dragino LGT-92 - * [Product page](https://www.dragino.com/products/lora-lorawan-end-node/item/142-lgt-92.html) - * [Dragino LGT-92 tutorial](/use-the-network/coverage-mapping/mappers-quickstart) -* Fiz-Tech Mapper - * [Product page](https://fiz-tech.net/search?type=tag&q=Mapper) -* Glamos Walker - * [Product page](https://glamos.eu/product/walker/) - * [Glamos Walker tutorial](https://glamos.eu/manual/) -* RAK Wireless RAK7200 - * [Product page](https://store.rakwireless.com/products/rak7200-lpwan-tracker?variant=29669491867693) - -### DIY -Flash your own code, add the device to your Helium Console, and spend your own Data Credits. Setting up a mapper from your own dev board is a great way to learn about LoRaWAN devices on the Helium Network. - -* Heltec CubeCell GPS-6502 (HTCC-AB02S) - * ARM Cortex M0+, AIR530Z GPS module with internal antenna, SX1262 LoRa, OLED Screen - * [Product page](https://heltec.org/project/htcc-ab02s/), [Product page via Parley Labs](https://shop.parleylabs.com/collections/iot-developers-products/products/cubecell-gps-6502-by-heltec-htcc-ab02s), [IoWE DIY Kit](https://www.internetofwe.net/product-page/diy-coverage-mapper-kit-us915) - * [Heltec Cubecell (jas_williams)](https://github.com/jas-williams/CubeCell-Helium-Mapper) - * [Heltec Cubecell (kicko)](https://github.com/hkicko/CubeCell-GPS-Helium-Mapper) - * [Heltec Cubecell (Max_Plastix)](https://github.com/Max-Plastix/CubeCell-GPS-Helium-Mapper) Alternate UI and behavior -* LILYGO TTGO T-Beam - * ESP32 with LoRa, WiFi, Neo-6M GPS, BlueTooth, SMA Antenna, 18650 Battery holder and 0.96" OLED screen. - * There are multiple versions of the TTGO T-Beam available. Version `v1.1` is recommended, and often sold with the Meshtastic software pre-loaded. - * [Product page](http://www.lilygo.cn/prod_view.aspx?TypeId=50060&Id=1317&FId=t3:50060:3) - * [TTGO T-Beam (kizniche)](https://github.com/kizniche/ttgo-tbeam-ttn-tracker) - * [TTGO T-Beam (khrys)](https://github.com/khrys63/helium-mapper-tbeam) - * [TTGO T-Beam (hekopath)](https://github.com/hekopath/ttgo-rev1-helium) - * [TTGO T-Beam (tmiklas)](https://github.com/tmiklas/tbeam-helium-mapper) - * [TTGO T-Beam (Max_Plastix)](https://github.com/Max-Plastix/tbeam-helium-mapper) - * RAK Wireless Helium Mapper Kit - * [Product page](https://store.rakwireless.com/products/helium-mapper-kit?variant=41259355701446) - * [RAK Helium Mapper Kit tutorial](https://news.rakwireless.com/make-a-helium-mapper-with-the-wisblock/) - * Helium Dev Kit / RAK WisBlock - * [Product page via RAKWireless](https://store.rakwireless.com/products/helium-developer-kit), [Product page via ParleyLabs](https://shop.parleylabs.com/collections/iot-developers-products/products/helium-wisblock-connected-kit) - * [Helium Dev Kit tutorial (arkieguy)](https://github.com/arkieguy/RAK4631-Helium-Mapper) - * [Make a Helium Mapper with the WisBlock (johansmacias)](https://news.rakwireless.com/make-a-helium-mapper-with-the-wisblock/) - * Ingenious Things Mapper (disk91) - * [Product page](https://shop.ingeniousthings.fr/products/helium-lorawan-field-tester-and-mapper-kit) - * [Disk91 Mapper tutorial](https://www.disk91.com/2021/technology/lora/low-cost-lorawan-field-tester/) - -### Device comparisons -Which hardware platform to select for DIY? Two common and inexpensive platforms are the CubeCell GPS-6502 and LilyGo TTGO T-Beam v1.1. Here are some approximate comparisons: - -| | CubeCell GPS-6502 | TTGO T-Beam | -| --- | --- | --- | -| Cost (USD) | $33 (Parley Labs) | $35 Amazon or $25 AliExpress | -| Size | Smaller | 2x Longer | -| Battery | Add ~1000mA LiPo plug-in | 18650 LiIon cell holder | -| Power Switch | None | Power Button / PMU | -| Battery Charger | Hardware USB charger | PMU programmable charger | -| GPS | Air530Z | uBlox Neo-6M | -| Operating Current | TBD | 110mA | -| Connector | microUSB side | microUSB bottom | -| Buttons | 2: Menu, Reset | 3: Power/Menu, Select, Reset | -| GPS Antenna | on-board ceramic + IPEX external connector | Included active antenna on IPEX | -| LoRa Antenna | Wire-coil IPEX antenna | SMA with included stubby or 10cm antenna | -| Display | 0.96" OLED, installed | 0.96" OLED, DIY Solder 4-pin | -| LEDs | Green GPS Fix, RGB LED, Red Charging | Red GPS Fix, Blue & Red programmable | -| Processor | ASR6502 / Cypress PSoC 4000 | ESP32 | -| LoRa Radio | SX1262 | SX1278/76 | -| PMIC | -none- | AXP192 | -| Open Source | parts | yes | -| WiFi & Bluetooth | no | yes | - -### Configuration Basics -At its core, contributing to Helium Mappers is just a matter of delivering a specific payload through the console. Learn more about the [Mappers API](/use-the-network/coverage-mapping/mappers-api). - -If your mapping device is delivering messages to Helium Mappers, you can also enable the integrations for [Cargo](https://docs.helium.com/use-the-network/console/integrations/cargo/) and [CoverageMap.net](https://docs.ttnmapper.org/integration/helium.html) to contribute to these two projects using the same Decoded payload. - -A flow that sends data to all three projects would look similar to this: - -![Helium flow mappers](flow-mappers-cargo-coverage.png) - - -## Understanding the Mappers Visualization -From within the [Mappers tool](http://mappers.helium.com), clicking on a green hexagon will allow you to get more information about the coverage available in that region. -* H3 Index - * The funny looking number like `89283082853ffff` is the unique h3 index of the hexagon on the map. In other words, it's the hex’s name. H3 is a system of managing global datasets, and is pervasive throughout different Helium protocols. -* RSSI - * “Received Signal Strength Indicator” is a measure of the power present in a received radio signal. This number is computed by the hotspot when it hears the signal from a mapper. The higher the signal (less negative), the ‘stronger’ it is considered. -* SNR - * “Signal to Noise” measures the ratio of received power to background power in the received signal. Like the RSSI, it is also computed by the hotspot when it hears signal from the mapper. A higher ratio represents a clear signal whereas a negative number in this field represents a noisy signal. -* Redundancy - * The total count of hotspots that heard a mapper from within this hex. This metric is helpful in understanding the resilience of the network in a given area. -* Distance - * This is the approximate distance of the mapper from the hotspot that heard it. diff --git a/docs/use-the-network/coverage-mapping/flow-mappers-cargo-coverage.png b/docs/use-the-network/coverage-mapping/flow-mappers-cargo-coverage.png deleted file mode 100644 index 2753701be..000000000 Binary files a/docs/use-the-network/coverage-mapping/flow-mappers-cargo-coverage.png and /dev/null differ diff --git a/docs/use-the-network/coverage-mapping/mappers-api.mdx b/docs/use-the-network/coverage-mapping/mappers-api.mdx deleted file mode 100644 index 992cb347a..000000000 --- a/docs/use-the-network/coverage-mapping/mappers-api.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -id: mappers-api -sidebar_label: Mappers API -slug: /use-the-network/coverage-mapping/mappers-api ---- - -# Mappers API - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## Introduction - -The Mappers API is a set of HTTP requests used for submitting data to the -Mappers project. Data submitted is viewable on -[mappers.helium.com](https://mappers.helium.com) and updated in real time. - ---- - -### Authentication - -There is currently no authentication required. - -### Ingest Uplink - -``` -POST https://mappers.helium.com/api/v1/ingest/uplink -``` - -Submit geo tagged device uplink. - -`Content-Type: application/json` - -Requests are intended to be sent from an HTTP integration within Console. -Metadata from the standard JSON message is used in addition to the required -fields detailed below. - -All required fields are case sensitive and must be in the top level of the -decoded payload section as shown below: -```json -"decoded": { - "payload" : { - "accuracy": 2, - "altitude": 2, - "latitude": 38.811706, - "longitude": -121.607035 - } -} -``` - -All of the following fields are required `latitude`, `longitude`, `altitude` -, `accuracy`. - - - - -_Body Parameters_ - -| Parameter Name | Type | Description | Expected Unit | Example | -| --------------- | -------- | --------------------------- | --------------- | ---------------------- | -| latitude | _float_ | Device Latitude Value | Decimal Degrees | ` 37.79518664339426` | -| longitude | _float_ | Device Longitude Value | Decimal Degrees | `-122.39384483747301` | -| altitude | _int_ | Device Altitude Value | Meters | `10` | -| accuracy | _float_ | Device GPS Accuracy Value | Meters | `2.3` | - - - - -200: OK -Request submission successful - -``` -Success -``` - -400: Bad Request -Required request parameters not found. - -``` -Invalid Fields -``` - - - diff --git a/docs/use-the-network/coverage-mapping/mappers-quickstart.mdx b/docs/use-the-network/coverage-mapping/mappers-quickstart.mdx deleted file mode 100644 index ef689e64c..000000000 --- a/docs/use-the-network/coverage-mapping/mappers-quickstart.mdx +++ /dev/null @@ -1,174 +0,0 @@ ---- -id: mappers-quickstart -sidebar_label: Mappers Quickstart -slug: /use-the-network/coverage-mapping/mappers-quickstart ---- - -# Mappers Quickstart - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -This guide will show you step by step how to contribute data to the Mappers -project with an off-the-shelf tracker. This guide will use the [Dragino LGT92](https://www.dragino.com/products/lora/item/142-lgt-92.html), -but any LoRaWAN compatible tracker will work. - -### Steps - -1. Add device to Console. -2. Create new HTTP integration with Mappers API ingest endpoint. -3. Create Function Decoder to decode device payload. -4. Create a Flow and verify data is being sent successfully. - -### 1. Add Device to Console - -To start, you'll need to add your device to Console. You should have been -provided with a DevEUI, AppEUI, and AppKey from the seller of the device. -Follow our [quickstart](/use-the-network/console/quickstart) for instructions on how to add a new device to -Console. - -### 2. Create HTTP Integration - -To create a new HTTP integration in Console, navigate to the -Integrations page using the left navigation and then select the HTTP -integration. - - - -Next we'll fill in the details, see instructions and image below. - -1. Enter the Mappers API Ingest Endpoint URL (Required) - `https://mappers.helium.com/api/v1/ingest/uplink` -2. Enter the name for this Integration: _Mappers Integration_ -3. Finally, click _Add Integration_ to complete. - - - -### 3. Create Function Decoder - -Next, we'll be creating a Function decoder to decode the payload from the device -and properly format it for the API endpoint. The decoder is specific to the -encoding scheme used to encode the data before the device transmits it. For off-the-shelf -devices this is usually manufacturer specific. For development devices, -[CayenneLPP](https://developers.mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload) is often used. For this guide we'll be using a decoder specifically made for -this tracking device. We have a repository with decoders for various devices [here](https://github.com/helium/console-decoders). - -To start, navigate to the Functions page using the left navigation and then -click _Add Function_. - -1. Enter a name for the decoder (below we've used _Dragino LGT92 Decoder_), select the - type of Function, _Decoder_ in this case, and finally select _Custom Script_ - from the drop down. -2. Copy and paste the complete decoder function provided by the manufacturer or - found [here](https://github.com/helium/console-decoders/blob/master/Dragino/LGT92/decoder-v1.6.4.js). - - ```javascript - function Decoder(bytes, port) { - // Decode an uplink message from a buffer - // (array) of bytes to an object of fields. - var latitude;//gps latitude,units: ° - latitude = (bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3]) / 1000000;//gps latitude,units: ° - var longitude; - longitude = (bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7]) / 1000000;//gps longitude,units: ° - var alarm = (bytes[8] & 0x40) ? "TRUE" : "FALSE";//Alarm status - var batV = (((bytes[8] & 0x3f) << 8) | bytes[9]) / 1000;//Battery,units:V - if ((bytes[10] & 0xC0) == 0x40) { - var motion_mode = "Move"; - } - else if ((bytes[10] & 0xC0) == 0x80) { - motion_mode = "Collide"; - } - else if ((bytes[10] & 0xC0) == 0xC0) { - motion_mode = "User"; - } - else { - motion_mode = "Disable"; - } //mode of motion - - var led_updown = (bytes[10] & 0x20) ? "ON" : "OFF";//LED status for position,uplink and downlink - var Firmware = 160 + (bytes[10] & 0x1f); // Firmware version; 5 bits - var roll = (bytes[11] << 24 >> 16 | bytes[12]) / 100;//roll,units: ° - var pitch = (bytes[13] << 24 >> 16 | bytes[14]) / 100; //pitch,units: ° - var hdop = 0; - if (bytes[15] > 0) { - hdop = bytes[15] / 100; //hdop,units: ° - } else { - hdop = bytes[15]; - } - var altitude = (bytes[16] << 24 >> 16 | bytes[17]) / 100; //Altitude,units: ° - return { - latitude: latitude, // Note that must be lower-case - longitude: longitude, - altitude: altitude, - accuracy: 3, - Roll: roll, - Pitch:pitch, - BatV:batV, - ALARM_status:alarm, - MD:motion_mode, - LON:led_updown, - FW:Firmware, - HDOP:hdop, - } - } - ``` - - Next we need to verify that all required fields are present in the function. - Find more details on the API specification [here](/use-the-network/coverage-mapping/mappers-api). - The required fields are case-sensitive. If you got your decoder from the manufacturer and one or - more required fields are missing - add them with hard-coded values like accuracy in the above example. - -3. Finally, save your function. - - - -### 4. Create a Flow - -Next we will create a [_Flow_](/use-the-network/console/flows/orientation). Navigate to the Flows page and click the + sign next to Nodes. - - - -Drag and drop your device, function and integration on the workspace. Link them -by drawing lines with your mouse between the connection points. -Link device -> decoder -> integration. - - - -You are now ready to power on your device and verify that data is being sent -correctly to the Mapper API. To do this just expand an uplink event in the event -log and verify that you are getting a _"Success"_ message for the integration as -shown below. - - - -That's all! You can now expect to see your data show up on [mappers.helium.com](https://mappers.helium.com) in a few minutes. If you want to -see where your mapper is on the map, you could use [Cargo](https://cargo.helium.com). You will have to add one more [integration](/use-the-network/console/integrations/cargo/#add-a-cargo-integration) and link it to the decoder in your flow. - - \ No newline at end of file diff --git a/docs/use-the-network/coverage-mapping/mappers-roadmap.mdx b/docs/use-the-network/coverage-mapping/mappers-roadmap.mdx deleted file mode 100644 index a22c71f28..000000000 --- a/docs/use-the-network/coverage-mapping/mappers-roadmap.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -id: mappers-roadmap -sidebar_label: Mappers Roadmap -slug: /use-the-network/coverage-mapping/mappers-roadmap ---- - -# Mappers Roadmap - -## Introduction -The Mappers project is a crowd-sourced effort to build a true-signal coverage map of the Helium network across the globe. - -The goal for this roadmap is to get the Helium coverage map to a state where it offers a full understanding of the ubiquitious LoRaWAN and 5G networks and can be adapted for future protocols. -In pursuit of this goal, there are several high-level objectives that are broken out into their tactical subparts. - -Since this project is an open source, community-driven effort; timelines have not been applied to the various goals listed. We encourage the community to adopt any of the goals in the effort of growing the project. - -## Make It Easier to Contribute -### Mapping Device Tutorials -In the nearterm, the easiest way to enable more people to participate in mapping is simply to make it easier for them to get started. - -Any community member with experience getting their own device set up can help the next wave of mappers get their start! If you have experience getting a device set up, consider contributing your experience in the form of an in-depth guide. - -### Develop BLE Mapper -We seek to build new firmware, initially targeting bluetooth-enabled, nRF52-based devices like the RAK WisBlock or TTGO T-Echo. Building on this platform allows us to address some of the shortcomings of LoRa-only mappers by leveraging the Bluetooth to pair with a phone. - -This firmware will be open source and accompanied by a protocol that other developers can follow if they wish to build their own variations. Any party will be able to manufacture and sell their own mapping devices. - -The current generation of mapping devices do a great job of showing coverage where it exists, but are unable to report where coverage does not exist. By pairing with a phone, we can utilize the cellular connection to report when an uplink has been attempted. With this information we have geographic record a packet that should exist that can be compared with received data. - -The device can optionally include a GPS module which would allow reducing overall cost. When a GPS module is not available, a phone connection would be required to provide geographic information. - -Existing devices will continue to be supported. - -### Native Mapping App -In association with the new BLE-based mapper, a purpose-built phone app must be developed to interface with these devices. This opens many opportunities to streamline the experience for community members joining the project. - -The onboarding of devices will no longer require the creation of a console account, EUI onboarding, or device flashing. Devices will be onboarded throught the app, and data credit costs may either be paid by a party like Helium, DeWi, or covered through a small in-app fee. Just pair the device with the app and it's ready to map. - -To make sure all mappers are up to date, software has been developed that will allow the mapping device to be updated directly through the app as the BLE mapper firmware evolves. - -## Better Understand Mappers Data -### Continued Mappers v2 Improvements -Mappers v2 was structured to be the 'Minimum Lovable Release' of the longterm vision, a Helium Coverage Explorer. In pursuit of the next major release, we have used v2 to teach us the value of the data, how it is used, and how community members most enjoy contributing. The v2 platform has already done a lot to help us in this respect. In the effort of continuing our user research, we will continue to add additional features and enhancements. These additions will continue to be tracked as issues on the [Mappers Github](https://github.com/helium/mappers/issues) project. - -### Mappers v3 (Coverage Explorer) -In pursuit of supporting more in-depth analysis of the data, more tools, layers, and metrics can be surfaced in the app. A rework of the UI will allow these features to be added ad-hoc to the application. -It is also possible that the mappers data finds itself in the Helium Explorer, augmenting the data already offered there. - -As example, a few features that may land in a v3 release: -* Showing the coverage for a single hotspot. -* New map layers showing redundancy or recency. -* Filters for altitude or spreading factor. -* Clearing of data from old assertions of hotspots. - -## Enable Community Participation -### Mappers API -Mappers v1 and v2 have offered a glimpse of what is possible with the data collected by the Mappers community. Outside of the Mappers project, we have seen explosive growth of community-developed apps like Hotspotty and Helium Vision - to name a few. - -In the interest of enabling the community to build on top of the Mappers dataset, a cohesive API can be built to support developers in crafting their own reprentation of Helium coverage. - -### Open Source -All source of this project will continue to be freely available to the community. In purusit of further enabling community involvement, documentation of code, issues, and roadmap will continue to be a high priority. Open source also means nothing is set in stone, and community input continues to shape the future of this project. - -### Further Engage Mappers -Should mapper growth be lower than desired, there are opportunities to further grow. Other roadmap items likely take priority. -* Leaderboard -* Capture the Hex game - -## Forward-looking Opportunities -### Explore Secure Mappers -Many have recognized the value of real-world coverage data as a valuable resource for proof of coverage and hotspot verification. However, the current system of submitting mapper data is inadequate for protecting the incentive-based models that reward hotspot owners. This is due only to the fact that submitting false data to Mappers would be a trivial task. (As such, no data from this system would ever be used in this manner.) - -In order to leverage Mappers data for network verification; new ingest protocols will need to be built and new classes of hardware will need to be developed that are hardened against attack by those who might submit false coverage information. - -### Additional Community Input -As with all parts of the Helium project, we look to the community to develop use cases, provide feedback, and define new features. Get involved in the Mappers project: -* [Mappers Project GitHub](https://github.com/helium/mappers/) -* [Helium Community Discord](https://discord.gg/helium) - `#mappers` channel. \ No newline at end of file diff --git a/docs/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95.mdx b/docs/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95.mdx deleted file mode 100644 index 57fa61321..000000000 --- a/docs/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -id: adafruit-feather-m0-rfm95 -hide_title: true -sidebar_label: Adafruit Feather M0 RFM95 -slug: /use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Adafruit Feather M0 RFM95 - - - -## Introduction - -The Adafruit Feather M0 RFM95 is Adafruit's popular ATSAMD21G18(ARM Cortex M0) -based LoRa development board with built in USB and battery charging. - -### Resources - -- [Product Page](https://www.adafruit.com/product/3178) -- [Manual](https://learn.adafruit.com/adafruit-feather-m0-radio-with-lora-radio-module/downloads) -- [Schematic ](https://learn.adafruit.com/assets/32914) - -### Firmware Quickstart Guides - -[Arduino Guide](/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/arduino) - -### Complete Integration Guides - -[Adafruit IO Guide](/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruitio) diff --git a/docs/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruitio.mdx b/docs/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruitio.mdx deleted file mode 100644 index 5781c7386..000000000 --- a/docs/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruitio.mdx +++ /dev/null @@ -1,401 +0,0 @@ ---- -id: adafruitio -hide_title: true -sidebar_label: AdafruitIO Guide -slug: /use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruitio ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Adafruit IO Guide with Adafruit Feather M0 RFM95 - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## Introduction to Guide - -:::important - -Before we begin, please make sure you've followed the steps from the Console -quickstart [here](/use-the-network/console/quickstart). This will ensure you -have a Console account and have created a new device. - -::: - -## Objective and Requirements - -In this guide, you will learn how to: - -- Connect your hardware -- Setup your firmware environment -- Program a basic application that will send packets over the Helium Network -- Verify real-time packets sent to the Helium Console via Hotspot that's in - range -- Create an AdafruitIO integration and attach to device - -For this example, you will need the following: - -### Hardware - -- [Adafruit Feather M0 - RFM95](https://www.adafruit.com/product/3178) -- [DHT22 Temperature and Humidity Sensor](https://www.adafruit.com/product/385) -- Micro USB Type B Cable - - [Example](https://www.amazon.com/AmazonBasics-Male-Micro-Cable-Black/dp/B0719H12WD/ref=sr_1_2_sspa?) -- Jumper cables - -### Software - -- [Arduino software \(IDE\)](https://www.arduino.cc/en/Main/Software) -- [Helium Console](https://console.helium.com/) - -## Hardware Setup - -This step will cover adding an antenna, jumping pins on the LoRaWAN radio, and -finally wiring the DHT22 temperature and humidity sensor. Below is a breadboard -wiring diagram that you can reference for your setup. - - - -### Adding the Antenna - -Please visit Adafruit's Documentation for antenna options and instructions -[here](https://learn.adafruit.com/adafruit-feather-m0-radio-with-lora-radio-module/antenna-options). - -### Jumping IO1 to Pin6 - -In order to use the RFM95 radio module onboard the Feather M0 for LoRaWAN we'll -need to connect two pins together. The pins are labeled `io1` and `6` on the -board, as shown below. If you have the headers soldered on, you can use a female -to female jumper cable to connect them, or you can simply solder a wire from pin -to pin. - - - -### Wiring the DHT22 Sensor - -Connect the signal pin `2` of the DHT22 sensor to pin `12` on the feather board. -You will also need to add a pull up resister (20-50k) between the signal pin `2` -of the DHT22 sensor and the 3.3V supply. Last, connect the power(3.3V or 5V) and -ground pins. Please reference the breadboard diagram above. - -## Software Setup - -### Getting the Arduino IDE - -Download and install the latest version of -[Arduino IDE](https://www.arduino.cc/en/Main/Software) for your preferred OS. - -- [Windows](https://www.arduino.cc/en/Guide/Windows) -- [Linux](https://www.arduino.cc/en/Guide/linux) -- [Mac OSX](https://www.arduino.cc/en/Guide/MacOSX) - -### Arduino Board Support - -The Adafruit Feather M0 requires two Arduino board support packages. Follow the -instructions below to install both. - -#### Arduino SAMD Boards \(32-bits ARM Cortex-M0+\) - -To install, open your Arduino IDE: - -1. Navigate to \(**Tools > Boards > Boards Manager...\)** -2. Search for **Arduino SAMD Boards \(32-bits ARM Cortex-M0+\)** -3. Select the newest version and click Install - -#### Adafruit SAMD Boards - -To install, open your Arduino IDE: - -1. Navigate to **\(File > Preferences\), \(Arduino > Preferences\) on - MacOS.** -2. Find the section at the bottom called **Additional Boards Manager URLs:** - - - -1. Add this URL in the text box: - -```text -https://adafruit.github.io/arduino-board-index/package_adafruit_index.json -``` - -1. Close the Preferences windows - -Next, to install this board support package: - -1. Navigate to \(**Tools > Boards > Boards Manager...\)** -2. Search for **Adafruit SAMD Boards** -3. Select the newest version and click Install - -### Arduino Library - -To communicate with Helium's LoRaWAN network, we'll need to install an Arduino -library. - -To install, open your Arduino IDE: - -1. Navigate to Library Manager \(**Sketch > Include Library > Manage - Libraries**\). -2. In the search box, type **IBM LMIC framework** into the search, select the - version shown below, and click Install. - - - -To communicate with the DHT22 sensor, we'll need to install an Arduino library. - -To install, open your Arduino IDE: - -1. Navigate to Library Manager \(**Sketch > Include Library > Manage - Libraries**\). -2. In the search box, type **DHT22 sensor library** into the search, select the - version shown below, and click Install. - - - -To encode our data with CayenneLPP, we'll need to install an Arduino library. - -To install, open your Arduino IDE: - -1. Navigate to Library Manager \(**Sketch > Include Library > Manage - Libraries**\). -2. In the search box, type **CayenneLPP** into the search, select the version - shown below, and click Install. - - - -#### Update IBM LMIC framework config.h - -This library requires that a config file be setup properly. After you have -installed the `IBM LMIC framework` library, navigate to it's directory on your -operating system found below. Next, replace the `config.h` file in this -directory with this -[config.h](https://github.com/helium/longfi-arduino/blob/master/Adafruit-Feather-M0-RFM95/longfi-us915/config.h) -file. - -linux: /home/{user}/Arduino/libraries/IBM_LMIC_framework/src/lmic -windows: Documents/Arduino/libraries/IBM_LMIC_framework/src/lmic -mac os: Documents/Arduino/libraries/IBM_LMIC_framework/src/lmic - -### Programming Example Sketch - -Now that we have the required Arduino board support and library installed, lets -program the board with the provided example sketch. - -To create a new Arduino sketch, open your Arduino IDE, \(**File > New\).** -Next, replace the template sketch with the sketch found -[here](https://github.com/helium/longfi-arduino/blob/master/Adafruit-Feather-M0-RFM95/longfi-us915-cayenne-dht22/longfi-us915-cayenne-dht22.ino), -copy and paste the entirety of it. - -Next we'll need to fill in the AppEUI\(lsb\), DevEUI\(lsb\), and AppKey\(msb\), -in the sketch, which you can find on the device details page on Console. Be sure -to use the formatting buttons to match the endianess and formatting required for -the sketch, shown below. - - - -At the top of the sketch, replace the three **FILL_ME_IN** fields, with the -matching field from Console, example shown below. - - - -### Selecting Board - -Next, we need to select the correct board to build for in the Arduino IDE. -Navigate to \(**Select Tools > Board: > Adafruit Feather M0\).** - -### Enter Bootloader Mode - -Next, we need to place the board into bootloader mode, which allows us to update -it with new firmware. To do this, first plug the device into your computer, make -sure the power switch is turned on \(you should see a red LED on\). Next, -quickly double click the reset push button on the top side of the board, you -should see the red LED slowly blink. If you see this then you have successfully -entered bootloader mode. - -### Selecting Port - -We're almost ready to upload our sketch, the very last step is to select the -correct Serial port in the Arduino IDE. Navigate to \(**Tools > Port: -Adafruit Feather M0**\). You will also see either **COM\# or /dev/ttyACM\#** -depending on whether you are on Windows, Mac, or Linux. If you do not see a -port, please visit the Drivers section in -[Adafruit's Docs](https://learn.adafruit.com/adafruit-feather-m0-radio-with-lora-radio-module/using-with-arduino-ide#install-drivers-windows-7-and-8-only-6-11) -to make sure you have what's needed for your operating system. - -### Upload Sketch - -We're finally ready to upload our sketch to the board. In the Arduino IDE, click -the right arrow button, or navigate to \(**Sketch > Upload\),** to build and -upload your new firmware to the board. You should see something similar to the -image below at the bottom of your Arduino IDE, when the upload is successful. - - - -### Viewing Serial Output - -When your firmware update completes, the board will reset, and begin by joining -the network. Let's use the Serial Monitor in the Arduino IDE to view the output -from the board. We first need to select the serial port again, but this time it -will be a **different port** than the one we selected to communicate with the -bootloader. Once again, navigate to \(**Tools > Port: Adafruit Feather -M0**\), but make sure the serial device, either COM\# or ttyACM\#, is different! -Next navigate to \(**Tools > Serial Monitor**\), you should begin to see -output similar to below. - - - -Now let's head back to [Helium Console](https://console.helium.com) and look at -our device page, you should see something similar to the screenshot below. - - - -Congratulations! You have just transmitted data on the Helium network! The next -step is to create and attach the AdafruitIO integration. - -## Adafruit IO - -Next we'll create and attach the Adafruit IO integration. - -You can sign up for a free account at -[https://io.adafruit.com](https://io.adafruit.com/). - -To add the integration in Console, go to **Integrations** on the left-hand menu. -Select the integration to add - in this case, the **Adafruit IO** integration as -shown below. - - - -The next step is to enter your Adafruit IO username and key. These can be found -by visiting [https://io.adafruit.com](https://io.adafruit.com/) and clicking -_MyKey_ in the top right corner as shown below. - - - -You will then be presented with both your username and key as shown below. - - - -Copy these values into the username and key fields in Console for the -integration configuration shown below. - - - -Last for this step, you can optionally change the group name that is set to -`{{device_id}}` by default. The group name is used to group one or more data -values that is received from a device and sent to AdafruitIO in a single -message. This name is used as the default because it is guaranteed to be unique -for every Helium device. You can use any of the the available template tags -which are auto populated when messages are actually sent, which are -`{{device_id}}`, `{{device_eui}}`, and `{{device_name}}`. This integration uses -group topics to send device data to AdafruitIO over MQTT, you can read more -about it [here](https://io.adafruit.com/api/docs/mqtt.html#group-topics). - -Next let's name the integration in step 3, you will use this name later to -identify the integration when attaching it to devices. - - - -The very last step is to select the decoder that will be used to decode the data -payload received from your device. We will be using the _CayenneLPP_ decoder as -shown below and encoding the sensor data with CayenneLPP. Last be sure to click -_Create Integration_ to finish. - - - -### Connecting AdafruitIO Integration to Device - -Now that we have our integration created, the last step is to attach the label -to our device. To do this, navigate your device page and click the `Add Label` -button shown below. - - - -Search for the AdafruitIO label, select, and finally click Add Label. - - - -You should now see your data appearing on Adafruit IO under Feeds as shown -below. - - - -That completes this guide! diff --git a/docs/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/arduino.mdx b/docs/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/arduino.mdx deleted file mode 100644 index 6a450247a..000000000 --- a/docs/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/arduino.mdx +++ /dev/null @@ -1,249 +0,0 @@ ---- -id: arduino -hide_title: true -sidebar_label: Arduino -slug: /use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/arduino ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Adafruit Feather M0 RFM95 Arduino Guide - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## Introduction to Guide - -:::important - -Before we begin, please make sure you've followed the steps from the Console -quickstart [here](/use-the-network/console/quickstart). - -::: - -## Objective and Requirements - -In this guide, you will learn: - -- How to setup your environment -- How to program a basic application that will send packets over the Helium - Network -- Verify real-time packets sent to the Helium Console via Hotspot that's in - range - -For this example, you will need the following: - -### Hardware - -- [Adafruit Feather M0 - RFM95](https://www.adafruit.com/product/3178) -- Micro USB Type B Cable - - [Example](https://www.amazon.com/AmazonBasics-Male-Micro-Cable-Black/dp/B0719H12WD/ref=sr_1_2_sspa?) - -### Software - -- [Arduino software \(IDE\)](https://www.arduino.cc/en/Main/Software) -- [Helium Console](https://console.helium.com/) - -## Hardware Setup - -This step will cover adding an antenna and closing the LoRaWAN jumpers on this -board. - -### Adding the Antenna - -Please visit Adafruit's Documentation for antenna options and instructions -[here](https://learn.adafruit.com/adafruit-feather-m0-radio-with-lora-radio-module/antenna-options). - -### Jumping IO1 to Pin6 - -In order to use the RFM95 radio module onboard the Feather M0 for LoRaWAN we'll -need to connect two pins together. The pins are labeled io1 and 6 on the board, -as shown below. If you have the headers soldered on, you can use a female to -female jumper cable to connect them, or you can simply solder a wire from pin to -pin. - - - -## Software Setup - -### Getting the Arduino IDE - -Download and install the latest version of -[Arduino IDE](https://www.arduino.cc/en/Main/Software) for your preferred OS. - -- [Windows](https://www.arduino.cc/en/Guide/Windows) -- [Linux](https://www.arduino.cc/en/Guide/Linux) -- [Mac OSX](https://www.arduino.cc/en/Guide/MacOSX) - -### Arduino Board Support - -The Adafruit Feather M0 requires two Arduino board support packages. Follow the -instructions below to install both. - -#### Arduino SAMD Boards \(32-bits ARM Cortex-M0+\) - -To install, open your Arduino IDE: - -1. Navigate to \(**Tools > Boards > Boards Manager...\)** -2. Search for **Arduino SAMD Boards \(32-bits ARM Cortex-M0+\)** -3. Select the newest version and click Install - -#### Adafruit SAMD Boards - -To install, open your Arduino IDE: - -1. Navigate to **\(File > Preferences\), \(Arduino > Preferences\) on - MacOS.** -2. Find the section at the bottom called **Additional Boards Manager URLs:** - - - -1. Add this URL in the text box: - -```text -https://adafruit.github.io/arduino-board-index/package_adafruit_index.json -``` - -1. Close the Preferences windows - -Next, to install this board support package: - -1. Navigate to \(**Tools > Boards > Boards Manager...\)** -2. Search for **Adafruit SAMD Boards** -3. Select the newest version and click Install - -### Arduino Library - -To communicate with Helium's LoRaWAN network, we'll need to install an Arduino -library. - -To install, open your Arduino IDE: - -1. Navigate to Library Manager \(**Sketch > Include Library > Manage - Libraries**\). -2. In the search box, type **IBM LMIC framework** into the search, select the - version shown below, and click Install. - - - -#### Update IBM LMIC framework config.h - -This library requires that a config file be setup properly. After you have -installed the `IBM LMIC framework` library, navigate to it's directory on your -operating system found below. Next, replace the `config.h` file in this -directory with this -[config.h](https://github.com/helium/longfi-arduino/blob/master/Adafruit-Feather-M0-RFM95/longfi-us915/config.h) -file. - -linux: /home/{user}/Arduino/libraries/IBM_LMIC_framework/src/lmic -windows: Documents/Arduino/libraries/IBM_LMIC_framework/src/lmic -mac os: Documents/Arduino/libraries/IBM_LMIC_framework/src/lmic - -### Programming Example Sketch - -Now that we have the required Arduino board support and library installed, lets -program the board with the provided example sketch. - -To create a new Arduino sketch, open your Arduino IDE, \(**File > New\).** -Next, replace the template sketch with the sketch found -[here](https://github.com/helium/longfi-arduino/blob/master/Adafruit-Feather-M0-RFM95/longfi-us915/longfi-us915.ino), -copy and paste the entirety of it. - -Next we'll need to fill in the AppEUI\(lsb\), DevEUI\(lsb\), and AppKey\(msb\), -in the sketch, which you can find on the device details page on Console. Be sure -to use the formatting buttons to match the endianess and formatting required for -the sketch, shown below. - - - -At the top of the sketch, replace the three **FILL_ME_IN** fields, with the -matching field from Console, example shown below. - - - -### Selecting Board - -Next, we need to select the correct board to build for in the Arduino IDE. -Navigate to \(**Select Tools > Board: > Adafruit Feather M0\).** - -### Enter Bootloader Mode - -Next, we need to place the board into bootloader mode, which allows us to update -it with new firmware. To do this, first plug the device into your computer, make -sure the power switch is turned on \(you should see a red LED on\). Next, -quickly double click the reset push button on the top side of the board, you -should see the red LED slowly blink. If you see this then you have successfully -entered bootloader mode. - -### Selecting Port - -We're almost ready to upload our sketch, the very last step is to select the -correct Serial port in the Arduino IDE. Navigate to \(**Tools > Port: -Adafruit Feather M0**\). You will also see either **COM\# or /dev/ttyACM\#** -depending on whether you are on Windows, Mac, or Linux. If you do not see a -port, please visit the Drivers section in -[Adafruit's Docs](https://learn.adafruit.com/adafruit-feather-m0-radio-with-lora-radio-module/using-with-arduino-ide#install-drivers-windows-7-and-8-only-6-11) -to make sure you have what's needed for your operating system. - -### Upload Sketch - -We're finally ready to upload our sketch to the board. In the Arduino IDE, click -the right arrow button, or navigate to \(**Sketch > Upload\),** to build and -upload your new firmware to the board. You should see something similar to the -image below at the bottom of your Arduino IDE, when the upload is successful. - - - -### Viewing Serial Output - -When your firmware update completes, the board will reset, and begin by joining -the network. Let's use the Serial Monitor in the Arduino IDE to view the output -from the board. We first need to select the serial port again, but this time it -will be a **different port** than the one we selected to communicate with the -bootloader. Once again, navigate to \(**Tools > Port: Adafruit Feather -M0**\), but make sure the serial device, either COM\# or ttyACM\#, is different! -Next navigate to \(**Tools > Serial Monitor**\), you should begin to see -output similar to below. - - - -Now let's head back to [Helium Console](https://console.helium.com) and look at -our device page, you should see something similar to the screenshot below. - - - -Congratulations! You have just transmitted data on the Helium network! The next -step is to learn how to use your device data to build applications, visit our -Integrations docs [here](/use-the-network/console/integrations). diff --git a/docs/use-the-network/devices/development/arduino/lora-vision-shield.mdx b/docs/use-the-network/devices/development/arduino/lora-vision-shield.mdx deleted file mode 100644 index 36fb8b778..000000000 --- a/docs/use-the-network/devices/development/arduino/lora-vision-shield.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: lora-vision-shield -hide_title: true -title: Portenta Vision Shield LoRa® -description: - A rapid solution for embedded ML combining vision, audio and connectivity - - Detect Gestures, Identify Objects, See Things. The Vision shield features a - 324x324 pixels camera module containing an Ultra Low Power Image Sensor - designed for Always-on vision devices and applications. -image: /static/img/use-the-network/devices/development/arduino/camera_shield1.jpg -sidebar_label: Portenta Vision Shield LoRa® -slug: /use-the-network/devices/development/arduino/lora-vision-shield ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Portenta Vision Shield LoRa® - -A rapid solution for embedded ML combining vision, audio and connectivity - -Detect Gestures, Identify Objects, See Things. The Vision shield features a -324x324 pixels camera module containing an Ultra Low Power Image Sensor designed -for Always-on vision devices and applications. - - - -### Resources - -- [Product Page](https://store.arduino.cc/portenta-vision-shield) - -### Specifications - -#### Sensors: - -- sound - -#### Dimensions: - -- width: 25 mm -- length: 67 mm - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/arduino/mkr-wan-1310.mdx b/docs/use-the-network/devices/development/arduino/mkr-wan-1310.mdx deleted file mode 100644 index 35d68621f..000000000 --- a/docs/use-the-network/devices/development/arduino/mkr-wan-1310.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: mkr-wan-1310 -hide_title: true -title: Arduino MKR WAN 1310 -description: - Connect your sensors and actuators over long distances harnessing the power of - the LoRa® wireless protocol or throughout LoRaWAN networks. The MKR WAN 1310 - comes complete with an ECC508 crypto chip, a battery charger, 2MByte SPI - Flash, and power consumption as low as 104uA. -image: img/use-the-network/devices/development/arduino/mkrwan1310_1.jpg -sidebar_label: Arduino MKR WAN 1310 -slug: /use-the-network/devices/development/arduino/mkr-wan-1310 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Arduino MKR WAN 1310 - -Connect your sensors and actuators over long distances harnessing the power of -the LoRa® wireless protocol or throughout LoRaWAN networks. The MKR WAN 1310 -comes complete with an ECC508 crypto chip, a battery charger, 2MByte SPI Flash, -and power consumption as low as 104uA. - - - -### Resources - -- [Product Page](https://store.arduino.cc/mkr-wan-1310) - -### Specifications - -#### Dimensions: - -- width: 25 mm -- length: 67 mm - -#### Weight: - -- 32 grams - -#### Battery: - -- type: Li-Ion / Li-Po, 1024 mAh minimum capacity, JST connector -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/development.mdx b/docs/use-the-network/devices/development/development.mdx deleted file mode 100644 index dd1f3a99f..000000000 --- a/docs/use-the-network/devices/development/development.mdx +++ /dev/null @@ -1,84 +0,0 @@ ---- -id: development -hide_title: true -sidebar_label: Manufacturers -slug: /use-the-network/devices/development ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -
-
-
-
- -
-

Development Devices

-

Manufacturers

-
-
-
-
-
- -
- -
- - diff --git a/docs/use-the-network/devices/development/embit/emb-lr1280s.mdx b/docs/use-the-network/devices/development/embit/emb-lr1280s.mdx deleted file mode 100644 index 4819a0079..000000000 --- a/docs/use-the-network/devices/development/embit/emb-lr1280s.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: emb-lr1280s -hide_title: true -title: EMB-LR1280S -description: - The new LoRa® 2.4 Ghz Embit solution to connect your sensors and actuators - leveraging both the advantages of LoRa® long range modulation and 2.4 Ghz RF - properties and regulation. It offers a wide range of serial intefaces, a - crypto unit and extremely low consumptions. It represents the perfect solution - for many industrial applications with the aim of ensuring worldwide deployment - and enhanced transmission rate. -image: img/use-the-network/devices/development/embit/emb-lr1280s-top.jpg -sidebar_label: EMB-LR1280S -slug: /use-the-network/devices/development/embit/emb-lr1280s ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## EMB-LR1280S - -The new LoRa® 2.4 Ghz Embit solution to connect your sensors and actuators -leveraging both the advantages of LoRa® long range modulation and 2.4 Ghz RF -properties and regulation. It offers a wide range of serial intefaces, a crypto -unit and extremely low consumptions. It represents the perfect solution for many -industrial applications with the aim of ensuring worldwide deployment and -enhanced transmission rate. - - - -- [Video](https://www.youtube.com/watch?v=W9B9bqGjlVs) - -### Specifications - -#### Dimensions: - -- width: 15.5 mm -- length: 20 mm -- height: 2.3 mm - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/embit/emb-lrwl55.mdx b/docs/use-the-network/devices/development/embit/emb-lrwl55.mdx deleted file mode 100644 index 00a9f1078..000000000 --- a/docs/use-the-network/devices/development/embit/emb-lrwl55.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -id: emb-lrwl55 -hide_title: true -title: EMB-LRWL55 -description: - EMB-LRWL55 is the first ultra-low-power LoRaWAN® OEM module based on STM's new - system-on-chip, STM32WL55xx. Its tiny form factor and its capability of - working both with 868MHz EU ISM band and 915MHz US make EMB-LRWL55 the perfect - solution for small and battery powered LoRaWAN® end-devices, with the - possibility to interface any kind of sensors. -image: img/use-the-network/devices/development/embit/emb-lrwl55-top.jpg -sidebar_label: EMB-LRWL55 -slug: /use-the-network/devices/development/embit/emb-lrwl55 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## EMB-LRWL55 - -EMB-LRWL55 is the first ultra-low-power LoRaWAN® OEM module based on STM's new -system-on-chip, STM32WL55xx. Its tiny form factor and its capability of working -both with 868MHz EU ISM band and 915MHz US make EMB-LRWL55 the perfect solution -for small and battery powered LoRaWAN® end-devices, with the possibility to -interface any kind of sensors. - - - -- [Video](https://www.youtube.com/watch?v=W9B9bqGjlVs) - -### Specifications - -#### Dimensions: - -- width: 12.8 mm -- length: 13.5 mm -- height: 2.5 mm - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/cubecell-1-2-aa-node.mdx b/docs/use-the-network/devices/development/heltec/cubecell-1-2-aa-node.mdx deleted file mode 100644 index 60a15f88d..000000000 --- a/docs/use-the-network/devices/development/heltec/cubecell-1-2-aa-node.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: cubecell-1-2-aa-node -hide_title: true -title: HTCC-AB02A -description: - HTCC-AB02A is a Dev-Board. Friendly designed for developers, easy to verify - communication solutions. -image: img/use-the-network/devices/development/heltec/cubecell-1-2-aa-node.png -sidebar_label: HTCC-AB02A -slug: /use-the-network/devices/development/heltec/cubecell-1-2-aa-node ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## HTCC-AB02A - -HTCC-AB02A is a Dev-Board. Friendly designed for developers, easy to verify -communication solutions. - - - -### Resources - -- [Product Page](https://heltec.org/project/htcc-ab02a/) -- [Datasheet](https://heltec.org/project/htcc-ab02a/#1552557147424-7f1ec-5c652144-e1d6dfc1-348c) - -### Specifications - -#### Dimensions: - -- width: 24 mm -- length: 56.6 mm -- height: 21.5 mm - -#### Battery: - -- type: Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/cubecell-capsule-sensor.mdx b/docs/use-the-network/devices/development/heltec/cubecell-capsule-sensor.mdx deleted file mode 100644 index 248365a23..000000000 --- a/docs/use-the-network/devices/development/heltec/cubecell-capsule-sensor.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -id: cubecell-capsule-sensor -hide_title: true -title: HTCC-AC01 -description: - HTCC-AC01 is a LoRa end node sensor. With a complete enclosure and protection - measures, it can be deployed directly into real-world applications. -image: img/use-the-network/devices/development/heltec/cubecell-capsule-sensor.png -sidebar_label: HTCC-AC01 -slug: /use-the-network/devices/development/heltec/cubecell-capsule-sensor ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## HTCC-AC01 - -HTCC-AC01 is a LoRa end node sensor. With a complete enclosure and protection -measures, it can be deployed directly into real-world applications. - - - -### Resources - -- [Product Page](https://heltec.org/project/htcc-ac01/) -- [Datasheet](https://heltec.org/project/htcc-ac01/#1552557147424-7f1ec-5c652144-e1d6f499-ec3b) - -### Specifications - -#### Dimensions: - -- height: 67 mm - -#### Battery: - -- type: Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/cubecell-dev-board-plus.mdx b/docs/use-the-network/devices/development/heltec/cubecell-dev-board-plus.mdx deleted file mode 100644 index 6cfe40567..000000000 --- a/docs/use-the-network/devices/development/heltec/cubecell-dev-board-plus.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: cubecell-dev-board-plus -hide_title: true -title: HTCC-AB02 -description: - HTCC-AB02 is a Dev-Board. Friendly designed for developers, easy to verify - communication solutions. -image: img/use-the-network/devices/development/heltec/cubecell-dev-board-plus.png -sidebar_label: HTCC-AB02 -slug: /use-the-network/devices/development/heltec/cubecell-dev-board-plus ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## HTCC-AB02 - -HTCC-AB02 is a Dev-Board. Friendly designed for developers, easy to verify -communication solutions. - - - -### Resources - -- [Product Page](https://heltec.org/project/htcc-ab02/) -- [Datasheet](https://heltec.org/project/htcc-ab02/#1552557147424-7f1ec-5c652144-e1d638b1-a2e8) - -### Specifications - -#### Dimensions: - -- width: 25 mm -- length: 51.9 mm -- height: 8 mm - -#### Battery: - -- type: Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/cubecell-dev-board/arduino.mdx b/docs/use-the-network/devices/development/heltec/cubecell-dev-board/arduino.mdx deleted file mode 100644 index 3b8e966f4..000000000 --- a/docs/use-the-network/devices/development/heltec/cubecell-dev-board/arduino.mdx +++ /dev/null @@ -1,390 +0,0 @@ ---- -id: arduino -hide_title: true -sidebar_label: Arduino -slug: /use-the-network/devices/development/heltec/cubecell-dev-board/arduino ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Heltec Cubecell HTCC AB01 Arduino Guide - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## Introduction to Guide - -:::important - -Before we begin, please make sure you've followed the steps from this guide, -which goes over some initial setup steps. - -::: - -## Objective and Requirements - -In this guide, you will learn: - -- How to setup your environment -- How to program a basic application that will send packets over the Helium - Network -- Verify real-time packets sent to the Helium Console via Hotspot that's in - range - -For this example, you will need the following: - -### Hardware - -- [Heltec CubeCell Board](https://heltec.org/project/htcc-ab01/) -- Micro USB Type B Cable - - [Example](https://www.amazon.com/AmazonBasics-Male-Micro-Cable-Black/dp/B0719H12WD/ref=sr_1_2_sspa?) - -### Software - -- [Arduino software \(IDE\)](https://www.arduino.cc/en/Main/Software) -- [Helium Console](https://console.helium.com/) - -## Hardware Setup - -### Adding the Antenna - -Your board should have come with a U.FL antenna. All you have to do is attache -it to the U.FL port as shown in the image at the top of the guide. - -### Connect Board - -Next, lets connect our board to our computer with a USB 2.0 A-Male to Micro B -cable. - -## Software Setup - -### Getting the Arduino IDE - -Download and install the latest version of -[Arduino IDE](https://www.arduino.cc/en/Main/Software) for your preferred OS. - -- ​[Windows](https://www.arduino.cc/en/Guide/Windows)​ -- ​[Linux](https://www.arduino.cc/en/Guide/Linux)​ -- ​[Mac OSX](https://www.arduino.cc/en/Guide/MacOSX)​ - -### Arduino Board Support - -The Heltec CubeCell Board requires one Arduino board support package. Follow the -instructions below to install. - -#### CubeCell Dev-boards - -To install, open your Arduino IDE: - -1. Navigate to **\(File > Preferences\), \(Arduino > Preferences\) on - MacOS.** -2. Find the section at the bottom called **Additional Boards Manager URLs:** - - - -1. Add this URL in the text box: - -```text -http://resource.heltec.cn/download/package_CubeCell_index.json -``` - -1. Close the Preferences windows - -Next, to install this board support package: - -1. Navigate to \(**Tools > Boards > Boards Manager...\)** -2. Search for **CubeCell Dev-boards** -3. Select the newest version and click Install - - - -### Manual updates to the Heltec runtime libraries - -Some versions of Heltec's runtime libraries have set default configuration -variables to values that are incompatible with the Helium network, especially -when the Heltec device is configured targeting the North American market. - -The following discusses two Heltec runtime files that must be inspected to -ensure compatiblity. The exact location of these files will depend on which -operating system you are using, Windows, Linux, or Mac as well as where the -Arduino IDE is installed. - -The typical top level locations of the runtime libraries is shown below for each -operating system. From there the following discussions will present to you the -file locations within these top level directories/folders. Please note the -Heltec library version numbers are expected to change as time goes on. - -XXXXX denotes your specfic user id. - -##### Arduino IDE library location - -- Windows - -```text -C:\Users\XXXX\AppData\Local\Arduino15\packages\CubeCell\hardware\CubeCell\1.0.0 -``` - -- Linux - -```text -/home/XXXXX/.arduino15/packages/CubeCell/hardware/CubeCell/1.0.0 -``` - -- Mac - -```text -/Users/XXXXX/Library/Arduino15/packages/CubeCell/hardware/CubeCell/1.0.0 -``` - -#### Verify LoRaWAN Data Rate - -Within an editor of your choice open the file path formed by prepending the -above described platform specific top level directory structure to the following -file: - -```text -libraries/LoRa/src/LoRaWan_APP.cpp (Linux/Mac) -libraries\LoRa\src\LoRaWan_APP.cpp (Windows) -``` - -Within this file look for - -``` -#define defaultDrForNoAdr -``` - -Depending on the version of the Heltec runtime that is installed this default -may be set to DR_0, DR_3, DR_5 or some other value. Note: DR_5 is not valid for -US915, the North American market. - -The defaultDrForNoAdr setting is tied directly to the maximum size of the data -packet you are transferring. - -NOTE: If you try to transfer a packet that is larger than this setting allows, -your device may successfully join the network but the data transmit will fail -silently. - -| Data Rate \(DR\) | Max Application Payload | -| :--------------- | :---------------------- | -| DR_0 | 11 bytes | -| DR_1 | 53 bytes | -| DR_2 | 125 bytes | -| DR_3 | 242 bytes | -| DR_4 | 242 bytes | -| DR_5 - 7 | Not Valid | - -Update the defaultDrForNoAdr as appropriate for your application needs. - -The above values are valid for the US902-928MHz region\(North America\), the -values may differ for other LoRa regions, which you can find -[here](https://lora-alliance.org/resource-hub/rp2-101-lorawanr-regional-parameters). - -#### Dynamic Data Rate Change - -If your application needs to change the current uplink data rate dynamically and -Adaptive Data Rate (ADR) is not enabled, one can call the - -``` -LoRaWAN.setDataRateForNoADR(int8_t dataRate) -``` - -API within your sketch. If you do call this API it must be called after the -LoRaWAN.init() within your sketch for the change to be effective. - -#### LoRaWAN preamble size - -There are some versions of the Heltec runtime libraries that may set a LoRaWAN -preamble size that is incompatible with the current LoRaWan specification. If -the preamble size is not set correctly your device cannot join the network. - -This should be verified in the region specific file corresponding to the region -your device is targeting. Be sure to prepend the above described platform -specific top level directory structure. - -The following is the file that must be checked if targeting region US915. Within -an editor of your choice open the file path formed by prepending the above -described platform specific top level directory structure to the following file: - -```text -cores/asr650x/loramac/mac/region/RegionUS915.c (Linux/Mac) -cores\asr650x\loramac\mac\region\RegionUS915.c (Windows) -``` - -Within this file locate the line below, the 7th parameter which might be 14 -should be changed to either 8 or 16. Either value will work. Earlier versions of -the runtime may have this value set to 14 which is "not" correct. - -Change: - -```text -Radio.SetTxConfig( MODsEM_LORA, phyTxPower, 0, bandwidth, phyDr, 1, 14, false, true, 0, 0, false, 3e3 ); -``` - -To: - -```text -Radio.SetTxConfig( MODEM_LORA, phyTxPower, 0, bandwidth, phyDr, 1, 8, false, true, 0, 0, false, 3e3 ); -``` - -Heltec support has been notified of these issues, hopefully a future release of -those libs will resolve the issues. - -### Install Serial Driver - -Find Directions on Heltec's website -[here](https://heltec-automation-docs.readthedocs.io/en/latest/general/establish_serial_connection.html). - -### Set Project Configuration Options - -The following options are set via the Arduino IDE Tools menu: - -#### Select Board - -If you are using the HTCC-AB02 flavor of Heltec board - -- Select Tools -> Board: ->CubeCell-Board \(HTCC-AB02\) - -If you are using the HTCC-AB02S GPS enabled flavor of Heltec board - -- Select Tools -> Board: ->CubeCell-GPS \(HTCC-AB02S\) - -#### Select LoraWAN Configuration Options - -Arduino IDE: Until you are familiar with their configuration behavior it is -recommended you set the board options as follows: - -- Select Tools -> LORAWAN_REGION: -> REGION_US915 -- Select Tools -> LORAWAN_CLASS: -> CLASS_A -- Select Tools -> LORAWAN_NETMODE: -> OTTA -- Select Tools -> LORAWAN_ADR: -> OFF -- Select Tools -> LORAWAN_UPLINKMODE: -> UNCONFIRMED -- Select Tools -> LORAWAN_Net_Reservation: -> OFF -- Select Tools -> LORAWAN_AT_SUPPORT: -> OFF -- Select Tools -> LORAWAN_AT_RGB : -> ACTIVE -- Select Tools -> LoRaWan\_ Debug Level : -> FREQ&&DIO \(for most verbose - messages\) - -### Programming **Example Sketch** - -Now that we have the required Arduino board support and library installed, lets -program the board with the provided example sketch. - -To create a new Arduino sketch, open your Arduino IDE, \(**File > New\).** -Next, replace the template sketch with the sketch found -[here](https://github.com/helium/longfi-arduino/blob/master/Heltec-CubeCell-Board/longfi-us915/longfi-us915.ino), -copy and paste the entirety of it. - -Next we'll need to fill in the AppEUI\(msb\), DevEUI\(msb\), and AppKey\(msb\), -in the sketch, which you can find on the device details page on Console. Be sure -to use the formatting buttons to match the endianess and formatting required for -the sketch, shown below. - - -) - -At the top of the sketch, replace the three **FILL_ME_IN** fields, with the -matching field from Console, example shown below. - - - -### Upload Sketch - -We're finally ready to upload our sketch to the board. In the Arduino IDE, click -the right arrow button, or navigate to \(**Sketch > Upload\),** to build and -upload your new firmware to the board. You should see something similar to the -image below at the bottom of your Arduino IDE, when the upload is successful. - - -) - -### Using HTCC-AB02S Board With GPS Capable Sketch - -If you are using the HTCC-AB02S board with a sketch that is GPS enabled but find -the device is unable to obtain a GPS lock you can try changing the GPS data -satellite source via the GPS class Air530.setMode\(\) API. Add the -Air530.setmode\(\) to the setup\(\) method of your sketch. - -```text -// MODE_GPS - US, -// MODE_GPS_BEIDOU - Chinese - This is the default -// MODE_GPS_GLONASS - Russian -// set what works best for your connectivity, for example: -Air530.setmode(MODE_GPS); -``` - -### Patching ADR Functionality - -The CubeCell may have issues joining the network with ADR OFF. If you're using -ADR ON, you may also encounter an issue where your CubeCell stops successfully -sending packets after a few minutes. This is caused by the CubeCell firmware's -ADR behavior, and may happen if your payload is above the DR0 maximum size \(11 -bytes\). - -To patch the CubeCell firmware, find and open the `RegionUS915.c` file in the -firmware directory. On macOS, an example path would be -`~/Library/Arduino15/packages/CubeCell/hardware/CubeCell/1.0.0/cores/asr650x/loramac/mac/region/RegionUS915.c`. - -Find the following lines in the file and comment them out: - -```text -// Decrease the datarate -getPhy.Attribute = PHY_NEXT_LOWER_TX_DR; -getPhy.Datarate = datarate; -getPhy.UplinkDwellTime = adrNext->UplinkDwellTime; -phyParam = RegionUS915GetPhyParam(&getPhy); -datarate = phyParam.Value; -``` - -This will prevent the CubeCell from reducing the Data Rate over time and allow -you to send larger packets on a repeated, prolonged basis. - -### Viewing Serial Output - -When your firmware update completes, the board will reset, and begin by joining -the network. Let's use the Serial Monitor in the Arduino IDE to view the output -from the board. We first need to select the serial port again, but this time it -will be a **different port** than the one we selected to communicate with the -bootloader. Once again, navigate to \(**Tools > Port: COM\#/ttyACM\#**\), but -make sure the serial device, either COM\# or ttyACM\#, is different! Next -navigate to \(**Tools > Serial Monitor**\), you should begin to see output -similar to below. - - -) - -Now let's head back to [Helium Console](https://console.helium.com/) and look at -our device page, you should see something similar to the screenshot below. - - - -Congratulations! You have just transmitted data on the Helium network! The next -step is to learn how to use your device data to build applications, visit our -Integrations docs [here](/use-the-network/console/integrations). diff --git a/docs/use-the-network/devices/development/heltec/cubecell-dev-board/cubecell-dev-board.mdx b/docs/use-the-network/devices/development/heltec/cubecell-dev-board/cubecell-dev-board.mdx deleted file mode 100644 index 71ae927ca..000000000 --- a/docs/use-the-network/devices/development/heltec/cubecell-dev-board/cubecell-dev-board.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -id: cubecell-dev-board -hide_title: true -title: HTCC-AB01 -description: - HTCC-AB01 is a Dev-Board. Friendly designed for developers, easy to verify - communication solutions. -image: img/use-the-network/devices/development/heltec/cubecell-dev-board.png -sidebar_label: HTCC-AB01 -slug: /use-the-network/devices/development/heltec/cubecell-dev-board ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## HTCC-AB01 - - - -## Introduction - -The Heltec Cubecell HTCC AB01 is Heltec's popular ASR605x(ARM® Cortex® M0+ Core) -based LoRa development board with built in USB and battery charging. - -### Resources - -- [Product Page](https://heltec.org/project/htcc-ab01/) -- [Manual](https://heltec-automation-docs.readthedocs.io/en/latest/cubecell/index.html) -- [US Retailer - Parley Labs](https://shop.parleylabs.com/collections/heltec-cubecell) - -### Specifications - -#### Dimensions: - -- width: 25 mm -- length: 41.5 mm -- height: 7.6 mm - -#### Battery: - -- type: Lithium -- replaceable: True - -### Firmware Quickstart Guides - -- [Arduino Guide](/use-the-network/devices/development/heltec/cubecell-dev-board/arduino) -- [PlatformIO Guide](/use-the-network/devices/development/heltec/cubecell-dev-board/platformio) diff --git a/docs/use-the-network/devices/development/heltec/cubecell-dev-board/platformio.mdx b/docs/use-the-network/devices/development/heltec/cubecell-dev-board/platformio.mdx deleted file mode 100644 index d83c70bdf..000000000 --- a/docs/use-the-network/devices/development/heltec/cubecell-dev-board/platformio.mdx +++ /dev/null @@ -1,766 +0,0 @@ ---- -id: platformio -hide_title: true -sidebar_label: PlatformIO -slug: /use-the-network/devices/development/heltec/cubecell-dev-board/platformio ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Getting Started With Helium, PlatformIO and Heltec CubeCell - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -The Heltec CubeCell HTCC AB0x are one of Heltec's line of popular ASR605x(ARM® -Cortex® M0+ Core) based LoRa development boards with built in USB and battery -charging. - -## Introduction - -:::important - -Before we begin, please make sure you've followed the steps from this guide, -which goes over some initial setup steps. - -::: - -This guide will walk through installing PlatformIO and deploying a Helium -Arduino program on a target device. - -[PlatformIO ](https://platformio.org/)is a cross-platform, cross-architecture, -multiple framework, professional tool for embedded systems engineers and for -software developers who write applications for embedded products. - -Here, we will detail the steps required to integrate a specific board type, one -of the [Heltec CubeCell AB0x](https://heltec.org/proudct_center/lora/cubecell/) -family of boards. - -However, this guide can be also used to on-board many other types of target -devices. In most cases one can just substitute your target device in place of -the CubeCell developer board. - -## Objective and Requirements - -In this guide, you will learn: - -- How to setup your PlatformIO IDE environment -- How to create, build, upload a simple embedded application -- How to program a basic application that will send packets over the Helium - Network -- Verify real-time packets sent to the Helium Console via Hotspot that's in - range - -For this example, you will need one of the following Heltec development boards. -The Helium community has experience with the AB01, AB02x and CubeCell Capsule -line boards. Subsequent follow on products may work but have not been tested - -### Hardware - -- [Heltec CubeCell Development Boards (AB01, AB02x, Capsule)](https://heltec.org/proudct_center/lora/cubecell/) -- Micro USB Type B Cable - - [Example](https://www.amazon.com/AmazonBasics-Male-Micro-Cable-Black/dp/B0719H12WD/ref=sr_1_2_sspa?) - -### Software - -PlatformIO is not a standalone IDE, it installs as an extension to Microsoft -VSCode. The Helium Console is a cloud based device management tool that we will -use to enable our device access to the Helium network. There is no installation -required however one will need to create a user account with the Helium Console. - -- [VSCode \(IDE)](https://code.visualstudio.com/) - - [PlatformIO \(VScode Extension)](https://platformio.org/) -- [Helium Console](https://www.helium.com/console) - -## Hardware Setup - -#### Attaching the LoRa Antenna - -Your board should have come with a U.FL antenna. All you have to do is attach it -to the U.FL port on the developer board. The method of attachment varies -depending on the target board. - -In the case of our example Heltec CubeCell board, some versions of the board may -have more than one U.FL port, if this is the case generally the LoRa antenna -attaches to the port that is on the same side of the board as contains the USB -port connector. In all cases it is best to verify the proper connector with the -board manufacturer. - -#### Connect Target Board to Development PC - -The target boards are typically connected to the host computer via a USB 2.0 -A-Male to Micro B cable. Again this may vary depending upon your target board. - -#### Install Develop Machine Serial Driver - -Some operating systems, especially Windows, will require the installation of -hardware specific USB device driver code. Most hardware developer board vendors -will supply directions on how this can be accomplished. - -For our example installation directions can be found on Heltec's documentation -website -[here](https://heltec-automation-docs.readthedocs.io/en/latest/general/establish_serial_connection.html). - -## Software Setup - -Setting up the VSCode/PlatformIO IDE environment while not complex, does require -several steps that are independent of your target device. We will walk through -these initial setup steps before trying to integrate Helium network access code -into the mix. - -### Installing PlatformIO - -Using the VSCode instructions found [here](https://code.visualstudio.com/) -download and install Microsoft's Visual Studio Code. PlatformIO IDE is built on -top of VSCode as an extension. Once the VSCode is installed: - -1. Open VSCode Extension Manager by clicking on the Extensions icon on the left - side of the main view. -2. Within the Extensions Marketplace search for official PlatformIO IDE - extension -3. Install PlatformIO IDE. - \([https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide](https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide)\) - - - -It is highly recommended to give the quick-start guide a read. It will help you -navigate the unfamiliar interface. -[https://docs.platformio.org/en/latest/integration/ide/vscode.html\#quick-start](https://docs.platformio.org/en/latest/integration/ide/vscode.html#quick-start) - -In this tutorial, as an example, we will be using the -[Heltec CubeCell AB0x](https://heltec.org/proudct_center/lora/cubecell/). One -can substitute your target device as needed as you progress through these steps. - -Once PlatformIO is installed, you should be welcomed to VSCode with the -following "PIO Home" screen: - - - -If not already open, the PlatformIO "Home" view can be opened by clicking on the -house icon within the VScode status bar. - - - -### Creating a New PlatformIO Project - -If you have not have not already used PlatformIO to build, upload and verify the -operation of a sample application it is best familiarize yourself with the basic -use of PlatformIO before adding the complexity of Helium network access code to -the mix. - -If you are familiar and confident with the steps required you can continue at -"Sample Helium Network Access Code" by clicking -[here](#ADD-HELIUM-NETWORK-CODE). - -The following steps will walk you through what is required to: - -- create a template project -- inspect the default source file, main.cpp as well as the primary project - configuration file, platformio.ini -- build the project and inspect the build log output -- upload the sample binary to the target development board. -- inspect serial output debug information. - -Before proceeding with actual code that will connect to the Helium network, -create a sample, template project. - -#### Open "New Project Wizard" - Select project name and board - -- Within the "PIO Home" view click on "New Project". - -- At the "Project Wizard" dialog enter a name for your project in the "Name" - field. -- Within the "Board" field select the appropriate target board by entering the - name of the manufacturer, "Heltec" for our example. The PlatformIO auto search - feature should present you with a known list of supported boards. In our case - we enter "Heltec" and choose the "Heltec CubceCell-GPS (HTCC-AB02S)" from the - supplied list. - -Note: If your target device is different start to enter the device manufacturer -in the "Board" field, PlatformIO will attempt to fill in the entry with those -devices that it is aware of. Hopefully your device will be presented in the -list. If so, select it. - - - -#### Select framework and project location - -- Select the desired runtime framework from the "Framework" drop down. Target - devices may support one, and possibly more than one, runtime framework. Choose - what is appropriate for your target. At present only "Arduino" is supported - for the board we have selected for our example. -- For location, if the checkbox is selected the project will be created within - the default PlatformIO workspace, which is sufficient for our purposes. -- Click the "Finish" button to create the project. ( You may need to scroll down - the wizard window to expose the Finish button) - -Note: The time taken to create a project will vary depending on whether or not -the selected platform and framework files have been previously downloaded. When -the project has been created it should be shown within the PlatformIO Explorer -view typically found on the left side of the IDE. - - - -Typical project explorer view. - -#### Default project main.cpp - -If you are familiar developing within the Arduino IDE, main.cpp is much the same -as the Arduino \*.ino. It also contains default setup() and loop() functions. - -PlatformIO also adds a required "\#include " statement. This is an -important/necessary difference between PlatformIO and Arduino IDEs. - - - -#### platformio.ini - project configurations - -Let's take a look at the platformio.ini file in the root of our new project. -This is where one defines project configuration definitions. In the Arduino -world one would do this via the IDE tool bar selections. - -Note: when this file is modified the entire project will be rebuilt when the -project is next built or uploaded. - - - -Here we see the platformio.ini file that was created as a result of the running -the New Project wizard targeting our CubeCell board. - -#### Build the target device application - -Now that the template project has been created it's time to build the device -application. Within PlatformIO the "Build" button is the check-mark found within -the bottom status bar. Clicking on this button should start the build process. - - - -#### Inspect the build output - -Due to the defines within platformio.ini, PlatformIO is able to determine the -project board and framework dependencies. Any missing dependencies are -automatically installed at build time, thus this process may be seen in the -build output. This feature allows us to add libraries into our platformio.ini -file, which will then be downloaded for us, if needed, at build time. - -The build process results can be found within the "Terminal View" typically -found at the bottom of the VSCode window. Much like with Arduino, the build -output will dump the calculated amount of Ram and Flash memory used by your -application. - - - -Start of the build output displaying configuration information. - - - -Tail end of build log showing Ram and Flash usage. There is also a Problems -output view that may help when trying to resolve build issues. - -#### List of attached devices - -If, within the "PIO Home" view, you select the "Devices" icon on the left, you -will see listed any attached physical devices as well as their associated comm -ports: - - - -The list should reflect your target device. - -#### Uploading binary to target device - -Now that the code has built successfully, if a target device is attached to your -computer the resulting binary can be uploaded to the target device. - -The method of uploading the binary to your device may vary depending on the -target device. PlatformIO will attempt to configure upload options appropriate -for the chosen board. If the default configuration does not work in your -instance detailed information can be found within the PlatformIO documentation -[here](https://docs.platformio.org/en/latest/projectconf/section_env_upload.html?highlight=upload) -or within your target board vendors documentation set. - -We will attempt to include such information along with any sample project code -we provided if the procedure is different from that described here. - -``` -For instance our target, the CubeCell has a peculiar -requirement: -Prior to attempting to upload your binary make sure -any terminal session that might be attached to the -debug comm port has been deleted. Occasionally but not -always, PlatformIO will automatically close the comm -port. If it does not upload errors will occur. -``` - - - -Click on the Upload button within the bottom Status bar. - -Below you will see a typical output as the binary is uploaded to the target -board. - - - -If you have made it this far then we know your environment can build and upload -a device application. Now it's time to connect to the Helium network. - -### Helium Console - Create Device - -In order for a target device to communicate via the Helium Network a user -account must first be created. Once the user account is created then a console -device must be created. - -When creating the console device, make note of the DevEUI, AppEUI, and AppKey -device credentials. These are used to connect to the network and will need to be -inserted into the device application code below. A console quick start guide can -be found [here](/use-the-network/console/quickstart). - -### Sample Helium Network Access Code - -If you have not created a simple template project and you want to a try one of -the samples you can copy a sample into your workspace where it should build -without error. A full PlatformIO project can be found -[here](https://github.com/helium/longfi-platformio/blob/master/Heltec-CubeCell-Board/examples/cubecell-helium-us915-basic). -Alternatively you can update the template project created above by continuing -the following steps. - -#### Update main.cpp - -Now that we have the required board and library runtime support installed, let's -program the board with an example Helium network enabled application. - -To update the sample application created above: - -- open, within PlatformIO, your projects src/main.ccp file -- replace this template main.cpp with the content of the sample application - found - [here](https://github.com/helium/longfi-platformio/blob/master/Heltec-CubeCell-Board/examples/cubecell-helium-us915-basic/src/main.cpp). - Copy and paste the entirety of it. - -#### Add device credentials - -Next we'll need replace the placeholder AppEUI, DevEUI, and AppKey values found -within the sample program with the real values found on the target device page -within the Helium Console. - -``` -Note: - The endianess required for these credentials varys - depending on the LoRaWAN runtime library implementation. - Using a custom library implementation will require an - understanding of that libraries endian requirement, big - endian or little endian. -``` - -For our CubeCell example all values are big endian \(msb\), most significant bit -on the left. - - - -At the top of the main.cpp file, replace the three **FILL_ME_IN** fields, with -the matching field from the Helium Console, example shown below. Your numbers -will be different depending on what the console creates when you add your target -device. - - - -#### Verify LoRaWAN channels mask - -Runtime library implementations are designed to work across several LoRaWAN -regions and networks. The firmware will attempt to join the network using -various frequency sub-bands, defined by a channel mask, until the join succeeds. -It is recommended that you change the default channel mask to a value that will -help the join process complete connection to the Helium network in a more timely -manner. The process, where and how, to update this channel mask will vary -depending on the LoRaWAN runtime implementation - -For our example using the Heltec CubeCell and it's runtime the following piece -of code has been incorporated into the sample projects. Refer to a sample to -determine where this code should reside, generally near the above mentioned -credentials is fine. - -``` -/*LoraWan channelsmask, default channels 0-7*/ -uint16_t userChannelsMask[6]={ 0xFF00,0x0000,0x0000,0x0000,0x0000,0x0000 }; -``` - -#### platformio.ini - project configurations - -For our sample application we need a few configuration items added to the -project platformio.ini file. One set is the project defaults, the next is serial -debug monitor configurations and then LoRaWAN configurations. - -Complete documentation of platformio.ini content can be found -[here](https://docs.platformio.org/en/latest/projectconf/index.html). Serial -debug monitor specific items -[here](https://docs.platformio.org/en/latest/projectconf/section_env_monitor.html). - -Note: The comment character for this file type is the semicolon. - -For our example CubeCell project we update the projects platformio.ini with the -content from the sample project: - -- open, within PlatformIO, your projects platformio.ini file -- replace this template file with the content found - [here](https://github.com/helium/longfi-platformio/blob/master/Heltec-CubeCell-Board/examples/cubecell-helium-us915-basic/platformio.ini). - Copy and paste the entirety of it. - -Once you have become more familiar with the LoRaWAN/Helium network feel free to -experiment with different configuration settings possible within platformio.ini. - -#### Build the device application - -After updating the main.cpp and platformio.ini files it's time to build the -device application. Within PlatformIO the "Build" button is the check-mark found -within the bottom status bar. Clicking on this button should start the build -process. - -#### Inspect the build results - -The build output results can be found within the "Terminal View" typically found -at the bottom of the VSCode window. Verify the build completed successfully. - -#### Possible Arduino to PlatformIO porting issues - -When porting Arduino sketches to PlatformIO you may find errors such as -undefined functions. These may be functions that are called by setup() or loop() -or other custom functions prior to them being defined. This is a side effect of -the different C version of C compilers used with PlatformIO vs Arduino. In this -instance we just need to define the function prototype before the function is -actually called. Another compatibility issue is that unlike Arduino IDE, you -must include Arduino.h at the start of your C file if you are using Arduino -defined constructs. Generally the compatibility issues are minor. - -#### Verify Heltec runtime configurations. - -Running the previous build operation will ensure the Heltec runtime dependencies -have been downloaded. At the time of this writing some versions of Heltec's -runtime libraries have set default configuration variables to values that are -incompatible with the Helium network, especially when the Heltec device is -configured targeting the North American market. Please follow this -[link](#HTCC-MANUAL-RUNTIME-UPDATES) within this document and verify the file -content. Return here after verification. - -If changes needed to be made it is best to run a "Clean" build process by -clicking on the Trash Can button on the status bar followed by a "Build" to -ensure the changes have been picked up properly. - -#### Upload Binary to target device - -If the build process completed successfully, upload the binary to the target -device via the "Upload" (right pointing arrow) button found on the status bar - -NOTE: Prior to attempting to upload your binary make sure any terminal session -that might be attached to the debug comm port has been deleted. Occasionally but -not always, PlatformIO will automatically close the comm port, if it does not -upload errors will occur. - - - -Successful upload example, your results will vary. - -#### Viewing Target Device Serial Output - -When your firmware update completes, the board will reset, and begin by joining -the network. The PlatformIO Serial Monitor can be used to view the serial debug -output from the board. You will recall that we set the serial port -configurations within the platformio.ini file for our project. - -To open the serial monitor click on the "Serial Monitor" button within the -status bar. - - - -You should begin to see output similar to below. - - - -You can use any virtual terminal emulator for this purpose, but recall certain -Heltec boards seem to require the terminal emulator be disconnected from the -target device prior to attempting to upload a new binary. - -#### Helium Console Uplinks - -Now let's head back to the [Helium Console](https://console.helium.com/) and -login to your account. Once logged in select the "Devices" item on the left, -then select the target device previously created. Scroll down a bit on the -device page and you should see something similar to the screenshot below. - - - -Activation messages are those seen when the device first attempts to join the -network. -Downlink messages are those delivered from the network to your target device. -Uplink messages are those messages delivered from your target device to the -Helium network. - -Congratulations! You have just transmitted data on the Helium network! The next -step is to learn how to use your device data to build applications, visit our -Integrations docs [here](/use-the-network/console/integrations). - -### Device Application Code Debugging - -Unfortunately at this time CubeCell does not support a debug probe that enjoys -built-in support within PlatformIO. Please visit the Heltec community forum -found [here](http://community.heltec.cn/) for help with external debugger -questions. - -### Misc device application hints - -Follow this [link](#HTCC-APPLICATION-HINTS) within this guide for useful -application enhancements. - -### Manual updates to the Heltec runtime libraries - -Some versions of Heltec's runtime libraries have set default configuration -variables to values that are incompatible with the Helium network, especially -when the Heltec device is configured targeting the North American market. The -following discusses Heltec runtime files that must be inspected to ensure -compatibility. The exact location of these files will depend on which operating -system you are using, Windows, Linux, or Mac. The typical top level location of -the runtime libraries is shown below for each operating system. From there the -following discussions will present to you the file locations within these top -level directories/folders. Please note the Heltec library version numbers are -expected to change as time goes on. XXXXX denotes your specific user id. - -#### PlatformIO IDE Heltec runtime library locations: - -```text -Windows: C:\Users\XXXX\.platformio\packages\framework-arduinoasrmicro650x\ - -Linux: /home/XXXXX/.platformio/packages/framework-arduinoasrmicro650x/ - -Mac OS: /Users/XXXXX/.platformio/packages/framework-arduinoasrmicro650x/ -``` - -#### Verify LoRaWAN Data Rate - -Within an editor of your choice open the file path formed by prepending the -above described platform specific top level directory structure to the following -file: - -```text -libraries/LoRa/src/LoRaWan_APP.cpp (Linux/Mac) -libraries\LoRa\src\LoRaWan_APP.cpp (Windows) -``` - -Within this file look for - -``` -#define defaultDrForNoAdr -``` - -Depending on the version of the Heltec runtime that is installed this default -may be set to DR_0, DR_3, DR_5 or some other value. Note: DR_5 is not valid for -US915, the North American market. - -The defaultDrForNoAdr setting is tied directly to the maximum size of the data -packet you are transferring. - -NOTE: If you try to transfer a packet that is larger than this setting allows, -your device may successfully join the network but the data transmit will fail -silently. - -| Data Rate \(DR\) | Max Application Payload | -| :--------------- | :---------------------- | -| DR_0 | 11 bytes | -| DR_1 | 53 bytes | -| DR_2 | 125 bytes | -| DR_3 | 242 bytes | -| DR_4 | 242 bytes | -| DR_5 - 7 | Not Valid | - -Update the defaultDrForNoAdr as appropriate for your application needs. - -The above values are valid for the US902-928MHz region\(North America\), the -values may differ for other LoRa regions, which you can find -[here](https://lora-alliance.org/resource-hub/rp2-101-lorawanr-regional-parameters). - -#### Dynamic Data Rate Change - -If your application needs to change the current uplink data rate dynamically and -Adaptive Data Rate (ADR) is not enabled, one can call the - -``` -LoRaWAN.setDataRateForNoADR(int8_t dataRate) -``` - -API within your sketch. If you do call this API it must be called after the -LoRaWAN.init() within your sketch for the change to be effective. - -#### Verify LoRaWAN preamble size - -There are some versions of the Heltec runtime libraries that may set a LoRaWAN -preamble size that is incompatible with the current LoRaWan specification. If -the preamble size is not set correctly your device cannot join the network. This -should be verified in the region specific file corresponding to the region your -device is targeting. Be sure to prepend the above described platform/IDE -specific top level directory structure. - -The following is the file that must be checked if targeting region US915. Within -an editor of your choice open the file path formed by prepending the above -described IDE/platform specific top level directory structure to the following -file: - -``` -Linux/Mac OS: cores/asr650x/loramac/mac/region/RegionUS915.c - -Windows: cores\asr650x\loramac\mac\region\RegionUS915.c -``` - -Within this file locate the line below, the 7th parameter which might be 14 -should be changed to either 8 or 16. Either value will work. Earlier versions of -the runtime may have this value set to 14 which is "not" correct. Change: - -```text -Radio.SetTxConfig( MODsEM_LORA, phyTxPower, 0, bandwidth, phyDr, 1, 14, false, true, 0, 0, false, 3e3 ); -``` - -To: - -```text -Radio.SetTxConfig( MODEM_LORA, phyTxPower, 0, bandwidth, phyDr, 1, 8, false, true, 0, 0, false, 3e3 ); -``` - -Heltec support has been notified of these issues, hopefully a future release of -those libs will resolve the issues. - -### Patching ADR Functionality - -The CubeCell may have issues joining the network with ADR OFF. If you're using -ADR ON, you may also encounter an issue where your CubeCell stops successfully -sending packets after a few minutes. This is caused by the CubeCell firmware's -ADR behavior, and may happen if your payload is above the DR0 maximum size \(11 -bytes\). - -To patch the CubeCell firmware, find and open the `RegionUS915.c` in the -following location. - -```text -Windows: C:\Users\XXXX\.platformio\packages\framework-arduinoasrmicro650x\cores\asr650x\loramac\mac\region\RegionUS915.c - -Linux: ~/.platformio/packages/framework-arduinoasrmicro650x/cores/asr650x/loramac/mac/region/RegionUS915.c - -Mac OS: /Users/XXXXX/.platformio/packages/framework-arduinoasrmicro650x/cores/asr650x/loramac/mac/region/RegionUS915.c -``` - -Find the following lines in the file and comment them out: - -```text -// Decrease the datarate -getPhy.Attribute = PHY_NEXT_LOWER_TX_DR; -getPhy.Datarate = datarate; -getPhy.UplinkDwellTime = adrNext->UplinkDwellTime; -phyParam = RegionUS915GetPhyParam(&getPhy); -datarate = phyParam.Value; -``` - -This will prevent the CubeCell from reducing the Data Rate over time and allow -you to send larger packets on a repeated, prolonged basis. - -### Device application hints - -#### Using HTCC-AB02S Board with GPS Capable Sketch - -If you are using the HTCC-AB02S board with a program that is GPS enabled but -find the device is unable to obtain a GPS lock you can try changing the GPS data -satellite source via the GPS class Air530.setMode\(\) API. Add the -Air530.setmode\(\) to the setup\(\) method of your sketch. - -```text -// MODE_GPS - US, -// MODE_GPS_BEIDOU - Chinese - This is the default -// MODE_GPS_GLONASS - Russian -// set what works best for your connectivity, for example: -Air530.setmode(MODE_GPS); -``` - -A sample GPS enabled project for the CubeCell can be found -[here](https://github.com/helium/longfi-platformio/tree/master/Heltec-CubeCell-Board/examples/cubecell-helium-us915-gps). - -#### Dynamically altering Data Rate - -A recent change to the Heltec runtime exposes an API interface a device -application can use to alter the current LoRaWAN data rate. - -```text -LoRaWAN.setDataRateForNoADR(int8_t dataRate); -``` - -This should be done sometime after LoRaWAN.init() is called. diff --git a/docs/use-the-network/devices/development/heltec/cubecell-gps-6502.mdx b/docs/use-the-network/devices/development/heltec/cubecell-gps-6502.mdx deleted file mode 100644 index c1a2be4c5..000000000 --- a/docs/use-the-network/devices/development/heltec/cubecell-gps-6502.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: cubecell-gps-6502 -hide_title: true -title: HTCC-AB02S -description: - HTCC-AB02S is a Dev-Board. Already integrated AIR530 GPS module, friendly - designed for developers, easy to verify communication solutions. -image: img/use-the-network/devices/development/heltec/cubecell-gps-6502.png -sidebar_label: HTCC-AB02S -slug: /use-the-network/devices/development/heltec/cubecell-gps-6502 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## HTCC-AB02S - -HTCC-AB02S is a Dev-Board. Already integrated AIR530 GPS module, friendly -designed for developers, easy to verify communication solutions. - - - -### Resources - -- [Product Page](https://heltec.org/project/htcc-ab02s/) -- [Datasheet](https://heltec.org/project/htcc-ab02s/#1552557147424-7f1ec-5c652144-e1d6af18-f963) - -### Specifications - -#### Dimensions: - -- width: 27.9 mm -- length: 55.9 mm -- height: 9.5 mm - -#### Battery: - -- type: Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/cubecell-module-plus.mdx b/docs/use-the-network/devices/development/heltec/cubecell-module-plus.mdx deleted file mode 100644 index 3bf240522..000000000 --- a/docs/use-the-network/devices/development/heltec/cubecell-module-plus.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -id: cubecell-module-plus -hide_title: true -title: HTCC-AM02 -description: - HTCC-AM02 is a Module. Supports AT transparent transmission commands, can be - directly integrated into the application circuit. -image: img/use-the-network/devices/development/heltec/cubecell-module-plus.png -sidebar_label: HTCC-AM02 -slug: /use-the-network/devices/development/heltec/cubecell-module-plus ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## HTCC-AM02 - -HTCC-AM02 is a Module. Supports AT transparent transmission commands, can be -directly integrated into the application circuit. - - - -### Resources - -- [Product Page](https://heltec.org/project/htcc-am02/) -- [Datasheet](https://heltec.org/project/htcc-am02/#1552557147424-7f1ec-5c652144-e1d68312-5a88) - -### Specifications - -#### Dimensions: - -- width: 20.4 mm -- length: 20.4 mm -- height: 3 mm - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/cubecell-module.mdx b/docs/use-the-network/devices/development/heltec/cubecell-module.mdx deleted file mode 100644 index 6b9ae283f..000000000 --- a/docs/use-the-network/devices/development/heltec/cubecell-module.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -id: cubecell-module -hide_title: true -title: HTCC-AM01 -description: - HTCC-AM01 is a Module. Supports AT transparent transmission commands, can be - directly integrated into the application circuit. -image: img/use-the-network/devices/development/heltec/cubecell-module.png -sidebar_label: HTCC-AM01 -slug: /use-the-network/devices/development/heltec/cubecell-module ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## HTCC-AM01 - -HTCC-AM01 is a Module. Supports AT transparent transmission commands, can be -directly integrated into the application circuit. - - - -### Resources - -- [Product Page](https://heltec.org/project/htcc-am01/) -- [Datasheet](https://heltec.org/project/htcc-am01/#1552557147424-7f1ec-5c652144-e1d6f6d7-e5b5) - -### Specifications - -#### Dimensions: - -- width: 18 mm -- length: 18 mm -- height: 3 mm - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/cubecell-solar-sensor.mdx b/docs/use-the-network/devices/development/heltec/cubecell-solar-sensor.mdx deleted file mode 100644 index b1c434d4a..000000000 --- a/docs/use-the-network/devices/development/heltec/cubecell-solar-sensor.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -id: cubecell-solar-sensor -hide_title: true -title: HTCC-AC02 -description: - HTCC-AC02 is a LoRa end node sensor. With a complete enclosure and protection - measures, it can be deployed directly into real-world applications. -image: img/use-the-network/devices/development/heltec/cubecell-solar-sensor.png -sidebar_label: HTCC-AC02 -slug: /use-the-network/devices/development/heltec/cubecell-solar-sensor ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## HTCC-AC02 - -HTCC-AC02 is a LoRa end node sensor. With a complete enclosure and protection -measures, it can be deployed directly into real-world applications. - - - -### Resources - -- [Product Page](https://heltec.org/project/htcc-ac02/) -- [Datasheet](https://heltec.org/project/htcc-ac02/#1552557147424-7f1ec-5c652144-e1d60c7e-82e5) - -### Specifications - -#### Dimensions: - -- height: 67 mm - -#### Battery: - -- type: Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/lora-kit-151.mdx b/docs/use-the-network/devices/development/heltec/lora-kit-151.mdx deleted file mode 100644 index dd36da789..000000000 --- a/docs/use-the-network/devices/development/heltec/lora-kit-151.mdx +++ /dev/null @@ -1,44 +0,0 @@ ---- -id: lora-kit-151 -hide_title: true -title: LoRa Kit 151 -description: LoRa Kit 151 is Ultra-Low-Power and standard LoRaWAN protocol, -image: img/use-the-network/devices/development/heltec/lora-kit-151.png -sidebar_label: LoRa Kit 151 -slug: /use-the-network/devices/development/heltec/lora-kit-151 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LoRa Kit 151 - -LoRa Kit 151 is Ultra-Low-Power and standard LoRaWAN protocol, - - - -### Resources - -- [Product Page](https://heltec.org/project/lora-kit-151/) -- [Datasheet](https://heltec.org/project/lora-kit-151/#1552557147424-7f1ec-5c651922-b0bb7876-1582) - -### Specifications - -#### Dimensions: - -- width: 25.5 mm -- length: 56.3 mm -- height: 7.8 mm - -#### Battery: - -- type: Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/lora-node-151.mdx b/docs/use-the-network/devices/development/heltec/lora-node-151.mdx deleted file mode 100644 index 33921f17f..000000000 --- a/docs/use-the-network/devices/development/heltec/lora-node-151.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: lora-node-151 -hide_title: true -title: LoRa Node 151 -description: - LoRa Node 151, adopting the STM32L151CCU6 MCU (support DFU mode) and SX127x - LoRa chip, use 1/2 AA Lithium chlorine sulfite battery -image: img/use-the-network/devices/development/heltec/lora-node-151.png -sidebar_label: LoRa Node 151 -slug: /use-the-network/devices/development/heltec/lora-node-151 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LoRa Node 151 - -LoRa Node 151, adopting the STM32L151CCU6 MCU (support DFU mode) and SX127x -LoRa chip, use 1/2 AA Lithium chlorine sulfite battery - - - -### Resources - -- [Product Page](https://heltec.org/project/lora-node-151/) -- [Datasheet](https://heltec.org/project/lora-node-151/#1552557147424-7f1ec-5c651922-b0bb9d3c-7452) - -### Specifications - -#### Dimensions: - -- width: 24 mm -- length: 56.6 mm -- height: 20 mm - -#### Battery: - -- type: 1/2AA Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/turtle-board.mdx b/docs/use-the-network/devices/development/heltec/turtle-board.mdx deleted file mode 100644 index 938732a4f..000000000 --- a/docs/use-the-network/devices/development/heltec/turtle-board.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: turtle-board -hide_title: true -title: Turtle Board -description: - The turnkey Turtle board solution can be used immediately. Support standard - LoRaWAN protocol and RadioShuttle protocol. -image: img/use-the-network/devices/development/heltec/turtle-board.png -sidebar_label: Turtle Board -slug: /use-the-network/devices/development/heltec/turtle-board ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Turtle Board - -The turnkey Turtle board solution can be used immediately. Support standard -LoRaWAN protocol and RadioShuttle protocol. - - - -### Resources - -- [Product Page](https://heltec.org/project/turtle-board/) -- [Datasheet](https://heltec.org/project/turtle-board/#1552557147424-7f1ec-5c651922-b0bb1778-6c4e) - -### Specifications - -#### Dimensions: - -- width: 31.5 mm -- length: 73.5 mm -- height: 24 mm - -#### Battery: - -- type: AAA Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/wifi-lora-32-v2/arduino.mdx b/docs/use-the-network/devices/development/heltec/wifi-lora-32-v2/arduino.mdx deleted file mode 100644 index 9826901fc..000000000 --- a/docs/use-the-network/devices/development/heltec/wifi-lora-32-v2/arduino.mdx +++ /dev/null @@ -1,303 +0,0 @@ ---- -id: arduino -hide_title: true -sidebar_label: Arduino -slug: /use-the-network/devices/development/heltec/wifi-lora-32-v2/arduino ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Heltec WiFi LoRa 32 V2 Arduino Guide - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## Introduction to Guide - -:::important - -Before we begin, please make sure you've followed the steps from this guide, -which goes over some initial setup steps. - -::: - -## Objective and Requirements - -In this guide, you will learn: - -- How to setup your environment -- How to program a basic application that will send packets over the Helium - Network -- Verify real-time packets sent to the Helium Console via Hotspot that's in - range - -For this example, you will need the following: - -### Hardware - -- [Heltec WiFi LoRa 32 V2](https://heltec.org/project/wifi-lora-32/) -- Micro USB Type B Cable - - [Example](https://www.amazon.com/AmazonBasics-Male-Micro-Cable-Black/dp/B0719H12WD/ref=sr_1_2_sspa?) - -### Software - -- [Arduino software \(IDE\)](https://www.arduino.cc/en/Main/Software) -- [Helium Console](https://console.helium.com/) - -## Hardware Setup - -### Adding the Antenna - -Your board should have come with a U.FL antenna. All you have to do is attache -it to the U.FL port as shown in the image at the top of the guide. - -### Connect Board - -Next, lets connect our board to our computer with a USB 2.0 A-Male to Micro B -cable. - -## Software Setup - -### Getting the Arduino IDE - -Download and install the latest version of -[Arduino IDE](https://www.arduino.cc/en/Main/Software) for your preferred OS. - -- [Windows](https://www.arduino.cc/en/Guide/Windows) -- [Linux](https://www.arduino.cc/en/Guide/Linux) -- [Mac OSX](https://www.arduino.cc/en/Guide/MacOSX) - -### Arduino Board Support - -The Heltec WiFi LoRa 32 V2 requires one Arduino board support package. Follow -the instructions below to install. - -#### Arduino-ESP32 - -To install, open your Arduino IDE: - -1. Navigate to **\(File > Preferences\), \(Arduino > Preferences\) on - MacOS.** -2. Find the section at the bottom called **Additional Boards Manager URLs:** - - - -1. Add this URL in the text box: - -```text -http://resource.heltec.cn/download/package_heltec_esp32_index.json -``` - -1. Close the Preferences windows - -Next, to install this board support package: - -1. Navigate to \(**Tools > Boards > Boards Manager...\)** -2. Search for **Heltec ESP32** -3. Select the newest version and click Install - - - -### Arduino Library - -To communicate with Helium's LoRaWAN network, we'll need to install two Arduino -libraries. - -#### Heltec ESP32 - -To install, open your Arduino IDE: - -1. Navigate to Library Manager \(**Sketch > Include Library > Manage - Libraries**\). -2. In the search box, type **Heltec ESP32** into the search, select the version - shown below, and click Install. - - -) - -#### Heltec ESP32 LoRaWAN - -Download -[this](https://github.com/HelTecAutomation/ESP32_LoRaWAN/archive/master.zip) -find into the directory below and unzip. - -```text -linux: /home/{user}/Arduino/libraries -windows: Documents\Arduino\libraries -mac os: Documents/Arduino/libraries -``` - -### Install Serial Driver - -Find Directions on Heltec's website -[here](https://heltec-automation-docs.readthedocs.io/en/latest/general/establish_serial_connection.html). - -### Select Board - -Arduino IDE: - -1. Select Tools -> Board: -> WiFi LoRa 32\(V2\) - -### Obtain Heltec License Key - -#### **Upload GetChipID example** - -Arduino IDE: - -1. Select File -> Examples -> ESP32 -> ChipID -> GetChipID -2. Select Tools -> Port: "COM\# or ttyACM\#" -3. Select Sketch -> Upload -4. Wait for Done uploading message -5. Select Tools -> Serial Monitor Serial Monitor Window -6. Select 115200 baud from bottom right dropdown. -7. You should see something that looks like this every second - `ESP32 Chip ID = ############` -8. Save this Chip ID - -#### Obtain License Key with Chip ID - -1. Go to [resource.heltec.cn/search](http://resource.heltec.cn/search) -2. Enter ChipID -3. Save license field, will look like - `0x########,0x#########,0x########,0x########` - -### Programming **Example Sketch** - -Now that we have the required Arduino board support and library installed, lets -program the board with the provided example sketch. - -To create a new Arduino sketch, open your Arduino IDE, \(**File > New\).** -Next, replace the template sketch with the sketch found -[here](https://github.com/helium/longfi-arduino/blob/master/Heltec-WiFi-LoRa-32-V2/longfi-us915/longfi-us915.ino), -copy and paste the entirety of it. - -Next we'll need to fill in the AppEUI\(msb\), DevEUI\(msb\), and AppKey\(msb\), -in the sketch, which you can find on the device details page on Console. Be sure -to use the formatting buttons to match the endianess and formatting required for -the sketch, shown below. - - - -At the top of the sketch, replace the three **FILL_ME_IN** fields, with the -matching field from Console, example shown below. - - -) - -### Selecting Port - -Next, we need to select the correct Serial port in the Arduino IDE. Navigate to -\(**Tools > Port: COM\#/ttyACM\#**\). You will also see either **COM\# or -/dev/ttyACM\#** depending on whether you are on Windows, Mac, or Linux. If you -do not see a port, please visit the Drivers section in -[Heltec's docs](https://heltec-automation-docs.readthedocs.io/en/latest/general/establish_serial_connection.html) -to make sure you have what's needed for your operating system. - -### Select LoRaWAN Region - -The last step before we upload our sketch is to select the correct LoRaWAN -Region, navigate to **\(Tools > LoRaWAN Region: > REGION_US915\).** - -### Required Change to Default DataRate - -In this example sketch, ADR is turned off, therefore you must manually set the -desired data rate for your payload size manually. This library uses a default -data rate that is not supported by the Helium Network so you must change it to -one in the following range DR_0 - DR_4. To do this change the default data rate -on line 20 in the file found below for your operating system - -`linux: /home/{user}/Arduino/libraries/ESP32_LoRaWAN-master/src/ESP32_LoRaWAN.cpp` - -`windows: Documents\Arduino\libraries\ESP32_LoRaWAN-master\src\ESP32_LoRaWAN.cpp` - -`mac os: Documents/Arduino/librariesESP32_LoRaWAN-master/src/ESP32_LoRaWAN.cpp` - -**Change line 20 to:** - -```text -#define LORAWAN_DEFAULT_DATARATE DR_3 -``` - -:::info - -If you don't want to change data rate manually, -[Helium now supports ADR](/use-the-network/console/adr) - -::: - -### Upload Sketch - -We're finally ready to upload our sketch to the board. In the Arduino IDE, click -the right arrow button, or navigate to \(**Sketch > Upload\),** to build and -upload your new firmware to the board. You should see something similar to the -image below at the bottom of your Arduino IDE, when the upload is successful. - - -) - -### Viewing Serial Output - -When your firmware update completes, the board will reset, and begin by joining -the network. Let's use the Serial Monitor in the Arduino IDE to view the output -from the board. We first need to select the serial port again, but this time it -will be a **different port** than the one we selected to communicate with the -bootloader. Once again, navigate to \(**Tools > Port: COM\#/ttyACM\#**\), but -make sure the serial device, either COM\# or ttyACM\#, is different! Next -navigate to \(**Tools > Serial Monitor**\), you should begin to see output -similar to below. - - -) - -Your device may take several minutes to join and begin to send uplink packets -because the library is designed to work in several LoRaWAN regions and networks. -Because of this, the firmware will attempt different sub-bands until it is -successful. If you would like to change the default channel mask in the library -to speed up this process you can make the following change below the sketch. - -**Change line 59 to:** - -```text -uint16_t userChannelsMask[6]={ 0xFF00,0x0000,0x0000,0x0000,0x0002,0x0000 }; -``` - -Now let's head back to [Helium Console](https://console.helium.com) and look at -our device page, you should see something similar to the screenshot below. - - - -Congratulations! You have just transmitted data on the Helium network! The next -step is to learn how to use your device data to build applications, visit our -Integrations docs [here](/use-the-network/console/integrations). diff --git a/docs/use-the-network/devices/development/heltec/wifi-lora-32-v2/wifi-lora-32-v2.mdx b/docs/use-the-network/devices/development/heltec/wifi-lora-32-v2/wifi-lora-32-v2.mdx deleted file mode 100644 index e32cdb560..000000000 --- a/docs/use-the-network/devices/development/heltec/wifi-lora-32-v2/wifi-lora-32-v2.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -id: wifi-lora-32-v2 -hide_title: true -sidebar_label: WiFi LoRa 32 V2 -slug: /use-the-network/devices/development/heltec/wifi-lora-32-v2 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## WiFi LoRa 32 (V2) - -WiFi LoRa 32 is a classic IoT dev-board - - - -### Resources - -- [Product Page](https://heltec.org/project/wifi-lora-32/) -- [Manual](https://heltec-automation-docs.readthedocs.io/en/latest/esp32/quick_start.html) - -### Specifications - -#### Dimensions: - -- width: 25.5 mm -- length: 51 mm -- height: 10.6 mm - -#### Battery: - -- type: Lithium -- replaceable: True - -### Firmware Quickstart Guides - -[Arduino Guide](/use-the-network/devices/development/heltec/wifi-lora-32-v2/arduino) diff --git a/docs/use-the-network/devices/development/heltec/wireless-shell.mdx b/docs/use-the-network/devices/development/heltec/wireless-shell.mdx deleted file mode 100644 index ecb90a11b..000000000 --- a/docs/use-the-network/devices/development/heltec/wireless-shell.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -id: wireless-shell -hide_title: true -title: Wireless Shell -description: - “Wireless Shell” is an ESP32-PICO + SX1276 module. provide Wi-Fi, BLE and LoRa - solution. -image: img/use-the-network/devices/development/heltec/wireless-shell.png -sidebar_label: Wireless Shell -slug: /use-the-network/devices/development/heltec/wireless-shell ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Shell - -“Wireless Shell” is an ESP32-PICO + SX1276 module. provide Wi-Fi, BLE and LoRa -solution. - - - -### Resources - -- [Product Page](https://heltec.org/project/wireless-shell/) -- [Datasheet](https://heltec.org/project/wireless-shell/#1552557147424-7f1ec-5c651922-b0bb7490-e31d) - -### Specifications - -#### Dimensions: - -- width: 16.1 mm -- length: 38.4 mm -- height: 3.6 mm - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/wireless-stick-lite.mdx b/docs/use-the-network/devices/development/heltec/wireless-stick-lite.mdx deleted file mode 100644 index 87f26140a..000000000 --- a/docs/use-the-network/devices/development/heltec/wireless-stick-lite.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: wireless-stick-lite -hide_title: true -title: Wireless Stick Lite (Panda Board) -description: - Compare with Wireless Stick, “Wireless Stick Lite” has much better low power - design (30uA in deep sleep) -image: img/use-the-network/devices/development/heltec/wireless-stick-lite.png -sidebar_label: Wireless Stick Lite (Panda Board) -slug: /use-the-network/devices/development/heltec/wireless-stick-lite ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Stick Lite (Panda Board) - -Compare with Wireless Stick, “Wireless Stick Lite” has much better low power -design (30uA in deep sleep) - - - -### Resources - -- [Product Page](https://heltec.org/project/wireless-stick-lite/) -- [Datasheet](https://heltec.org/project/wireless-stick-lite/#1552557147424-7f1ec-5c651922-b0bbfe12-55e1) - -### Specifications - -#### Dimensions: - -- width: 24.8 mm -- length: 59.3 mm -- height: 8 mm - -#### Battery: - -- type: Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/heltec/wireless-stick.mdx b/docs/use-the-network/devices/development/heltec/wireless-stick.mdx deleted file mode 100644 index 6758325d7..000000000 --- a/docs/use-the-network/devices/development/heltec/wireless-stick.mdx +++ /dev/null @@ -1,44 +0,0 @@ ---- -id: wireless-stick -hide_title: true -title: Wireless Stick (Gecko Board) -description: Wireless Stick (Gecko Board) is high performance and small size -image: img/use-the-network/devices/development/heltec/wireless-stick.png -sidebar_label: Wireless Stick (Gecko Board) -slug: /use-the-network/devices/development/heltec/wireless-stick ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Stick (Gecko Board) - -Wireless Stick (Gecko Board) is high performance and small size - - - -### Resources - -- [Product Page](https://heltec.org/project/wireless-stick/) -- [Datasheet](https://heltec.org/project/wireless-stick/#1552557147424-7f1ec-5c651922-b0bbb94c-7398) - -### Specifications - -#### Dimensions: - -- width: 24.8 mm -- length: 59.3 mm -- height: 8 mm - -#### Battery: - -- type: Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/catena4430.mdx b/docs/use-the-network/devices/development/mcci/catena4430.mdx deleted file mode 100644 index bf6928944..000000000 --- a/docs/use-the-network/devices/development/mcci/catena4430.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: catena4430 -hide_title: true -title: Animal Activity Sensor -description: - Passive Infrared Sensor optimized for monitoring laboratory animals. Includes - SD card storage, pellet feeder interface, indicator lights. -image: img/use-the-network/devices/development/mcci/catena4430.jpg -sidebar_label: Animal Activity Sensor -slug: /use-the-network/devices/development/mcci/catena4430 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Animal Activity Sensor - -Passive Infrared Sensor optimized for monitoring laboratory animals. Includes SD -card storage, pellet feeder interface, indicator lights. - - - -### Resources - -- [Product Page](https://mcci.io/buy-catena4430) -- [Video](https://youtu.be/nG8MmaR5dsA) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- pir -- digital input -- analog input -- battery -- barometer -- time - -#### Dimensions: - -- width: 23 mm -- length: 72 mm -- height: 25 mm - -#### Battery: - -- type: LiPo 3.7V -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/catena4450.mdx b/docs/use-the-network/devices/development/mcci/catena4450.mdx deleted file mode 100644 index 2179cd9c0..000000000 --- a/docs/use-the-network/devices/development/mcci/catena4450.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: catena4450 -hide_title: true -title: MCCI Catena® 4450 Node -description: - General purpose LPWAN building block, open source, user-programmable - end-device with sensors and support -image: img/use-the-network/devices/development/mcci/catena4450.jpg -sidebar_label: MCCI Catena® 4450 Node -slug: /use-the-network/devices/development/mcci/catena4450 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCCI Catena® 4450 Node - -General purpose LPWAN building block, open source, user-programmable end-device -with sensors and support - - - -### Resources - -- [Product Page](https://mcci.io/Catena4450) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- digital input -- analog input -- battery -- barometer -- pulse count -- pulse frequency - -#### Dimensions: - -- width: 23 mm -- length: 51 mm -- height: 35 mm - -#### Battery: - -- type: LiPo 3.7V -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/catena4460.mdx b/docs/use-the-network/devices/development/mcci/catena4460.mdx deleted file mode 100644 index 961d05485..000000000 --- a/docs/use-the-network/devices/development/mcci/catena4460.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: catena4460 -hide_title: true -title: MCCI Catena® 4460 Node -description: - General purpose LPWAN building block, open source, user-programmable - end-device with VOC sensor and support -image: img/use-the-network/devices/development/mcci/catena4450.jpg -sidebar_label: MCCI Catena® 4460 Node -slug: /use-the-network/devices/development/mcci/catena4460 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCCI Catena® 4460 Node - -General purpose LPWAN building block, open source, user-programmable end-device -with VOC sensor and support - - - -### Resources - -- [Product Page](https://mcci.io/buy-catena4460) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- digital input -- analog input -- battery -- barometer -- tvoc - -#### Dimensions: - -- width: 23 mm -- length: 51 mm -- height: 35 mm - -#### Battery: - -- type: LiPo 3.7V -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/catena4470.mdx b/docs/use-the-network/devices/development/mcci/catena4470.mdx deleted file mode 100644 index 9a77b62c7..000000000 --- a/docs/use-the-network/devices/development/mcci/catena4470.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: catena4470 -hide_title: true -title: MCCI Catena® 4470 Node with Modbus -description: - General purpose LPWAN building block, open source, user-programmable - end-device with sensors, Modbus, and support -image: img/use-the-network/devices/development/mcci/catena4470.jpg -sidebar_label: MCCI Catena® 4470 Node with Modbus -slug: /use-the-network/devices/development/mcci/catena4470 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCCI Catena® 4470 Node with Modbus - -General purpose LPWAN building block, open source, user-programmable end-device -with sensors, Modbus, and support - - - -### Resources - -- [Product Page](https://mcci.io/Catena4470) -- [Datasheet](https://cdn.shopify.com/s/files/1/0873/5104/files/Catena4470-Datasheet.pdf?v=1610942439) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- digital input -- analog input -- battery -- barometer -- power -- auxiliary - -#### Dimensions: - -- width: 23 mm -- length: 51 mm -- height: 35 mm - -#### Battery: - -- type: LiPo 3.7V -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/catena4610.mdx b/docs/use-the-network/devices/development/mcci/catena4610.mdx deleted file mode 100644 index 2185e904a..000000000 --- a/docs/use-the-network/devices/development/mcci/catena4610.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: catena4610 -hide_title: true -title: MCCI Catena® 4610 Node -description: - General purpose LPWAN building block, open source, user-programmable - single-board end-device with sensors and support -image: img/use-the-network/devices/development/mcci/catena4610.jpg -sidebar_label: MCCI Catena® 4610 Node -slug: /use-the-network/devices/development/mcci/catena4610 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCCI Catena® 4610 Node - -General purpose LPWAN building block, open source, user-programmable -single-board end-device with sensors and support - - - -### Resources - -- [Product Page](https://mcci.io/catena4610) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- digital input -- analog input -- battery -- barometer -- pulse count -- pulse frequency - -#### Dimensions: - -- width: 23 mm -- length: 51 mm -- height: 5 mm - -#### Battery: - -- type: LiPo 3.7V -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/catena4612.mdx b/docs/use-the-network/devices/development/mcci/catena4612.mdx deleted file mode 100644 index f49c3b0da..000000000 --- a/docs/use-the-network/devices/development/mcci/catena4612.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: catena4612 -hide_title: true -title: MCCI Catena® 4612 Node -description: - General purpose LPWAN building block, open source, user-programmable - single-board end-device with sensors and support -image: img/use-the-network/devices/development/mcci/catena4612.jpg -sidebar_label: MCCI Catena® 4612 Node -slug: /use-the-network/devices/development/mcci/catena4612 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCCI Catena® 4612 Node - -General purpose LPWAN building block, open source, user-programmable -single-board end-device with sensors and support - - - -### Resources - -- [Product Page](https://mcci.io/catena4612) -- [Datasheet](https://cdn.shopify.com/s/files/1/0873/5104/files/971001048c__Catena-4612-Datasheet.pdf?v=1610856170) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- digital input -- analog input -- battery -- barometer -- pulse count -- pulse frequency - -#### Dimensions: - -- width: 23 mm -- length: 51 mm -- height: 5 mm - -#### Battery: - -- type: AAA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/catena4618.mdx b/docs/use-the-network/devices/development/mcci/catena4618.mdx deleted file mode 100644 index 449c53a0a..000000000 --- a/docs/use-the-network/devices/development/mcci/catena4618.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: catena4618 -hide_title: true -title: MCCI Catena® 4618 Node -description: - General purpose LPWAN building block, open source, user-programmable - single-board end-device with sensors and support -image: img/use-the-network/devices/development/mcci/catena4618.jpg -sidebar_label: MCCI Catena® 4618 Node -slug: /use-the-network/devices/development/mcci/catena4618 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCCI Catena® 4618 Node - -General purpose LPWAN building block, open source, user-programmable -single-board end-device with sensors and support - - - -### Resources - -- [Product Page](https://mcci.io/catena4618) -- [Datasheet](https://cdn.shopify.com/s/files/1/0873/5104/files/Catena4618-Datasheet.pdf?v=1610912841) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- digital input -- analog input -- battery - -#### Dimensions: - -- width: 23 mm -- length: 51 mm -- height: 5 mm - -#### Battery: - -- type: AAA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/catena4618m201.mdx b/docs/use-the-network/devices/development/mcci/catena4618m201.mdx deleted file mode 100644 index 9ae820e7b..000000000 --- a/docs/use-the-network/devices/development/mcci/catena4618m201.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: catena4618m201 -hide_title: true -title: MCCI Catena® 4618 M201 Node -description: - High accuracy LPWAN building block, open source, user-programmable - single-board end-device with sensors and support -image: img/use-the-network/devices/development/mcci/catena4618.jpg -sidebar_label: MCCI Catena® 4618 M201 Node -slug: /use-the-network/devices/development/mcci/catena4618m201 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCCI Catena® 4618 M201 Node - -High accuracy LPWAN building block, open source, user-programmable single-board -end-device with sensors and support - - - -### Resources - -- [Product Page](https://mcci.io/catena4618) -- [Datasheet](https://cdn.shopify.com/s/files/1/0873/5104/files/Catena4618-Datasheet.pdf?v=1610912841) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- digital input -- analog input -- battery - -#### Dimensions: - -- width: 23 mm -- length: 51 mm -- height: 5 mm - -#### Battery: - -- type: AAA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/catena4801.mdx b/docs/use-the-network/devices/development/mcci/catena4801.mdx deleted file mode 100644 index e82e5345c..000000000 --- a/docs/use-the-network/devices/development/mcci/catena4801.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: catena4801 -hide_title: true -title: MCCI Catena® 4801 Modbus Node -description: - General purpose LPWAN building block, open source, user-programmable - single-board end-device with RS-485 Modbus interface and support -image: img/use-the-network/devices/development/mcci/catena4801.jpg -sidebar_label: MCCI Catena® 4801 Modbus Node -slug: /use-the-network/devices/development/mcci/catena4801 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCCI Catena® 4801 Modbus Node - -General purpose LPWAN building block, open source, user-programmable -single-board end-device with RS-485 Modbus interface and support - - - -### Resources - -- [Product Page](https://mcci.io/catena4801) -- [Datasheet](https://cdn.shopify.com/s/files/1/0873/5104/files/Catena4801-datasheet.pdf?v=1610922117) - -### Specifications - -#### Sensors: - -- auxiliary -- digital input -- analog input -- battery - -#### Dimensions: - -- width: 23 mm -- length: 51 mm -- height: 5 mm - -#### Battery: - -- type: primary, 3.6V to 1.8V -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/catena4802.mdx b/docs/use-the-network/devices/development/mcci/catena4802.mdx deleted file mode 100644 index 59a0400a0..000000000 --- a/docs/use-the-network/devices/development/mcci/catena4802.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: catena4802 -hide_title: true -title: MCCI Catena® 4802 Modbus/Sensor Node -description: - General purpose LPWAN building block, open source, user-programmable - single-board end-device with RS-485 Modbus interface, I2C bridge with Qwicc - connector, integrated temperature and humidity sensor, and support -image: img/use-the-network/devices/development/mcci/catena4802.jpg -sidebar_label: MCCI Catena® 4802 Modbus/Sensor Node -slug: /use-the-network/devices/development/mcci/catena4802 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCCI Catena® 4802 Modbus/Sensor Node - -General purpose LPWAN building block, open source, user-programmable -single-board end-device with RS-485 Modbus interface, I2C bridge with Qwicc -connector, integrated temperature and humidity sensor, and support - - - -### Resources - -- [Product Page](https://mcci.io/buy-catena4802) - -### Specifications - -#### Sensors: - -- auxiliary -- temperature -- humidity -- digital input -- analog input -- battery - -#### Dimensions: - -- width: 23 mm -- length: 51 mm -- height: 5 mm - -#### Battery: - -- type: primary, 5V to 2.2V -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/model4811.mdx b/docs/use-the-network/devices/development/mcci/model4811.mdx deleted file mode 100644 index 7c2b058a9..000000000 --- a/docs/use-the-network/devices/development/mcci/model4811.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -id: model4811 -hide_title: true -title: Model 4811 Remote Power Meter -description: Real-time power monitor for commercial and residential buildings -image: img/use-the-network/devices/development/mcci/model4811.jpg -sidebar_label: Model 4811 Remote Power Meter -slug: /use-the-network/devices/development/mcci/model4811 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Model 4811 Remote Power Meter - -Real-time power monitor for commercial and residential buildings - - - -### Resources - -- [Product Page](https://mcci.io/m4811) -- [Datasheet](https://mcci.com/971001050c_model4811-powermeter-datasheet/) - -### Specifications - -#### Sensors: - -- power -- voltage -- current - -#### Dimensions: - -- width: 93 mm -- length: 106 mm -- height: 78 mm - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/model4821.mdx b/docs/use-the-network/devices/development/mcci/model4821.mdx deleted file mode 100644 index efdd465eb..000000000 --- a/docs/use-the-network/devices/development/mcci/model4821.mdx +++ /dev/null @@ -1,49 +0,0 @@ ---- -id: model4821 -hide_title: true -title: Model 4821 Indoor Environmental Sensor (BME280) -description: temperature, humidity, barometer, light sensor for indoor spaces -image: img/use-the-network/devices/development/mcci/model482x.jpg -sidebar_label: Model 4821 Indoor Environmental Sensor (BME280) -slug: /use-the-network/devices/development/mcci/model4821 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Model 4821 Indoor Environmental Sensor (BME280) - -temperature, humidity, barometer, light sensor for indoor spaces - - - -### Resources - -- [Product Page](https://mcci.io/m4821) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- barometer -- battery - -#### Dimensions: - -- width: 51 mm -- length: 76 mm -- height: 32 mm - -#### Battery: - -- type: AAA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/model4822.mdx b/docs/use-the-network/devices/development/mcci/model4822.mdx deleted file mode 100644 index 81a1c3f16..000000000 --- a/docs/use-the-network/devices/development/mcci/model4822.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: model4822 -hide_title: true -title: Model 4822 Indoor Environmental Sensor (SHT31) -description: - Higher-accuracy temperature, humidity, light sensor for indoor spaces (using - Sensirion SHT31) -image: img/use-the-network/devices/development/mcci/model482x.jpg -sidebar_label: Model 4822 Indoor Environmental Sensor (SHT31) -slug: /use-the-network/devices/development/mcci/model4822 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Model 4822 Indoor Environmental Sensor (SHT31) - -Higher-accuracy temperature, humidity, light sensor for indoor spaces (using -Sensirion SHT31) - - - -### Resources - -- [Product Page](https://mcci.io/m4821) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- battery - -#### Dimensions: - -- width: 51 mm -- length: 76 mm -- height: 32 mm - -#### Battery: - -- type: AAA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/model4823.mdx b/docs/use-the-network/devices/development/mcci/model4823.mdx deleted file mode 100644 index 461a9312a..000000000 --- a/docs/use-the-network/devices/development/mcci/model4823.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: model4823 -hide_title: true -title: Model 4823 Precision Indoor Environmental Sensor (with SHT35) -description: Precision temperature, humidity, light sensor for indoor spaces. -image: img/use-the-network/devices/development/mcci/model482x.jpg -sidebar_label: Model 4823 Precision Indoor Environmental Sensor (with SHT35) -slug: /use-the-network/devices/development/mcci/model4823 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Model 4823 Precision Indoor Environmental Sensor (with SHT35) - -Precision temperature, humidity, light sensor for indoor spaces. - - - -### Resources - -- [Product Page](https://mcci.io/m4821) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- battery - -#### Dimensions: - -- width: 51 mm -- length: 76 mm -- height: 32 mm - -#### Battery: - -- type: AAA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/model4831.mdx b/docs/use-the-network/devices/development/mcci/model4831.mdx deleted file mode 100644 index d3375f6d2..000000000 --- a/docs/use-the-network/devices/development/mcci/model4831.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -id: model4831 -hide_title: true -title: Model 4831 Outdoor Environmental Sensor (SHT31) -description: - Temperature, humidity, light sensor for outdoors (using Sensirion SHT31) -image: img/use-the-network/devices/development/mcci/model483x-closed.jpg -sidebar_label: Model 4831 Outdoor Environmental Sensor (SHT31) -slug: /use-the-network/devices/development/mcci/model4831 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Model 4831 Outdoor Environmental Sensor (SHT31) - -Temperature, humidity, light sensor for outdoors (using Sensirion SHT31) - - - -### Resources - -- [Product Page](https://mcci.io/m4831) -- [Datasheet](https://cdn.shopify.com/s/files/1/0873/5104/files/model483x-datasheet.pdf?v=1610937656) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- battery - -#### Dimensions: - -- width: 51 mm -- length: 76 mm -- height: 32 mm - -#### Battery: - -- type: AAA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/model4832.mdx b/docs/use-the-network/devices/development/mcci/model4832.mdx deleted file mode 100644 index 55426ec07..000000000 --- a/docs/use-the-network/devices/development/mcci/model4832.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -id: model4832 -hide_title: true -title: Model 4832 High-Accuracy Outdoor Environmental Sensor (SHT35) -description: - Temperature, humidity, light sensor for outdoors (using Sensirion SHT35) -image: img/use-the-network/devices/development/mcci/model483x-closed.jpg -sidebar_label: Model 4832 High-Accuracy Outdoor Environmental Sensor (SHT35) -slug: /use-the-network/devices/development/mcci/model4832 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Model 4832 High-Accuracy Outdoor Environmental Sensor (SHT35) - -Temperature, humidity, light sensor for outdoors (using Sensirion SHT35) - - - -### Resources - -- [Product Page](https://mcci.io/m4832) -- [Datasheet](https://cdn.shopify.com/s/files/1/0873/5104/files/model483x-datasheet.pdf?v=1610937656) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- light -- battery - -#### Dimensions: - -- width: 51 mm -- length: 76 mm -- height: 32 mm - -#### Battery: - -- type: AAA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/mcci/model4841.mdx b/docs/use-the-network/devices/development/mcci/model4841.mdx deleted file mode 100644 index 4ea083a6b..000000000 --- a/docs/use-the-network/devices/development/mcci/model4841.mdx +++ /dev/null @@ -1,49 +0,0 @@ ---- -id: model4841 -hide_title: true -title: Indoor Air Quality Sensor -description: PM 2.5, TVOC, temperature, humidity sensor for indoor air quality -image: img/use-the-network/devices/development/mcci/model4841.jpg -sidebar_label: Indoor Air Quality Sensor -slug: /use-the-network/devices/development/mcci/model4841 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Indoor Air Quality Sensor - -PM 2.5, TVOC, temperature, humidity sensor for indoor air quality - - - -### Resources - -- [Product Page](http://mcci.io/buy-model4841) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- dust -- tvoc -- barometer - -#### Dimensions: - -- width: 41 mm -- length: 63 mm -- height: 33 mm - -#### Battery: - -- type: LiPo 3.7V -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/midatronics/sharky-module.mdx b/docs/use-the-network/devices/development/midatronics/sharky-module.mdx deleted file mode 100644 index d8786ebd2..000000000 --- a/docs/use-the-network/devices/development/midatronics/sharky-module.mdx +++ /dev/null @@ -1,49 +0,0 @@ ---- -id: sharky-module -hide_title: true -title: Sharky -description: - The Sharky PCB is an IoT certified module with onboard PCB antenna based on - the ST Microelectronics STM32WB55CEU6 system on chip, a highly integrated low - power radio design with two core in a single SoC. There are an ARM Cortex-M4 - 32-bit microprocessor to run your application and one ARM Cortex-M0+ 32-bit - microprocessor running the radio networking Stack. The Sharky module supports - BLE, Thread, Zig Bee and generic IEEE 802.15.4 protocol stacks. -image: img/use-the-network/devices/development/midatronics/sharky-module.png -sidebar_label: Sharky -slug: /use-the-network/devices/development/midatronics/sharky-module ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Sharky - -The Sharky PCB is an IoT certified module with onboard PCB antenna based on the -ST Microelectronics STM32WB55CEU6 system on chip, a highly integrated low power -radio design with two core in a single SoC. There are an ARM Cortex-M4 32-bit -microprocessor to run your application and one ARM Cortex-M0+ 32-bit -microprocessor running the radio networking Stack. The Sharky module supports -BLE, Thread, Zig Bee and generic IEEE 802.15.4 protocol stacks. - - - -### Resources - -- [Product Page](https://midatronics.com/shop/module/sharky-i/) -- [Datasheet](https://midatronics.com/wp-content/uploads/2019/10/Sharky_Module.pdf) - -### Specifications - -#### Dimensions: - -- width: 27.25 mm -- length: 16 mm - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/midatronics/windy-mkr.mdx b/docs/use-the-network/devices/development/midatronics/windy-mkr.mdx deleted file mode 100644 index 20fd2a5ac..000000000 --- a/docs/use-the-network/devices/development/midatronics/windy-mkr.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: windy-mkr -hide_title: true -title: MKR WINDY -description: - MKR WINDY is an Arduino MKR1000 form factor board based on the Midatronics - WINDY Module, an IoT module with onboard uFL connector based on the ST - Microelectronics STM32WL, System-On-Chip integrates both a general-purpose - microcontroller and a sub-GHz radio on the same chip. Built on an Arm® - Cortex®‐M4 core architecture, STM32WL microcontrollers also support multiple - modulations – LoRa®, (G)FSK, (G)MSK, BPSK – to ensure flexibility in wireless - applications with LoRaWAN®, Sigfox® or any other suitable protocol in a fully - open way. The windy module features a sub-GHz radio based-on Semtech SX126x to - meet the requirements of a wide range of Low-Power Wide Area Network (LPWAN) - wireless applications in industrial and consumer Internet-of-Things (IoT). -image: img/use-the-network/devices/development/midatronics/windy-mkr.png -sidebar_label: MKR WINDY -slug: /use-the-network/devices/development/midatronics/windy-mkr ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MKR WINDY - -MKR WINDY is an Arduino MKR1000 form factor board based on the Midatronics WINDY -Module, an IoT module with onboard uFL connector based on the ST -Microelectronics STM32WL, System-On-Chip integrates both a general-purpose -microcontroller and a sub-GHz radio on the same chip. Built on an Arm® -Cortex®‐M4 core architecture, STM32WL microcontrollers also support multiple -modulations – LoRa®, (G)FSK, (G)MSK, BPSK – to ensure flexibility in wireless -applications with LoRaWAN®, Sigfox® or any other suitable protocol in a fully -open way. The windy module features a sub-GHz radio based-on Semtech SX126x to -meet the requirements of a wide range of Low-Power Wide Area Network (LPWAN) -wireless applications in industrial and consumer Internet-of-Things (IoT). - - - -### Resources - -- [Product Page](https://midatronics.com/shop/development-boards/mkr-windy/) - -### Specifications - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/midatronics/windy-module.mdx b/docs/use-the-network/devices/development/midatronics/windy-module.mdx deleted file mode 100644 index e3c6272fa..000000000 --- a/docs/use-the-network/devices/development/midatronics/windy-module.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: windy-module -hide_title: true -title: Windy Module -description: - The Windy Module is an IoT module with onboard uFL connector based on the ST - Microelectronics STM32WL, System-On-Chip integrates both a general purpose - microcontroller and a sub-GHz radio on the same chip. Built on an Arm® - Cortex®‐M4 core architecture, STM32WL microcontrollers also support multiple - modulations – LoRa®, (G)FSK, (G)MSK, BPSK – to ensure flexibility in wireless - applications with LoRaWAN® , Sigfox® or any other suitable protocol in a fully - open way. The windy module features a sub-GHz radio based-on Semtech SX126x to - meet the requirements of a wide range of Low-Power Wide Area Network (LPWAN) - wireless applications in industrial and consumer Internet-of-Things (IoT). -image: img/use-the-network/devices/development/midatronics/windy-module.png -sidebar_label: Windy Module -slug: /use-the-network/devices/development/midatronics/windy-module ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Windy Module - -The Windy Module is an IoT module with onboard uFL connector based on the ST -Microelectronics STM32WL, System-On-Chip integrates both a general purpose -microcontroller and a sub-GHz radio on the same chip. Built on an Arm® -Cortex®‐M4 core architecture, STM32WL microcontrollers also support multiple -modulations – LoRa®, (G)FSK, (G)MSK, BPSK – to ensure flexibility in wireless -applications with LoRaWAN® , Sigfox® or any other suitable protocol in a fully -open way. The windy module features a sub-GHz radio based-on Semtech SX126x to -meet the requirements of a wide range of Low-Power Wide Area Network (LPWAN) -wireless applications in industrial and consumer Internet-of-Things (IoT). - - - -### Resources - -- [Product Page](https://midatronics.com/shop/module/windy/) -- [Datasheet](https://midatronics.com/wp-content/uploads/2020/10/Windy-STM32WL-Module_1.2.pdf) - -### Specifications - -#### Dimensions: - -- width: 23 mm -- length: 14.6 mm - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/multi-tech/multi-tech-xdot.mdx b/docs/use-the-network/devices/development/multi-tech/multi-tech-xdot.mdx deleted file mode 100644 index 085dc7823..000000000 --- a/docs/use-the-network/devices/development/multi-tech/multi-tech-xdot.mdx +++ /dev/null @@ -1,44 +0,0 @@ ---- -id: multi-tech-xdot -hide_title: true -title: MultiTech xDot® Long Range LoRa Module -description: - MultiTech xDot®is a secure, end-certified, Arm®Mbed™programmable, low-power RF - module, that provides long-range, low bit rate M2M data connectivity to - sensors, industrial equipment and remote appliances. -image: img/use-the-network/devices/development/multi-tech/multi-tech-xdot.png -sidebar_label: MultiTech xDot® Long Range LoRa Module -slug: /use-the-network/devices/development/multi-tech/multi-tech-xdot ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MultiTech xDot® Long Range LoRa Module - -MultiTech xDot®is a secure, end-certified, Arm®Mbed™programmable, low-power RF -module, that provides long-range, low bit rate M2M data connectivity to sensors, -industrial equipment and remote appliances. - - - -### Resources - -- [Product Page](https://www.multitech.com/brands/multiconnect-xdot) -- [Datasheet](https://www.multitech.com/documents/publications/data-sheets/86002182.pdf) - -### Specifications - -#### Dimensions: - -- width: 23.6 mm -- length: 23.6 mm -- height: 3.51 mm - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/quickstart-guides.mdx b/docs/use-the-network/devices/development/quickstart-guides.mdx deleted file mode 100644 index f6d348280..000000000 --- a/docs/use-the-network/devices/development/quickstart-guides.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -id: quickstart-guides -hide_title: true -hide_table_of_contents: true -sidebar_label: Quickstart Guides -slug: /use-the-network/devices/development/quickstart-guides ---- - -## Development Device Quickstart Guides - -Quickstart guides are provided for some of the most popular development boards. -The guides cover every step needed to program and send packets on the network. - -#### [ST B-L072Z-LRWAN1](/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1) -- [Arduino](/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/arduino) -- [Platform IO](/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/platformio) - -#### [Sparkfun Pro RF](/use-the-network/devices/development/sparkfun/pro-rf) -- [Arduino](/use-the-network/devices/development/sparkfun/pro-rf/arduino) - -#### [Adafruit Feather MO](/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95) -- [Arduino](/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/arduino) - -#### [Heltec Cubecell](/use-the-network/devices/development/heltec/cubecell-dev-board) -- [Arduino](/use-the-network/devices/development/heltec/cubecell-dev-board/arduino) -- [Platform IO](/use-the-network/devices/development/heltec/cubecell-dev-board/platformio) - -#### [Heltec WiFi LoRa 32 V2](/use-the-network/devices/development/heltec/wifi-lora-32-v2) -- [Arduino](/use-the-network/devices/development/heltec/wifi-lora-32-v2/arduino) - -#### [RAK Wireless WisBlock Starter](/use-the-network/devices/development/rakwireless/wisblock-4631) -- [Arduino](/use-the-network/devices/development/rakwireless/wisblock-4631/arduino) -- [Platform IO](/use-the-network/devices/development/rakwireless/wisblock-4631/platformio) \ No newline at end of file diff --git a/docs/use-the-network/devices/development/rakwireless/rak7431.mdx b/docs/use-the-network/devices/development/rakwireless/rak7431.mdx deleted file mode 100644 index cf2da8e9f..000000000 --- a/docs/use-the-network/devices/development/rakwireless/rak7431.mdx +++ /dev/null @@ -1,49 +0,0 @@ ---- -id: rak7431 -hide_title: true -title: RAK7431 WisNode Bridge Serial -description: - RAK7431 WisNode Bridge Serial is an RS485 to LoRaWAN converter designed for - industrial applications. The device relays ModBUS data using the LoRaWAN - network as means of wirelessly transmitting to and from the end devices. -image: img/use-the-network/devices/development/rakwireless/rak7431.png -sidebar_label: RAK7431 WisNode Bridge Serial -slug: /use-the-network/devices/development/rakwireless/rak7431 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## RAK7431 WisNode Bridge Serial - -RAK7431 WisNode Bridge Serial is an RS485 to LoRaWAN converter designed for -industrial applications. The device relays ModBUS data using the LoRaWAN network -as means of wirelessly transmitting to and from the end devices. - - - -### Resources - -- [Product Page](https://docs.rakwireless.com/Product-Categories/WisNode/RAK7431/) -- [Datasheet](https://docs.rakwireless.com/Product-Categories/WisNode/RAK7431/Datasheet/) -- [Video](https://www.youtube.com/watch?v=XVRR7Akyy8M) - -### Specifications - -#### Dimensions: - -- width: 24 mm -- length: 93.6 mm -- height: 100.3 mm - -#### Weight: - -- 490 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/rakwireless/wisblock-4631/arduino.mdx b/docs/use-the-network/devices/development/rakwireless/wisblock-4631/arduino.mdx deleted file mode 100644 index cc20875ef..000000000 --- a/docs/use-the-network/devices/development/rakwireless/wisblock-4631/arduino.mdx +++ /dev/null @@ -1,340 +0,0 @@ ---- -id: arduino -hide_title: true -sidebar_label: Arduino -slug: /use-the-network/devices/development/rakwireless/wisblock-4631/arduino ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## RAK Wireless WisBlock Arduino Guide - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## Introduction to Guide - -:::important - -Before we begin, please make sure you've followed the steps from this guide, -which goes over some initial setup steps. - -::: - -## Objective and Requirements - -In this guide, you will learn: - -- How to setup your environment -- How to program a basic application that will send packets over the Helium - Network -- Verify real-time packets sent to the Helium Console via Hotspot that's in - range - -For this example, you will need the following: - -### Hardware - -- [RAK Wireless WisBlock Starter Kit](https://store.rakwireless.com/products/wisblock-starter-kit) -- Micro USB Type B Cable - - [Example](https://www.amazon.com/AmazonBasics-Male-Micro-Cable-Black/dp/B0719H12WD/ref=sr_1_2_sspa?) - -### Software - -- [Arduino software \(IDE\)](https://www.arduino.cc/en/Main/Software) -- [Helium Console](https://www.helium.com/console) - -## Hardware Setup - -### Attaching the LoRa and BLE Antennas - -Your WisBlock Starter Kit should have come with two U.FL antenna. - -- the one that resembles an "I" is the LoRa antenna, this one connects to the - connector on the core module marked LoRa, which is below the large K in the - RAK logo. -- the one that resembles a "T" is the BLE antenna, this one connects to the - connector on the core module marked BLE - -### Connect Board - -Next, lets connect our board to our computer with a USB 2.0 A-Male to Micro B -cable. - -## Software Setup - -### Getting the Arduino IDE - -Download and install the latest version of -[Arduino IDE](https://www.arduino.cc/en/Main/Software) for your preferred OS. -(At least v1.6.12) - -- ​[Windows](https://www.arduino.cc/en/Guide/Windows)​ -- ​[Linux](https://www.arduino.cc/en/Guide/Linux)​ -- ​[Mac OSX](https://www.arduino.cc/en/Guide/MacOSX)​ - -Following the Arduino IDE installation instructions that are appropriate for -your development platform. It is suggested you allow the device driver -installation for your target device if prompted. - -:::warning -_**If you are using Windows 10**_. -Do _**NOT**_ install the Arduino IDE from the Microsoft App Store. Please -install the original Arduino IDE from the -[Arduino official website](https://www.arduino.cc/en/Guide/Windows)​!. The -Arduino app from the Microsoft App Store has problems using third party Board -Support Packages. ::: - -### Installing Arduino Board Support - -The WisBlock Starter Kit requires the installation of an Arduino board support -package. Follow the instructions below. - -To install, open your Arduino IDE: - -1. Navigate to **\(File > Preferences\), \(Arduino > Preferences\) on - MacOS.** -2. Find the section at the bottom called **Additional Boards Manager URLs:** - - - -1. Add this URL in the text box: - -```text -https://raw.githubusercontent.com/RAKwireless/RAKwireless-Arduino-BSP-Index/main/package_rakwireless_index.json -``` - -2. Click "OK" to close the Preferences windows - -Next, to install this board support package into the Arduino IDE: - -1. Navigate to \(**Tools > Board > Boards Manager...\)** -2. Enter RAKWireless in the search bar. -3. On the **RAKwireless nRF Boards** item select the newest version and then - click Install - - - -When the board installation process has finished, close the Boards Manager -dialog. - -### Install SX125x-Arduino Support library - -Next we need to install the LoRaWan support library. - -1. Navigate to \(**Sketch> Include Library > Manage Libraries...\)** - -{" "} - -2. Enter **SX126x-Arduino** in the search box -3. On the **SX126x-Arduino** item select the newest version and click Install - - - -When the library installation process has finished, close the Library Manager -dialog. - -### Install Serial Driver - -Some operating systems, especially Windows, may require the installation of -hardware specific USB device driver code. In general it's best to just try to -upload a built application before installing new device drivers. - -If the upload fails and you believe it is a device driver issue refer to the -WisBlock support forum found [here](https://forum.rakwireless.com/) for the most -up to date information. Search within the WisBlock category. - -### Set Project Configuration Options - -The target board type and LoRaWan Region are set via the Arduino IDE Tools menu -as follows: - -1. Board Type: Select (**Tools> Board>RAKwireless nRF Modules>WisBlock - Core RAK4631 Board \)** - - - -2. LoRaWan Region: Select (**Tools> Region>US915 \)** -3. Set Debug level as desired: Select (**Tools> Debug \)** -4. Port number is important and may be automatically selected for you if not it - can be changed via: (**Tools> Port \)** - - - -Unlike some other board types the remaining LoRaWan configuration items for a -WisBlock are via defines within the sketch. For example: - -``` -// example LoRaWan configuration defines -bool doOTAA = true; -DeviceClass_t gCurrentClass = CLASS_A -lmh_confirm gCurrentConfirm = LMH_UNCONFIRMED_MSG -#define LORAWAN_DATARATE DR_0 -#define LORAWAN_TX_POWER TX_POWER_5 -#define JOINREQ-NBTRIALS 3 -``` - -### Programming **Example Sketch** - -Now that we have the required Arduino board support and library installed, lets -program the board with the provided example sketch. - -#### Example Sketch - -To create a new Arduino sketch, open your Arduino IDE, \(**File > New\).** -Next, replace the template sketch with the sketch found -[here](https://github.com/helium/longfi-arduino/blob/master/RAKWireless-WisBlock/longfi-us915/longfi-us915.ino), -copy and paste the entirety of it. - -#### Add device credentials - -Next we'll need replace the placeholder AppEUI, DevEUI, and AppKey values found -within the sample program with the real values found on the target device page -within the Helium Console. - -``` -NOTE: - The endianess required for these credentials varies - depending on the LoRaWan runtime library - implementation. Using a custom library implementation - will require an understanding of that libraries - endian requirement, big endian or little endian. -``` - -For our WisBlock example all values are big endian \(msb\), most significant bit -on the left. Be sure to use the formatting buttons to expand the ids and match -the endianess formatting required for the sketch, as shown below. - - - -At the top of the main.cpp file, replace the three **FILL_ME_IN** fields, with -the matching field from the Helium Console, example shown below. Your numbers -will be different depending on what the console creates when you add your target -device. - - - -#### Build the Sketch - -Once the device ids have been entered build the firmware by clicking on the -check mark button found at the right side of the Arduino IDE tool bar. - -#### Upload Built Firmware - -We're finally ready to upload our sketch to the board. - -1. First, without your device connected to your development platform, within the - Arduino IDE make a note of which comm ports are currently detected. \(**Tools - > Port:**\). -2. Next connect your WisBlock device to your development computer. -3. Finally within the Arduino IDE select the comm port associated with the - WisBlock. \(**Tools > Port: COM\#/ttyACM\#**\). The correct one will be - the one newly added after the device was connected. - -``` -If you are still unsure which port is associated with -the WisBlock you may need to disconnect the device, -restart the Arduino IDE, then check the available ports -via "Tools>Port:" prior to re-connecting the device. -``` - -In the Arduino IDE, click the right arrow button, or navigate to \(**Sketch > -Upload\),** to build and upload your new firmware to the board. You should see -something similar to the image below at the bottom of your Arduino IDE, when the -upload is successful. - - - -#### Viewing Serial Output - -When your firmware update completes, the board will reset, and begin by joining -the network. Let's use the Serial Monitor in the Arduino IDE to view the output -from the board. - -We first need to verify the connected serial port again as it may be a different -port than the one shown in the firmware upload progress view seen above. - -Again navigate to \(**Tools > Port: COM\#/ttyACM\#**\), and verify the proper -serial device is selected. - -Then open the serial monitor by clicking on the icon in the upper right corner -of the Arduino IDE. - - - -When the monitor opens you should begin to see output similar to below. - - - -Now let's head back to [Helium Console](https://console.helium.com/) and look at -our device page, you should see something similar to the screenshot below. - - - -Congratulations! You have just transmitted data on the Helium network! The next -step is to learn how to use your device data to build applications, visit our -Integrations docs [here](/use-the-network/console/integrations).. - -### Examples and Tutorials - -After you have installed the RAK WisBlock support into the Arduino IDE board you -can see more WisBlock examples by navigating to \(**File > Examples > RAK -WisBlock Examples...\)** - -``` -NOTE: These examples have not been verified to be -compatible with the Helium network. But they will -demonstrate various aspects of the WisBlock development - board. -``` - -For more information about the examples and tutorials visit the RAK Wireless -WisBlock Github repo located [here](https://github.com/RAKWireless/WisBlock). diff --git a/docs/use-the-network/devices/development/rakwireless/wisblock-4631/platformio.mdx b/docs/use-the-network/devices/development/rakwireless/wisblock-4631/platformio.mdx deleted file mode 100644 index 4c87835d1..000000000 --- a/docs/use-the-network/devices/development/rakwireless/wisblock-4631/platformio.mdx +++ /dev/null @@ -1,742 +0,0 @@ ---- -id: platformio -hide_title: true -sidebar_label: PlatformIO -slug: /use-the-network/devices/development/rakwireless/wisblock-4631/platformio ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -# Getting started with Helium and PlatformIO - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -[PlatformIO ](https://platformio.org/)is a cross-platform, cross-architecture, -multiple framework, professional tool for embedded systems engineers and for -software developers who write applications for embedded products. - -:::important - -Before we begin, please make sure you've followed the steps from this guide, -which goes over some initial setup steps. - -::: - -## Introduction to Guide - -This guide will walk through installing PlatformIO and deploying a Helium -Arduino program on a target device. Here, as an example, we will detail the -steps required to integrate a specific board type, the -[RAK Wireless WisBlock](https://store.rakwireless.com/pages/wisblock) family of -boards. - -However, this guide can be also used to on-board many other types of target -devices. In most cases one can just substitute your target device in place of -the WisBlock developer board. - -## Objective and Requirements - -In this guide, you will learn: - -- How to setup your PlatformIO IDE environment -- How to create, build, upload a simple embedded application -- How to program a basic application that will send packets over the Helium - Network -- Verify real-time packets sent to the Helium Console via Hotspot that's in - range - -For this example, we are going to use the -[RAK Wireless WisBlock Starter Kit](https://store.rakwireless.com/products/wisblock-starter-kit). -This procedure should work as a starting point if your particular device -contains more of the WisBlock components. Follow on RAK Wireless products may -work but have not been tested at this point. - -### Hardware - -- [RAK Wireless WisBlock Starter Kit](https://store.rakwireless.com/products/wisblock-starter-kit) -- Micro USB Type B Cable - - [Example](https://www.amazon.com/AmazonBasics-Male-Micro-Cable-Black/dp/B0719H12WD/ref=sr_1_2_sspa?) - -### Software - -PlatformIO is not a standalone IDE, it installs as an extension to Microsoft -VSCode. The Helium Console is a cloud based device management tool that we will -use to enable our device access to the Helium network. There is no installation -required however one will need to create a user account with the Helium Console. - -- [VSCode \(IDE)](https://code.visualstudio.com/) - - [PlatformIO \(VScode Extension)](https://platformio.org/) -- [Helium Console](https://www.helium.com/console) - -## Hardware Setup - -### Attaching the LoRa and BLE Antennas - -Your WisBlock Starter Kit should have come with two U.FL antenna. - -- the one that resembles an "I" is the LoRa antenna, this one connects to the - connector on the core module marked LoRa, which is below the large K in the - RAK logo. -- the one that resembles a "T" is the BLE antenna, this one connects to the - connector on the core module marked BLE - -### Connect Target Board to Development PC - -The target boards are typically connected to the host computer via a USB 2.0 -A-Male to Micro B cable. - -## Software Setup - -### Install Development Machine Serial Device Driver - -Some operating systems, especially Windows, may require the installation of -hardware specific USB device driver code. In general it's best to just try to -upload a built application before installing new device drivers. If the upload -fails and you believe it is a device driver issue refer to the WisBlock support -forum for the most up to date information. -[RAK Wireless Support Forum](https://forum.rakwireless.com/). - -### Installing PlatformIO - -The WisBlock Starter Kit is not currently supported by PlatformIO out of the -box. One must install VSCode/PlatformIO and then take some extra steps to add -support for WisBlock. - -This guide will walk you through the following basic steps to get a simple -Helium enabled embedded application up and running. The steps will include - -- install VSCode and the PlatformIO extension -- install the Nordic nRF52 Arduino framework -- Implement patch files for RAK WisBlock Core boards -- Add WisBlock Core RAK4631 Variants Definition Files to PlatformIO -- create a new PlatformIO project -- prove out the install via a sample RAK Wireless WisBlock project -- add a project dependency library, SX126x-Arduino -- integrate your device specific Helium network configuration keys, Device EUI, - APPEUI, APPKEY which you obtain from the Helium console device definition. -- add your target LoRaWAN region defines to the platformio.ini configuration - file -- compile and upload the device application - -#### Install VSCode and PlatformIO Extension - -Using the VSCode instructions found [here](https://code.visualstudio.com/) -download and install Microsoft's Visual Studio Code. PlatformIO IDE is built on -top of VSCode as an extension. Once the VSCode is installed: - -1. Open VSCode Extension Manager by clicking on the Extensions icon on the left - side of the main view. -2. Within the Extensions Marketplace search for official "PlatformIO IDE" - extension -3. Click on the "Install" button contained within the PlatformIO IDE item -4. Addtional details for the PlatformIO extension can be found - [here](https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide) - - - -It is highly recommended to give the PlatformIO quick-start guide a read. It -will help you navigate the unfamiliar interface. The guide can be found -[here](https://docs.platformio.org/en/latest/integration/ide/vscode.html#quick-start). - -Once PlatformIO is installed, you should be welcomed to VSCode with the -following "PIO Home" screen: - - - -If not already open, the PlatformIO "Home" view can be opened by clicking on the -house icon within the VScode status bar. - - - -### Updating PlatformIO to Support the WisBlock Developer Board - -#### Install Nordic nRF52 Arduino framework - -We now need to install the framework of WisBlock support libraries. - -Select the "Platforms" icon located on the left side of the PIO Home view. In -the "Filter Platforms by Name" field, enter "Nordic" as follow: - - - -You may see there are several items, just select the "Nordic nRF52" item and -then select "Install" as seen below: - - - - -When complete you should see a successful install message such as the one above. - -#### Implement patch files for RAK WisBlock Core boards - -Download the PlatformIO folder from: - -https://github.com/RAKWireless/WisBlock/tree/master/PlatformIO/ - -and save it on your computer. - -From the downloaded folder copy the file **`wiscore_rak4631.json`** to the -boards folder of the nordicnrf52 platform folder. - -The path should be similar to: - -``` -Windows: %USER%\.platformio\platforms\nordicnrf52\boards -Linux: ~/.platformio/platforms/nordicnrf52/boards -Mac OS: /Users/{Your_User_id}/.platformio/platforms/nordicnrf52/boards -``` - -#### Add WisBlock Core RAK4631 Variants Definition Files to PlatformIO - -Now, from the folder downloaded above, copy the complete "WisCore_RAK4631_Board" -folder into PlatformIO's packages/framework-arduinoadafruitnrf52/variants -folder. The path should be similar to: - -``` -Windows: %USER%\.platformio\packages\framework-arduinoadafruitnrf52\variants -Linux: ~/.platformio/packages/framework-arduinoadafruitnrf52/variants -Mac OS: /Users/{Your_User_id}/.platformio/packages/framework-arduinoadafruitnrf52/variants -``` - -When complete you will have a new sub folder under variants called -"WisCore_RAK4631_Board". - -#### Restart PlatformIO - -This completes the necessary WisBlock updates to PlatformIO. To fully implement -these changes shutdown, then restart PlatformIO - -### Creating a New PlatformIO Project - -If you have not already used PlatformIO to build, upload and verify the -operation of a sample application it is best familiarize yourself with the basic -use of PlatformIO before adding the complexity of Helium network access code to -the mix. - -If you are familiar and confident with the steps required you can continue at -"Sample Helium Network Access Code" by clicking -[here](#ADD-HELIUM-NETWORK-CODE). - -#### Prove out the install with a sample non Helium project - -To avoid too many unknowns when first starting out, the following will create, -build and upload a non Helium Network device applications. Once the basics are -proven we will add more complexity by introducing code that will access the -Helium LoRaWAN network. The following steps will walk you through what is -required to: - -- create a template project -- inspect the default source file, main.cpp as well as the primary project - configuration file, platformio.ini -- build the project and inspect the build log output -- upload the sample binary to the target development board. -- inspect serial output debug information. - -#### Open "New Project Wizard" - Select project name and board - -- Within the "PIO Home" view click on "New Project". - -- At the "Project Wizard" dialog enter a name for your project in the "Name" - field. -- Within the "Board" field select the appropriate target board by entering the - name of the board, "WisCore" for our example. The PlatformIO auto search - feature should present you with a known list of supported boards. In our case - we should see "WisCore RAK4631 Board (RAKWireless)" presented as a selection. -- For the "Framework" selection some devices will support more than one - framework within PlatformIO, for our WisBlock example make sure "Arduino" is - selected. - - - -- With the Project Wizard items filled in, click on Finish to start the project - creation. - -The time taken to create a project will vary depending on whether or not the -selected platform and framework files have been previously downloaded. When the -project has been created it should be shown, as seen below, within the -PlatformIO Explorer view typically found on the left side of the IDE. - - - -Typical project explorer view. - -#### Default project main.cpp - -If you are familiar developing within the Arduino IDE, main.cpp is much the same -as the Arduino \*.ino. It also contains default setup() and loop() functions. - -PlatformIO also adds a required "\#include " statement. This is an -important/necessary difference between PlatformIO and Arduino IDEs. - - - -#### platformio.ini - project configurations - -Let's take a look at the platformio.ini file in the root of our new project. -This is where one defines project configuration definitions. In the Arduino -world one would do this via the IDE tool bar selections. - -NOTE: when this file is modified the entire project will be rebuilt when the -project is next built or uploaded. - - - -Here we see the platformio.ini file that was created as a result of the running -the New Project wizard targeting our WisBlock board. - -#### Build the target device application - -Now that the template project has been created it's time to build the device -application. Within PlatformIO the "Build" button is the check-mark found within -the bottom status bar. Clicking on this button should start the build process. - - - -#### Inspect the build output - -Due to the defines within platformio.ini, PlatformIO is able to determine the -project board and framework dependencies. Any missing dependencies are -automatically installed at build time, thus this process may be seen in the -build output. This feature allows us to add libraries into our platformio.ini -file, which will then be downloaded for us, if needed, at build time. - -The build process results can be found within the "Terminal View" typically -found at the bottom of the VSCode window. Much like with Arduino, the build -output will dump the calculated amount of Ram and Flash memory used by your -application. - - - -Start of the build output displaying configuration information. - - - -Tail end of build log showing Ram and Flash usage. There is also a Problems -output view that may help when trying to resolve build issues. - -#### List of attached devices - -For this sections please make sure your target device is connected to your -development computer. - -If, within the "PIO Home" view, you select the "Devices" icon on the left, you -will see listed any attached physical devices as well as their associated comm -ports: - - - -The list should reflect your target device. The exact content will vary -depending which operating system PlatformIO is being executed on. - -#### Uploading binary to target device - -Now that the code has built successfully, if a target device is attached to your -computer the resulting binary can be uploaded to the target device. - -The method of uploading the binary to your device may vary depending on the -target device. PlatformIO will attempt to configure upload options appropriate -for the chosen board. If the default configuration does not work in your -instance detailed information can be found within the PlatformIO documentation -[here](https://docs.platformio.org/en/latest/projectconf/section_env_upload.html?highlight=upload) -or within your target board vendors documentation set. - - - -Click on the Upload button within the bottom Status bar. - -Below you will see a typical output as the binary is uploaded to the target -board. - - - -``` -NOTE: - With some target devices PlatformIO will - automatically close any open comm port connection. - An upload error may occur if for some reason the - comm port cannot be closed. If this is the case you - must manually close down the terminal emulator's - connection before retrying the upload. -``` - -Now that the application has been uploaded you can connect your favorite -terminal emulator to the comm port seen in the list of devices above. Because -the above sample project is an empty project you will not see any addition -output via the terminal emulator output unless you customize the sample with -debug output statements. - -Additional RAK Wireless supported WisBlock sample code can be found at -[https://github.com/RAKWireless/WisBlock/tree/master/examples](https://github.com/RAKWireless/WisBlock/tree/master/examples) - -If you have made it this far then we know your environment can build and upload -a device application. Now it's time to connect to the Helium network. - -### Helium Console - Create Device - -In order for a target device to communicate via the Helium Network a user -account must first be created. Once the user account is created then a console -device must be created. - -When creating the console device, make note of the DevEUI, AppEUI, and AppKey -device credentials. These are used to connect to the network and will need to be -inserted into the device application code below. A console quick start guide can -be found [here](/use-the-network/console/quickstart). - -### Sample Helium Network Access Code - -If you have not created a simple template project and you want to try one of the -samples you can copy a sample into your workspace where it should build without -error. A full PlatformIO project can be found -[here](https://github.com/helium/longfi-platformio/tree/master/RAKWireless-WisBlock/examples/LoRaWan_OTAA). -Alternatively you can update the template project created above by continuing -the following steps. - -#### Update main.cpp - -Now that we have the minimum required board and library runtime support -installed, let's program the board with an example Helium network enabled -application. - -To update the sample application created above: - -- open, within PlatformIO, your projects src/main.ccp file -- replace this template main.cpp with the content of the sample application - found - [here](https://github.com/helium/longfi-platformio/blob/master/RAKWireless-WisBlock/examples/LoRaWan_OTAA/src/main.cpp). - Copy and paste the entirety of it. - -#### Add WisBlock LoRaWan Support Library to Project - -The WisBlock LoraWan support library is not fully integrated into PlatformIO at -this point. It must be included within each WisBlock project. This is -accomplished by: - -- Open the PlatformIO:Home view by selecting the "house" button located on the - VSCode status bar -- Select the "Libraries" icon on the left side of the "PlatformIO:Home" view -- within the "Search libraries" field enter "SX126x-Arduino" and hit the enter - key -- When presented with the library entry, click on it. -- Click on the highlighted "Add to Project" button -- In the dialog that pops up, select the project into which you want to include - the library, then click on the "Add" button - -This process will add a library dependency line into the platformio.ini file -similar to: - -``` -lib_deps = beegee-tokyo/SX126x-Arduino@^1.3.1 -``` - -The dependent libraries are also installed into the selected project within it's -.pio/libdes directory. - -#### Add device credentials - -Next we'll need replace the placeholder AppEUI, DevEUI, and AppKey values found -within the sample program with the real values found on the target device page -within the Helium Console. - -``` -NOTE: - The endianess required for these credentials varies - depending on the LoRaWAN runtime library implementation. - Using a custom library implementation will require an - understanding of that libraries endian requirement, big - endian or little endian. -``` - -For our WisBlock example all values are big endian \(msb\), most significant bit -on the left. - - - -At the top of the main.cpp file, replace the three **FILL_ME_IN** fields, with -the matching field from the Helium Console, example shown below. Your numbers -will be different depending on what the console creates when you add your target -device. - - - -#### Verify LoRaWAN channels mask - -Runtime library implementations are designed to work across several LoRaWAN -regions and networks. The firmware will attempt to join the network using -various frequency sub-bands, defined by a channel mask, until the join succeeds. -It is recommended that you change the default channel mask to a value that will -help the join process complete connection to the Helium network in a more timely -manner. The process, where and how, to update this channel mask will vary -depending on the LoRaWAN runtime implementation - -For our example using the WisBlock and it's runtime the channel mask is set via -a runtime API call. The following piece of code can be incorporated into sample -projects. Refer to a sample to determine where this code should reside, -generally just prior to the call to the join API call is fine. - -``` -/* Helium Network LoraWan sub channel 2 is recommended, default channels 0-7*/ - if (!lmh_setSubBandChannels(2)) - { - Serial.println("lmh_setSubBandChannels() failed"); - } -``` - -#### A Note About Network Join Failures - -Within the project main.cpp file there is the following define: - -``` -#define JOINREQ_NBTRIALS 10 -``` - -This define is used by the runtime to determine how many times to attempt a -LoRaWAN network join. Once this number of join retries is exhausted the runtime -will call a device application level callback, if defined. - -The runtime will no longer attempt to join the network once this callback has -been called. It is left to the device application to monitor via the join -success and join fail callbacks the status of the join process. - -If your device application has or may have difficulty joining the network due to -poor signal quality the application will need to manage the join retries beyond -the number defined by JOINREQ_NBTRIALS. An example project which attempts to -handle join failure retries can be found -[here](https://github.com/helium/longfi-platformio/blob/master/RAKWireless-WisBlock/examples/LoRaWan_OTAA_Join_Retry). - -The currently supported device application level callbacks can be found within -the sample applications within the following define. - -``` -static lmh_callback_t lora_callbacks = { ... }; -``` - -#### platformio.ini - project configurations - -For our sample application we need a few configuration items added to the -project platformio.ini file. These include project defines, serial debug monitor -configurations and debugger configurations. - -Complete documentation of platformio.ini content can be found -[here](https://docs.platformio.org/en/latest/projectconf/index.html). Serial -debug monitor specific items -[here](https://docs.platformio.org/en/latest/projectconf/section_env_monitor.html). - -For our example WisBlock project update the projects platformio.ini with the -content from the sample project: - -- open, within PlatformIO, your projects platformio.ini file -- replace this template file with the content found - [here](https://github.com/helium/longfi-platformio/blob/master/RAKWireless-WisBlock/examples/LoRaWan_OTAA/platformio.ini). - Copy and paste the entirety of it. - -Once you have become more familiar with the LoRaWAN/Helium network feel free to -experiment with different configuration settings possible within platformio.ini. - -NOTE: The comment character for this file type is the semicolon. - -#### Build the device application - -After updating the main.cpp and platformio.ini files it's time to build the -device application. Within PlatformIO the "Build" button is the check-mark found -within the bottom status bar. Clicking on this button should start the build -process. - -#### Inspect the build results - -The build output results can be found within the "Terminal View" typically found -at the bottom of the VSCode window. Verify the build completed successfully. - -#### Possible Arduino to PlatformIO porting issues - -When porting Arduino sketches to PlatformIO you may find errors such as -undefined functions. These may be functions that are called by setup() or loop() -or other custom functions prior to them being defined. This is a side effect of -the different C version of C compilers used with PlatformIO vs Arduino. In this -instance we just need to define the function prototype before the function is -actually called. Another compatibility issue is that unlike Arduino IDE, you -must include Arduino.h at the start of your C file if you are using Arduino -defined constructs. Generally the compatibility issues are minor. - -#### Upload Binary to target device - -If the build process completed successfully, upload the binary to the target -device via the "Upload" (right pointing arrow) button found on the status bar. - -``` -NOTE: - With some target devices PlatformIO will - automatically close any open comm port connection. - An upload error may occur if for some reason the - comm port cannot be closed. If this is the case you - must manually close down the terminal emulator's - connection before retrying the upload. -``` - - - -Successful upload example, your results will vary. - -#### Viewing Target Device Serial Output - -When your firmware update completes, the board will reset, and begin by joining -the network. The built-in PlatformIO Serial Monitor or any other virtual serial -terminal emulator can be used to view the serial debug output from the board. - -If the built-in serial monitor is selected PlatformIO will attempt to connect to -it automatically. If using another terminal emulator refer to the Devices view -as mentioned above to determine which comm port your device is connected to. - -To open the serial monitor click on the "Serial Monitor" button within the -status bar. - - - -You should begin to see output similar to below. This example uses VSCode's -builtin virtual terminal emulator. - - - -#### Helium Console Uplinks - -Now let's head back to the [Helium Console](https://console.helium.com/) and -login to your account. Once logged in select the "Devices" item on the left, -then select the target device previously created. Scroll down a bit on the -device page and you should see something similar to the screenshot below. - - - -Activation messages are those seen when the device first attempts to join the -network. -Downlink messages are those delivered from the network to your target device. -Uplink messages are those messages delivered from your target device to the -Helium network. - -Congratulations! You have just transmitted data on the Helium network! The next -step is to learn how to use your device data to build applications, visit our -integration docs [here](/use-the-network/console/integrations). - -### Device Application Code Debugging with PlatformIO - -If, as is frequently the case, your application misbehaves VSCode/PlatformIO -does support board level debugging via various debug probes/interfaces. A -general debug discussion can be found -[here](https://docs.platformio.org/en/latest/plus/debugging.html) or debug probe -specific discussion -[here](https://docs.platformio.org/en/latest/plus/debugging.html#tools-debug-probes). -PlatformIO will attempt to seamlessly support your projects defined target board -for debugging but with the vast number of target boards, not all are supported -out of the box. - -PlatformIO supports out of the box debugging with the WisBlock developer board -via the SWD ST-Link protocol. To enable debugging add the following to your -project platformio.ini file: - -``` -build_type = debug -upload_protocol = stlink -debug_tool = stlink -``` - -The ST-Link probe should connect to the SWDIO, SWCLK and GND pins of the Single -Wire Debug pins as marked on the WisBlock core board. Complete SWD/ST-Link -operation is out of scope for this guide. - -Then you can utilize the PlatformIO integrated debugging. - - - -Example WisBlock Starter Kit connected to ST Discovery configured for ST-Link -support diff --git a/docs/use-the-network/devices/development/rakwireless/wisblock-4631/wisblock-4631.mdx b/docs/use-the-network/devices/development/rakwireless/wisblock-4631/wisblock-4631.mdx deleted file mode 100644 index 54ee931cd..000000000 --- a/docs/use-the-network/devices/development/rakwireless/wisblock-4631/wisblock-4631.mdx +++ /dev/null @@ -1,66 +0,0 @@ ---- -id: wisblock-4631 -hide_title: true -title: Wisblock Starter Kit RAK4631 -description: - The RAK4631 WisBlock Starter Kit delivers a powerful Nordic nRF52840 MCU with - Bluetooth 5 paired to the latest LoRa® transceivers from Semtech, the SX126x - series. -image: img/use-the-network/devices/development/rakwireless/wisblock-starter-kit.png -sidebar_label: Wisblock Starter Kit RAK4631 -slug: /use-the-network/devices/development/rakwireless/wisblock-4631 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wisblock Starter Kit RAK4631 - -The RAK4631 WisBlock Started Kit delivers a powerful Nordic nRF52840 MCU with -Bluetooth 5 paired to the latest LoRa® transceivers from Semtech, the SX126x -series. - - - -## Introduction - -Here you will find one or more sample PlatformIO embedded projects designed to -transmit LoRaWAN packets using a -[RAK Wireless WisBlock Starter Kit](https://store.rakwireless.com/products/wisblock-starter-kit). -The starter kit is just that, a base developer board that can have multiple -combinations of expansion boards added to it. The full WisBlock offering can be -seen [here](https://store.rakwireless.com/pages/wisblock). - -### Resources - -[WisBlock Product Page](https://store.rakwireless.com/products/wisblock-starter-kit) -[WisBlock Documentation](https://docs.rakwireless.com/Product-Categories/WisBlock/) -[US Retailer - Parley Labs](https://shop.parleylabs.com) - -### Firmware Quickstart Guides - -- [Arduino Guide](/use-the-network/devices/development/rakwireless/wisblock-4631/arduino) -- [PlatformIO Guide](/use-the-network/devices/development/rakwireless/wisblock-4631/platformio) - -### Video Guides - -- [Community Tutorial Video](https://youtu.be/J2f_AVx-WsE) - -### Specifications - -#### Dimensions: - -- width: 30 mm -- length: 60 mm - -#### Weight: - -- 35 grams - -#### Battery: - -- type: Li-Ion / Li-Po, 1024 mAh minimum capacity, JST connector -- replaceable: True diff --git a/docs/use-the-network/devices/development/seeed-studio/loramodule-e5-devkit.mdx b/docs/use-the-network/devices/development/seeed-studio/loramodule-e5-devkit.mdx deleted file mode 100644 index 2a277bb85..000000000 --- a/docs/use-the-network/devices/development/seeed-studio/loramodule-e5-devkit.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: loramodule-e5-devkit -hide_title: true -title: LoRa-E5 Development Kit - based on LoRa-E5 STM32WLE5JC -description: - LoRa-E5 Development Kit consists of a LoRa-E5 Dev Board, an - antenna(EU868/US915), a USB type C cable, and a 2*AA 3V Battery Holder. - LoRa-E5 Dev Board embedded with LoRa-E5 STM32WLE5JC Module that supports - LoRaWAN protocol on global frequency band. It is user-friendly since it leads - out full GPIOs of LoRa-E5 supporting various data protocols and interfaces - including RS-485, Grove, male/female headers, etc. It would be a perfect - choice for fast testing and rapid prototyping of your LoRa IoT projects. -image: img/use-the-network/devices/development/seeed-studio/loramodule-e5.jpg -sidebar_label: LoRa-E5 Development Kit -slug: /use-the-network/devices/development/seeed-studio/loramodule-e5-devkit ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LoRa-E5 Development Kit - -LoRa-E5 Development Kit consists of a LoRa-E5 Dev Board, an -antenna(EU868/US915), a USB type C cable, and a 2\*AA 3V Battery Holder. LoRa-E5 -Dev Board embedded with LoRa-E5 STM32WLE5JC Module that supports LoRaWAN -protocol on global frequency band. It is user-friendly since it leads out full -GPIOs of LoRa-E5 supporting various data protocols and interfaces including -RS-485, Grove, male/female headers, etc. It would be a perfect choice for fast -testing and rapid prototyping of your LoRa IoT projects. - - - -### Resources - -- [Product Page](https://www.seeedstudio.com/LoRa-E5-Dev-Kit-p-4868.html) -- [Datasheet](https://files.seeedstudio.com/products/113990934/LoRa-E5%20Dev%20Board%20v1.0.pdf) -- [Reseller - Seeed](https://www.seeedstudio.com/LoRa-E5-Dev-Kit-p-4868.html) - -### Specifications - -#### Dimensions: - -- width: 12 mm -- length: 12 mm -- height: 2.5 mm diff --git a/docs/use-the-network/devices/development/seeed-studio/loramodule-e5-grove.mdx b/docs/use-the-network/devices/development/seeed-studio/loramodule-e5-grove.mdx deleted file mode 100644 index eca249fb5..000000000 --- a/docs/use-the-network/devices/development/seeed-studio/loramodule-e5-grove.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -id: loramodule-e5-grove -hide_title: true -title: LoRa-E5 Grove -description: - Grove LoRa-E5 embedded with LoRa-E5 STM32WLE5JC, powered by ARM Cortex M4 - ultra-low-power MCU core and LoRa SX126x, is an easy-to-use wireless radio - module, supporting LoRaWAN protocol on the EU868 & US915 frequency and (G)FSK, - BPSK, (G)MSK, LoRa modulations. -image: img/use-the-network/devices/development/seeed-studio/loramodule-e5.jpg -sidebar_label: LoRa-E5 Grove -slug: /use-the-network/devices/development/seeed-studio/loramodule-e5-grove ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LoRa-E5 Grove - -Grove LoRa-E5 embedded with LoRa-E5 STM32WLE5JC, powered by ARM Cortex M4 -ultra-low-power MCU core and LoRa SX126x, is an easy-to-use wireless radio -module, supporting LoRaWAN protocol on the EU868 & US915 frequency and (G)FSK, -BPSK, (G)MSK, LoRa modulations. - - - -### Resources - -- [Product Page](https://www.seeedstudio.com/Grove-LoRa-E5-STM32WLE5JC-p-4867.html) -- [Datasheet](https://files.seeedstudio.com/products/113020091/Grove%20-%20LoRa%20-E5%20v1.0.pdf) -- [Reseller - Seeed](https://www.seeedstudio.com/Grove-LoRa-E5-STM32WLE5JC-p-4867.html) - -### Specifications - -#### Dimensions: - -- width: 12 mm -- length: 12 mm -- height: 2.5 mm diff --git a/docs/use-the-network/devices/development/seeed-studio/loramodule-e5-mini.mdx b/docs/use-the-network/devices/development/seeed-studio/loramodule-e5-mini.mdx deleted file mode 100644 index c23976a59..000000000 --- a/docs/use-the-network/devices/development/seeed-studio/loramodule-e5-mini.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -id: loramodule-e5-mini -hide_title: true -title: LoRa-E5 mini (STM32WLE5JC) Dev Board -description: - LoRa-E5 mini is a compacted-sized dev board suitable for the rapid testing and - building of small-size LoRa device and application prototyping. LoRa-E5 mini - is embedded with and leads out full GPIOs of LoRa-E5 STM32WLE5JC. It has rich - interfaces including UART, ADC, SPI, IIC,etc. Supporting LoRaWAN protocol and - global frequency, LoRa-E5 mini is able to achieve a transmission range of up - to 10 km in open area and ultra-low power consumption. -image: img/use-the-network/devices/development/seeed-studio/loramodule-e5-mini.jpg -sidebar_label: LoRa-E5 mini -slug: /use-the-network/devices/development/seeed-studio/loramodule-e5-mini ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LoRa-E5 mini - -LoRa-E5 mini is a compacted-sized dev board suitable for the rapid testing and -building of small-size LoRa device and application prototyping. LoRa-E5 mini is -embedded with and leads out full GPIOs of LoRa-E5 STM32WLE5JC. It has rich -interfaces including UART, ADC, SPI, IIC,etc. Supporting LoRaWAN protocol and -global frequency, LoRa-E5 mini is able to achieve a transmission range of up to -10 km in open area and ultra-low power consumption. - - - -### Resources - -- [Product Page](https://www.seeedstudio.com/LoRa-E5-mini-STM32WLE5JC-p-4869.html) -- [Datasheet](https://files.seeedstudio.com/products/113990939/LoRa-E5%20mini%20v1.0.pdf) -- [Reseller - Seeed](https://www.seeedstudio.com/LoRa-E5-mini-STM32WLE5JC-p-4869.html) - -### Specifications - -#### Dimensions: - -- width: 12 mm -- length: 12 mm -- height: 2.5 mm diff --git a/docs/use-the-network/devices/development/seeed-studio/loramodule-e5.mdx b/docs/use-the-network/devices/development/seeed-studio/loramodule-e5.mdx deleted file mode 100644 index 3f88cf30b..000000000 --- a/docs/use-the-network/devices/development/seeed-studio/loramodule-e5.mdx +++ /dev/null @@ -1,44 +0,0 @@ ---- -id: loramodule-e5 -hide_title: true -title: LoRa-E5 STM32WLE5JC Module -description: - LoRa-E5 LoRaWAN module is designed with ST system-level package chip - STM32WLE5JC, ARM Cortex M4 ultra-low-power MCU and LoRa SX126X. It supports - (G)FSK mode and LoRa. 62.5kHz, 125kHz, 250kHz, and 500kHz bandwidth can be - used in LoRa® mode, making it suitable for the design of various IoT nodes, - supporting EU868 and US915. -image: img/use-the-network/devices/development/seeed-studio/loramodule-e5.jpg -sidebar_label: LoRa-E5 STM32WLE5JC Module -slug: /use-the-network/devices/development/seeed-studio/loramodule-e5 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LoRa-E5 STM32WLE5JC Module - -LoRa-E5 LoRaWAN module is designed with ST system-level package chip -STM32WLE5JC, ARM Cortex M4 ultra-low-power MCU and LoRa SX126X. It supports -(G)FSK mode and LoRa. 62.5kHz, 125kHz, 250kHz, and 500kHz bandwidth can be used -in LoRa® mode, making it suitable for the design of various IoT nodes, -supporting EU868 and US915. - - - -### Resources - -- [Product Page](https://www.seeedstudio.com/LoRa-E5-Wireless-Module-p-4745.html) -- [Datasheet](https://files.seeedstudio.com/products/317990687/res/LoRa-E5%20module%20datasheet_V1.0.pdf) -- [Reseller - Seeed](https://www.seeedstudio.com/LoRa-E5-Wireless-Module-p-4745.html) - -### Specifications - -#### Dimensions: - -- width: 12 mm -- length: 12 mm -- height: 2.5 mm diff --git a/docs/use-the-network/devices/development/sparkfun/pro-rf/arduino.mdx b/docs/use-the-network/devices/development/sparkfun/pro-rf/arduino.mdx deleted file mode 100644 index b5c45f809..000000000 --- a/docs/use-the-network/devices/development/sparkfun/pro-rf/arduino.mdx +++ /dev/null @@ -1,270 +0,0 @@ ---- -id: arduino -hide_title: true -sidebar_label: Arduino -slug: /use-the-network/devices/development/sparkfun/pro-rf/arduino ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Sparkfun Pro RF Arduino Guide - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## Introduction to Guide - -:::important - -Before we begin, please make sure you've followed the steps from this guide, -which goes over some initial setup steps. - -::: - -## Objective and Requirements - -In this guide, you will learn: - -- How to setup your environment -- How to program a basic application that will send packets over the Helium - Network -- Verify real-time packets sent to the Helium Console via Hotspot that's in - range - -For this example, you will need the following: - -### Hardware - -- [Sparkfun Pro RF - LoRa](https://www.sparkfun.com/products/14916) -- Micro USB Type B Cable - - [Example](https://www.amazon.com/AmazonBasics-Male-Micro-Cable-Black/dp/B0719H12WD/ref=sr_1_2_sspa?) -- Soldering Iron -- Small gauge wire - -### Software - -- [Arduino software \(IDE\)](https://www.arduino.cc/en/Main/Software) -- [Helium Console](https://console.helium.com/) - -## Hardware Setup - -This step will cover adding an antenna and closing the LoRaWAN jumpers on this -board. - -### Adding the Antenna - -You have two options for adding an antenna on this board. - -**U.FL Antenna:** Connect any 915Mhz compatible antenna, for instance, -[this ](https://www.mouser.com/ProductDetail/Anaren/66089-0906?qs=sGAEpiMZZMuBTKBKvsBmlGlvlFGR4gdSgkIgGKwINqg%3D)small, -low cost antenna, to the U.FL port shown in the image below. - - - -**Wire Antenna:** Solder a short wire\(78mm in length for Americas\) to the -pin-out as shown below. - - - -### Closing the LoRaWAN Jumpers - -In order to fully communicate with the LoRa radio transceiver on the board, -you'll need to close two jumpers on the underside shown below. - - - -## Software Setup - -### Getting the Arduino IDE - -Download and install the latest version of -[Arduino IDE](https://www.arduino.cc/en/Main/Software) for your preferred OS. - -- [Windows](https://www.arduino.cc/en/Guide/Windows) -- [Linux](https://www.arduino.cc/en/Guide/Linux) -- [Mac OSX](https://www.arduino.cc/en/Guide/MacOSX) - -### Arduino Board Support - -The Sparkfun Pro RF requires two Arduino board support packages. Follow the -instructions below to install both. - -#### SAMD Boards \(32-bits ARM Cortex-M0+\) - -To install, open your Arduino IDE: - -1. Navigate to \(**Tools > Boards > Boards Manager...\)** -2. Search for **SAMD Boards \(32-bits ARM Cortex-M0+\)** -3. Select the newest version and click Install - - **SparkFun SAMD Boards** - -#### SparkFun SAMD Boards - -To install, open your Arduino IDE: - -1. Navigate to **\(File > Preferences\), \(Arduino > Preferences\) on - MacOS.** -2. Find the section at the bottom called **Additional Boards Manager URLs:** - - - -1. Add this URL in the text box: - -```text -https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json -``` - -1. Close the Preferences windows - -Next, to install this board support package: - -1. Navigate to \(**Tools > Boards > Boards Manager...\)** -2. Search for **SparkFun SAMD Boards** -3. Select the newest version and click Install - -### Arduino Library - -To communicate with Helium's LoRaWAN network, we'll need to install an Arduino -library. - -To install, open your Arduino IDE: - -1. Navigate to Library Manager \(**Sketch > Include Library > Manage - Libraries**\). -2. In the search box, type **IBM LMIC framework** into the search, select the - version shown below, and click Install. - - - -#### Update IBM LMIC framework config.h - -This library requires that a config file be setup properly. After you have -installed the `IBM LMIC framework` library, navigate to it's directory on your -operating system found below. Next, replace the `config.h` file in this -directory with this -[config.h](https://github.com/helium/longfi-arduino/blob/master/Sparkfun-Pro-RF/longfi-us915/config.h) -file. - -``` -linux: /home/{user}/Arduino/libraries/IBM\_LMIC\_framework/src/lmic -windows: Documents/Arduino/libraries/IBM\_LMIC\_framework/src/lmic -mac os: Documents/Arduino/libraries/IBM\_LMIC\_framework/src/lmic -``` - -### Programming **Example Sketch** - -Now that we have the required Arduino board support and library installed, lets -program the board with the provided example sketch. - -To create a new Arduino sketch, open your Arduino IDE, \(**File > New\).** -Next, replace the template sketch with the sketch found -[here](https://github.com/helium/longfi-arduino/blob/master/Sparkfun-Pro-RF/longfi-us915/longfi-us915.ino), -copy and paste the entirety of it. - -Next we'll need to fill in the AppEUI, DevEUI, and AppKey, in the sketch, which -you can find on the device details page on Console. Be sure to use the -formatting buttons to match the endianess and formatting required for the -sketch, shown below. - - - -At the top of the sketch, replace the three **FILL_ME_IN** fields, with the -matching field from Console, example shown below. - - - -### Selecting Board - -Next, we need to select the correct board to build for in the Arduino IDE. -Navigate to \(**Select Tools > Board: > SparkFun SAMD21 Pro RF\).** - -### Enter Bootloader Mode - -Next, we need to place the board into bootloader mode, which allows us to update -it with new firmware. To do this, first plug the device into your computer, make -sure the power switch is turned on \(you should see a red LED on\). Next, -quickly double click the reset push button on the side of the board, you should -see a blue LED come on now too. If you see this then you have successfully -entered bootloader mode. - -### Selecting Port - -We're almost ready to upload our sketch, the very last step is to select the -correct Serial port in the Arduino IDE. Navigate to \(**Tools > Port: -Sparkfun SAMD21 Pro RF**\). You will also see either **COM\# or /dev/ttyACM\#** -depending on whether you are on Windows, Mac, or Linux. If you do not see a -port, please visit the Drivers section in -[Sparkfun's guide](https://learn.sparkfun.com/tutorials/sparkfun-samd21-pro-rf-hookup-guide?_ga=2.148378999.1172134851.1586114454-289367592.1582349414&_gac=1.242421430.1585837307.EAIaIQobChMI86GEgfjJ6AIVBQF9Ch0mpwyeEAEYASAAEgLFn_D_BwE#hardware-overview) -to make sure you have what's needed for your operating system. - -### Upload Sketch - -We're finally ready to upload our sketch to the board. In the Arduino IDE, click -the right arrow button, or navigate to \(**Sketch > Upload\),** to build and -upload your new firmware to the board. You should see something similar to the -image below at the bottom of your Arduino IDE, when the upload is successful. - - - -### Viewing Serial Output - -When your firmware update completes, the board will reset, and begin by joining -the network. Let's use the Serial Monitor in the Arduino IDE to view the output -from the board. We first need to select the serial port again, but this time it -will be a **different port** than the one we selected to communicate with the -bootloader. Once again, navigate to \(**Tools > Port: Sparkfun SAMD21 Pro -RF**\), but make sure the serial device, either COM\# or ttyACM\#, is different! -Next navigate to \(**Tools > Serial Monitor**\), you should begin to see -output similar to below. - - - -Now let's head back to [Helium Console](https://console.helium.com) and look at -our device page, you should see something similar to the screenshot below. - - - -Congratulations! You have just transmitted data on the Helium network! The next -step is to learn how to use your device data to build applications, visit our -Integrations docs [here](/use-the-network/console/integrations). diff --git a/docs/use-the-network/devices/development/sparkfun/pro-rf/pro-rf.mdx b/docs/use-the-network/devices/development/sparkfun/pro-rf/pro-rf.mdx deleted file mode 100644 index ec1538bd7..000000000 --- a/docs/use-the-network/devices/development/sparkfun/pro-rf/pro-rf.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -id: pro-rf -hide_title: true -sidebar_label: Sparkfun Pro RF -slug: /use-the-network/devices/development/sparkfun/pro-rf ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Sparkfun Pro RF - - - -## Introduction - -The SparkFun Pro RF is a LoRa®-enabled wireless board that marries a SAMD21 and -a long-range RFM95W to make a compact and easy-to-use IoT Arduino board. With -its fast MCU and excellent point to point data transmission in the 915MHz ISM -band with LoRa Capabilities, the Pro RF is a great choice for anyone interested -or experienced in utilizing long range data communication. - -### Resources - -- [Product Page](https://www.sparkfun.com/products/14916) -- [Manual](https://learn.sparkfun.com/tutorials/sparkfun-samd21-pro-rf-hookup-guide?_ga=2.165621823.1036802692.1607713936-859284285.1605745645#introduction) -- [Schematic ](https://cdn.sparkfun.com/assets/f/f/8/e/f/SAMD21_Pro_RF_v11_Schematic.pdf) - -### Firmware Quickstart Guides - -[Arduino Guide](/use-the-network/devices/development/sparkfun/pro-rf/arduino) diff --git a/docs/use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc1.mdx b/docs/use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc1.mdx deleted file mode 100644 index e4370dace..000000000 --- a/docs/use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc1.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: nucleo-wl55jc1 -hide_title: true -title: NUCLEO-WL55JC1 -description: - NUCLEO-WL55JC1 high-band development board with temperature sensor and - controllable LEDs -image: img/use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc.jpg -sidebar_label: NUCLEO-WL55JC1 -slug: /use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc1 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## NUCLEO-WL55JC1 - -NUCLEO-WL55JC1 high-band development board with temperature sensor and -controllable LEDs - - - -### Resources - -- [Product Page](https://www.st.com/en/evaluation-tools/nucleo-wl55jc.html) -- [Datasheet](https://www.st.com/resource/en/data_brief/nucleo-wl55jc.pdf) -- [Reseller - ARROW](https://www.arrow.com/en/products/nucleo-wl55jc1/stmicroelectronics) -- [Reseller - RUTRONIK](https://www.rutronik24.com/product/st/nucleo-wl55jc1/14201387.html) -- [Video](https://www.youtube.com/watch?v=ZFtIlLbDXlo) - -### Specifications - -#### Sensors: - -- temperature -- light - -#### Dimensions: - -- width: 70 mm -- length: 64.5 mm -- height: 19 mm - -#### Weight: - -- 34 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc2.mdx b/docs/use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc2.mdx deleted file mode 100644 index 29b004118..000000000 --- a/docs/use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc2.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: nucleo-wl55jc2 -hide_title: true -title: NUCLEO-WL55JC2 -description: - NUCLEO-WL55JC2 low-band development board with temperature sensor and - controllable LEDs -image: img/use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc.jpg -sidebar_label: NUCLEO-WL55JC2 -slug: /use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc2 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## NUCLEO-WL55JC2 - -NUCLEO-WL55JC2 low-band development board with temperature sensor and -controllable LEDs - - - -### Resources - -- [Product Page](https://www.st.com/en/evaluation-tools/nucleo-wl55jc.html) -- [Datasheet](https://www.st.com/resource/en/data_brief/nucleo-wl55jc.pdf) -- [Reseller - ARROW](https://www.arrow.com/en/products/nucleo-wl55jc1/stmicroelectronics) -- [Reseller - RUTRONIK](https://www.rutronik24.com/product/st/nucleo-wl55jc1/14201387.html) -- [Video](https://www.youtube.com/watch?v=ZFtIlLbDXlo) - -### Specifications - -#### Sensors: - -- temperature -- light - -#### Dimensions: - -- width: 70 mm -- length: 64.5 mm -- height: 19 mm - -#### Weight: - -- 34 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/arduino.mdx b/docs/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/arduino.mdx deleted file mode 100644 index 25adad123..000000000 --- a/docs/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/arduino.mdx +++ /dev/null @@ -1,201 +0,0 @@ ---- -id: arduino -hide_title: true -sidebar_label: Arduino -slug: /use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/arduino ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## ST B-L072Z-LRWAN1 Arduino Guide - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## Introduction to Guide - -:::important - -Before we begin, please make sure you've followed the steps from this guide, -which goes over some initial setup steps. - -::: - -## Objective and Requirements - -In this guide, you will learn: - -- How to setup your environment -- How to build and program a basic application that will send packets over the - Helium Network -- Verify real-time packets sent to the Helium Console via Hotspot that's in - range - -For this example, you will need the following: - -### Hardware - -- [STMicroelectronics B-L072Z-LRWAN1 Discovery kit](https://www.st.com/en/evaluation-tools/b-l072z-lrwan1.html) -- Micro USB Type B Cable - - [Example](https://www.amazon.com/AmazonBasics-Male-Micro-Cable-Black/dp/B0719H12WD/ref=sr_1_2_sspa?) - -### Software - -- [Arduino software \(IDE\)](https://www.arduino.cc/en/Main/Software) -- [Arduino Core for STM32L0](https://github.com/GrumpyOldPizza/ArduinoCore-stm32l0) -- [Helium Console](https://console.helium.com/) - -## Hardware Setup - -To start you’ll just need to install the included antenna. - -We'll be using the ST-Link debugger on the Discovery board, so you'll want to -connect the micro-USB B connector to the micro-USB port labeled -`CN7 USB STLINK`. - - - -If you will be running the device using the AAA battery supply, you will need to -remove a resistor on the underside of the board. We can just move it over to one -of the pads and leave it attached for later. **You don't have to worry about -this right now, as we will be powering the board off the MicroUSB connection.** - - - -### Required Driver \(Windows Only\) - -Download driver -[here](https://www.st.com/en/development-tools/stsw-link009.html). - -That’s it for the hardware setup! Next we will setup your environment. - -### Getting the Arduino IDE - -Download and install the latest version of -[Arduino IDE](https://www.arduino.cc/en/Main/Software) for your preferred OS. - -- [Windows](https://www.arduino.cc/en/Guide/Windows) -- [Linux](https://www.arduino.cc/en/Guide/Linux) -- [Mac OSX](https://www.arduino.cc/en/Guide/MacOSX) - -### STM32L0 Core Support & Libraries - -The ST B-L072Z-LRWAN1 requires one package to be installed follow the -instructions below. - -#### Arduino Core for STM32L0 - -To install, open your Arduino IDE: - -1. Navigate to **\(File > Preferences\), \(Arduino > Preferences\) on - MacOS.** -2. Find the section at the bottom called **Additional Boards Manager URLs:** - - - -1. Add this URL in the text box: - -```text -https://grumpyoldpizza.github.io/ArduinoCore-stm32l0/package_stm32l0_boards_index.json -``` - -1. Close the Preferences windows - -Next, to install this board support package: - -1. Navigate to \(**Tools > Boards > Boards Manager...\)** -2. Search for **Tlera Corp STM32L0 Boards** -3. Select the newest version and click Install - -### Programming **Example Sketch** - -Now that we have the required Arduino board support and libraries installed, -lets program the board with the provided example sketch. - -To create a new Arduino sketch, open your Arduino IDE, \(**File > New\).** -Next, replace the template sketch with the sketch found -[here](https://raw.githubusercontent.com/helium/longfi-arduino/master/ST-B-L072Z-LRWAN1/longfi-us915/longfi-us915.ino), -copy and paste the entirety of it. - -Next we'll need to fill in the AppEUI, DevEUI, and AppKey, in the sketch, which -you can find on the device details page on Console. For this sketch you do not -need to modify the formatting of the EUIs and Key at all, simply copy and paste -them as is. - - - -At the top of the sketch, replace the three **FILL_ME_IN** fields, with the -matching field from Console, example shown below. - - - -### Selecting Board - -Next, we need to select the correct board to build for in the Arduino IDE. -Navigate to \(**Select Tools > Board: > B-L072Z-LRWAN1\).** - -### Selecting Port - -We're almost ready to upload our sketch, the very last step is to select the -correct Serial port in the Arduino IDE. Navigate to \(**Tools > Port: COM\# -or /dev/ttyACM\#** **or usbmodem\)** depending on whether you are on Windows, -Mac, or Linux. - -### Upload Sketch - -We're finally ready to upload our sketch to the board. In the Arduino IDE, click -the right arrow button, or navigate to \(**Sketch > Upload\),** to build and -upload your new firmware to the board. You should see something similar to the -image below at the bottom of your Arduino IDE, when the upload is successful. - - - -### Viewing Serial Output - -When your firmware update completes, the board will reset, and begin by joining -the network. Let's use the Serial Monitor in the Arduino IDE to view the output -from the board. Navigate to \(**Tools > Serial Monitor**\), you should begin -to see output similar to below. - - - -Now let's head back to [Helium Console](https://console.helium.com) and look at -our device page, you should see something similar to the screenshot below. - - - -Congratulations! You have just transmitted data on the Helium network! The next -step is to learn how to use your device data to build applications, visit our -Integrations docs [here](/use-the-network/console/integrations). diff --git a/docs/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/platformio.mdx b/docs/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/platformio.mdx deleted file mode 100644 index 08d5ced5c..000000000 --- a/docs/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/platformio.mdx +++ /dev/null @@ -1,297 +0,0 @@ ---- -id: platformio -hide_title: true -sidebar_label: PlatformIO -slug: /use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/platformio ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## ST B-L072Z-LRWAN1 PlatformIO Guide - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## Introduction - -:::important - -Before we begin, please make sure you've followed the steps from this guide, -which goes over some initial setup steps. - -::: - -### Objective and Requirements - -In this guide, you will learn: - -- What hardware and software are required -- Where to find additional WisBlock documentation as well as links to hardware - retail outlets -- Software required -- Where to find sample embedded application projects - -For these examples, you will need the following: - -### Hardware - -- [STMicroelectronics B-L072Z-LRWAN1 Discovery kit](https://www.st.com/en/evaluation-tools/b-l072z-lrwan1.html) -- Micro USB Type B Cable - - [Example](https://www.amazon.com/AmazonBasics-Male-Micro-Cable-Black/dp/B0719H12WD/ref=sr_1_2_sspa?) - -### Software - -The following products are required. Refer to the -[Getting started with Helium and PlatformIO](/use-the-network/devices/development/helium-platformio/helium-platformio-gettingstarted) -guide for details. - -- [VSCode \(IDE)](https://code.visualstudio.com/) - - [PlatformIO \(VScode Extension)](https://platformio.org/) -- [Helium Console](https://www.helium.com/console) - -### PlatformIO - An Easier Way to Develop Embedded Applications - -[PlatformIO ](https://platformio.org/)is a cross-platform, cross-architecture, -multiple framework, professional tool for embedded systems engineers and for -software developers who write applications for embedded products. - -[PlatformIO ](https://platformio.org/)provides developers with a modern -integrated development environment -\([Cloud & Desktop IDE](https://docs.platformio.org/en/latest/integration/ide/index.html#ide)\) -that works cross-platform, supports many different software development kits -\(SDKs\) or -[Frameworks](https://docs.platformio.org/en/latest/frameworks/index.html#frameworks), -and includes sophisticated debugging -\([PIO Unified Debugger](https://docs.platformio.org/en/latest/plus/debugging.html#piodebug)\), -unit testing -\([PIO Unit Testing](https://docs.platformio.org/en/latest/plus/unit-testing.html#unit-testing)\), -automated code analysis -\([PIO Check](https://docs.platformio.org/en/latest/plus/pio-check.html#piocheck)\), -and remote management -\([PIO Remote](https://docs.platformio.org/en/latest/plus/pio-remote.html#pioremote)\). -It is architected to maximize flexibility and choice by developers, who can use -either graphical or command line editors -\([PlatformIO Core \(CLI\)](https://docs.platformio.org/en/latest/core/index.html#piocore)\), -or both. - -If you are used to developing using the Arduino IDE but constantly feel -constrained by the environment, you are going to love what -[PlatformIO ](https://platformio.org/)opens up for you. - - -The many widget views available within PlatformIO. -

- -This guide will walk through installing PlatformIO and deploying a Helium -Arduino program on the [ST Discovery Development Kit](../devices/devkit/). Let's -do it. - -### Installing PlatformIO - -[Download ](https://code.visualstudio.com/)and install Microsoft's Visual Studio -Code, PlatformIO IDE is built on top of it. - -{% embed url="https://code.visualstudio.com/\#alt-downloads" %} - -1. Open VSCode Extension Manager -2. Search for official PlatformIO IDE extension -3. Install PlatformIO IDE. - \([https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide](https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide)\) - - - -It is highly recommended to give the quick-start guide a read. It will help you -navigate the new interface. -[https://docs.platformio.org/en/latest/integration/ide/vscode.html\#quick-start](https://docs.platformio.org/en/latest/integration/ide/vscode.html#quick-start) - -In this tutorial, I will be using the -[Helium Developer Kit](https://developer.helium.com/devices/devkit). - - - -Once PlatformIO is installed, you should be welcomed to VSCode with the -following "PIO Home" screen: - - - -### Starting a new PlatformIO Project - -Let's click on "New Project" to get started. - -Enter a project name and select the following board: - - - -We will be using the Arduino Framework, so go ahead and click "Finish". - -This may take a bit on the first run, but you should soon be left with a project -that looks as such: - - - -If we look into `src/main.cpp`, we see the familiar empty Arduino sketch -structure: - - - -Let's take a second here to look at the `platformio.ini` file in the root of our -new project: - - - -Notice that we specify the environment that we are going to be developing in -using the following variables: - -- platform -- board -- framework - -At this point, you may click the **PlatformIO Build** checkbox in the status -bar, and the project will build \(just don't expect it to do anything yet\): - - - -You may notice something unexpected here \(but very cool, and we will get into -that here in just a bit\): - - - - - -Above, PlatformIO "knew" what platform we were building on and installed what -was necessary. This will come in handy, as we can add libraries into our -**`platformio.ini`** file, and they will be added in at build time. - -If, on the **PIO Home** page, you select the "Devices" icon on the left, you -will see the physical devices that are connected to your development machine, -and what ports they are connected to: - - - -Notice that under **Description**, it says we are running "JLink" rather than -"ST-Link". If we were to attempt to flash the board at this point, we would get -a failure that looked like this: - -```text -Configuring upload protocol... -AVAILABLE: blackmagic, jlink, mbed, stlink -CURRENT: upload_protocol = stlink -Uploading .pio\build\disco_l072cz_lrwan1\firmware.elf -xPack OpenOCD, 64-bit Open On-Chip Debugger 0.10.0+dev (2019-07-17-11:28) -Licensed under GNU GPL v2 -For bug reports, read - http://openocd.org/doc/doxygen/bugs.html -debug_level: 1 - -srst_only separate srst_nogate srst_open_drain connect_deassert_srst - -Error: open failed -in procedure 'program' -** OpenOCD init failed ** -shutdown command invoked - -*** [upload] Error 1 -===================================================================================== [FAILED] Took 16.63 seconds ===================================================================================== -The terminal process terminated with exit code: 1 - -``` - -What happened here? Well, we have this board set up to use a `SEGGER JTAG` -interface rather than the `ST-Link` interface that is integrated into the -Discovery board. There are a number of advantages of this approach, and I would -_highly_ suggest doing this. It will make your development iteration process -much faster. - -Luckily, `SEGGER` has provided a method to \(non-destructively\) replace the -ST-Link on our board with a JTAG interface. - - - -[Head here](https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board/) -to walk through the simple process. - -We then need to add one additional line to our `platformio.ini` file to let -PlatformIO know that we will be using a JTAG interface to our board \(written as -`jlink` in your file\): - - - -The next time we build and attempt to upload our project, we will be presented -with the following Terms of Use: - - - -Accept this agreement, and you should see the following popup: - - - -And there you have it. At this point, we have successfully programmed an empty -sketch onto our Helium Developer Kit using PlatformIO! Check out the -[Helium LongFi PlatformIO repo](https://github.com/helium/longfi-platformio) for -some example programs to get you started. - -**Go forth and build magical things.** diff --git a/docs/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/st-b-l072z-lrwan1.mdx b/docs/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/st-b-l072z-lrwan1.mdx deleted file mode 100644 index 406a49d90..000000000 --- a/docs/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/st-b-l072z-lrwan1.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -id: st-b-l072z-lrwan1 -hide_title: true -sidebar_label: ST B-L072Z-LRWAN1 -slug: /use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## ST B-L072Z-LRWAN1 - - - -The ST B-L072Z-LRWAN1 LoRaWAN development board includes the popular -[Murata CMWX1ZZABZ-091](https://wireless.murata.com/type-abz-078.html) module, -which is powered by a -[STM32L072CZ ](https://www.st.com/en/microcontrollers-microprocessors/stm32l072cz.html)microcontroller -and -[SX1276 ](https://www.semtech.com/products/wireless-rf/lora-transceivers/sx1276)transceiver. -The board also includes a fully featured ST-LINK/V2-1 embedded debug tool -interface, LEDs, push-buttons, antenna, Arduino™ Uno V3 connectors and USB OTG -connector in Micro-B format. Paired with the ST X-NUCLEO-IKS01A3 Sensor -Expansion Board, this kit will enable you to rapidly develop and test your end -device applications on the Helium Network. To start transmitting data with the -board, please see one of the guides below. - -### Resources - -- [Product Page](https://www.st.com/en/evaluation-tools/b-l072z-lrwan1.html) -- [Manual](https://www.st.com/resource/en/user_manual/dm00352032-getting-started-with-ultralowpower-stm32l0-and-lora-discovery-kit-stmicroelectronics.pdf) -- [Schematic ](https://www.st.com/content/ccc/resource/technical/layouts_and_diagrams/schematic_pack/group1/0d/b2/51/b1/82/cd/44/42/X-NUCLEO-IKS01A3_SCHEMATIC/files/x-nucleo-iks01a3_schematic.pdf/jcr:content/translations/en.x-nucleo-iks01a3_schematic.pdf) - -### Firmware Quickstart Guides - -- [Arduino Guide](/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/arduino) -- [PlatformIO Guide](/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/platformio) diff --git a/docs/use-the-network/devices/devices.mdx b/docs/use-the-network/devices/devices.mdx deleted file mode 100644 index 31d730c32..000000000 --- a/docs/use-the-network/devices/devices.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -id: devices -sidebar_label: Devices -slug: /use-the-network/devices ---- - -# Helium Devices - -The Helium network supports any LoRaWAN capable device meeting the -[v1.0.2 specification](https://lora-alliance.org/resource_hub/lorawan-specification-v1-0-2). - -:::info - -There are thousands of compatible LoRaWAN devices. The devices shown here do not -represent all available devices. - -::: - -### Complete Device Solutions - -Please visit Users under our -[Helium Ecosystem](https://www.helium.com/ecosystem) catalog for companies -offering complete end-to-end device solutions. - -### Ready to Use Devices - -For those looking to create a solution with purpose built end devices, our ready -to use section provides device references and onboarding guides for some of the -most well known manufactures. - -[Browse Devices](/use-the-network/devices/ready-to-use) - -### Development Devices - -If you are looking to develop a device for a new application, then our -development section provides references and onboarding guides for some of the -most popular development boards and modules available. - -- [Browse Devices](/use-the-network/devices/development) -- [Quickstart Guides](/use-the-network/devices/development/quickstart-guides) diff --git a/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-compact-tracker.mdx b/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-compact-tracker.mdx deleted file mode 100644 index 56d57ea9e..000000000 --- a/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-compact-tracker.mdx +++ /dev/null @@ -1,64 +0,0 @@ ---- -id: abeeway-compact-tracker -hide_title: true -title: Abeeway Compact Tracker -description: - Higly versatile multi-mode tracker with a compact and robust form factor, - designed to resist harsh surroundings enabling you to perform seamless asset - tracking and management in any industrial environment – whether it’s for - heavy-duty assets or small equipment, taking advantage of its long battery - autonomy. -image: img/use-the-network/devices/ready-to-use/abeeway/abeeway-compact-tracker.png -sidebar_label: Abeeway Compact Tracker -slug: /use-the-network/devices/ready-to-use/abeeway/abeeway-compact-tracker ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Abeeway Compact Tracker - -Higly versatile multi-mode tracker with a compact and robust form factor, -designed to resist harsh surroundings enabling you to perform seamless asset -tracking and management in any industrial environment – whether it’s for -heavy-duty assets or small equipment, taking advantage of its long battery -autonomy. - - - -### Resources - -- [Product Page](https://www.abeeway.com/compact-tracker/) -- [Datasheet](https://www.abeeway.com/wp-content/uploads/2020/10/Abeeway_Compact-data-sheet_08.pdf) -- [Reseller - Actility](https://market.thingpark.com/catalog/product/view/id/11554/s/abeeway-compact-tracker/?___store=default) - -### Specifications - -#### Sensors: - -- accelerometer -- gps -- temperature - -#### Dimensions: - -- width: 112 mm -- length: 66 mm -- height: 33 mm - -#### Weight: - -- 190 grams - -#### Battery: - -- type: 3x AA/3.6V Li-SOCl2 -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-geolocation-module.mdx b/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-geolocation-module.mdx deleted file mode 100644 index e6a0ec80d..000000000 --- a/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-geolocation-module.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: abeeway-geolocation-module -hide_title: true -title: Abeeway Geolocation Module -description: - The Abeeway Geolocation Module is a multi-technology fused location LPWAN - module designed as the ideal platform to develop a wide range of IoT tracking - solutions, minimizing the Total Cost of Ownership (TCO) of IoT geolocation use - cases. It allows your engineering to focus on the use case, to optimize - time-to-market and cost by using less complex PCBs (all high-density devices - being encapsulated), to reduce certification risk and budget, as well as - testing time and cost for mass production. -image: img/use-the-network/devices/ready-to-use/abeeway/abeeway-geolocation-module.png -sidebar_label: Abeeway Geolocation Module -slug: /use-the-network/devices/ready-to-use/abeeway/abeeway-geolocation-module ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Abeeway Geolocation Module - -The Abeeway Geolocation Module is a multi-technology fused location LPWAN module -designed as the ideal platform to develop a wide range of IoT tracking -solutions, minimizing the Total Cost of Ownership (TCO) of IoT geolocation use -cases. It allows your engineering to focus on the use case, to optimize -time-to-market and cost by using less complex PCBs (all high-density devices -being encapsulated), to reduce certification risk and budget, as well as testing -time and cost for mass production. - - - -### Resources - -- [Product Page](https://actilitysa.sharepoint.com/:b:/t/aby/EYOI_kuaGtZAi8LYl_ooalwBNW6ffv27k1ZOHqWMmtNccA?e=xqOvOq) -- [Datasheet](https://actilitysa.sharepoint.com/:b:/t/aby/EYOI_kuaGtZAi8LYl_ooalwBNW6ffv27k1ZOHqWMmtNccA?e=xqOvOq) -- [Reseller - Actility](https://www.actility.com/) - -### Specifications - -#### Sensors: - -- accelerometer -- gps -- temperature - -#### Dimensions: - -- width: 17 mm -- length: 17.5 mm - -#### Weight: - -- 10 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-industrial-tracker.mdx b/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-industrial-tracker.mdx deleted file mode 100644 index 774278d57..000000000 --- a/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-industrial-tracker.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: abeeway-industrial-tracker -hide_title: true -title: Abeeway Industrial Tracker -description: - Multi-mode tracker with a large battery designed to resist harsh surroundings - enabling you to perform seamless asset tracking and management in any - industrial environment, whether it’s for heavy-duty assets, inventory or - livestock, taking advantage of its extraordinary battery autonomy. -image: img/use-the-network/devices/ready-to-use/abeeway/abeeway-industrial-tracker.png -sidebar_label: Abeeway Industrial Tracker -slug: /use-the-network/devices/ready-to-use/abeeway/abeeway-industrial-tracker ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Abeeway Industrial Tracker - -Multi-mode tracker with a large battery designed to resist harsh surroundings -enabling you to perform seamless asset tracking and management in any industrial -environment, whether it’s for heavy-duty assets, inventory or livestock, taking -advantage of its extraordinary battery autonomy. - - - -### Resources - -- [Product Page](https://www.abeeway.com/industrial-tracker/) -- [Datasheet](https://www.abeeway.com/wp-content/uploads/2020/11/Abeeway_Products_Industrial_07_DIGITAL.pdf) -- [Reseller - Actility](https://market.thingpark.com/searchanise/result?q=industrial+tracker) - -### Specifications - -#### Sensors: - -- accelerometer -- gps -- temperature - -#### Dimensions: - -- width: 76 mm -- length: 145 mm -- height: 42 mm - -#### Weight: - -- 240 grams - -#### Battery: - -- type: Lithium-thionyl Chloride Type D -- replaceable: False - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-micro-tracker.mdx b/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-micro-tracker.mdx deleted file mode 100644 index 6c3bce1d0..000000000 --- a/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-micro-tracker.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: abeeway-micro-tracker -hide_title: true -title: Abeeway Micro Tracker -description: - Multi-mode, versatile and multi-purpose tracker. With its small size and long - battery life, it is the ideal product for numerous tracking applications - things of value, people or pets. At the touch of a button, you can have access - to a variety of functionalities personalized for your needs -image: img/use-the-network/devices/ready-to-use/abeeway/abeeway-micro-tracker.png -sidebar_label: Abeeway Micro Tracker -slug: /use-the-network/devices/ready-to-use/abeeway/abeeway-micro-tracker ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Abeeway Micro Tracker - -Multi-mode, versatile and multi-purpose tracker. With its small size and long -battery life, it is the ideal product for numerous tracking applications things -of value, people or pets. At the touch of a button, you can have access to a -variety of functionalities personalized for your needs - - - -### Resources - -- [Product Page](https://www.abeeway.com/micro-tracker/) -- [Datasheet](https://www.abeeway.com/wp-content/uploads/2020/10/20200825_Abeeway_Products_Micro_17.pdf) -- [Reseller - Actility](https://market.thingpark.com/abeeway-microtracker-abw00200-eu868.html?___store=default) - -### Specifications - -#### Sensors: - -- accelerometer -- gps -- temperature - -#### Dimensions: - -- width: 34 mm -- length: 59 mm -- height: 13 mm - -#### Weight: - -- 21 grams - -#### Battery: - -- type: Lithium Polymer -- replaceable: False - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-smart-badge.mdx b/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-smart-badge.mdx deleted file mode 100644 index 388611fb9..000000000 --- a/docs/use-the-network/devices/ready-to-use/abeeway/abeeway-smart-badge.mdx +++ /dev/null @@ -1,65 +0,0 @@ ---- -id: abeeway-smart-badge -hide_title: true -title: Abeeway Smart Badge -description: - Portable multi-mode tracker in an ID card format. This device is ideal for - tracking, zone notification and monitoring of workforce safety and security. - Simple to use, a single button gives you access to the numerous - functionalities you may personalize for your needs, e.g. as a Panic/SOS - Button. A local zoning feature is able to signal danger zones with a 80db - buzzer -image: img/use-the-network/devices/ready-to-use/abeeway/abeeway-smart-badge.png -sidebar_label: Abeeway Smart Badge -slug: /use-the-network/devices/ready-to-use/abeeway/abeeway-smart-badge ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Abeeway Smart Badge - -Portable multi-mode tracker in an ID card format. This device is ideal for -tracking, zone notification and monitoring of workforce safety and security. -Simple to use, a single button gives you access to the numerous functionalities -you may personalize for your needs, e.g. as a Panic/SOS Button. A local zoning -feature is able to signal danger zones with a 80db buzzer - - - -### Resources - -- [Product Page](https://www.abeeway.com/smart-badge/) -- [Datasheet](https://www.abeeway.com/wp-content/uploads/2020/10/Abeeway_Badge-data-sheet_12_DIGITAL.pdf) -- [Reseller - Actility](https://market.thingpark.com/catalog/product/view/id/11550/s/abeeway-smart-badge/?___store=default) - -### Specifications - -#### Sensors: - -- accelerometer -- gps -- temperature - -#### Dimensions: - -- width: 65 mm -- length: 90 mm -- height: 11 mm - -#### Weight: - -- 80 grams - -#### Battery: - -- type: Lithium Polymer -- replaceable: False - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/adeunis/adeunis-field-test-device.mdx b/docs/use-the-network/devices/ready-to-use/adeunis/adeunis-field-test-device.mdx deleted file mode 100644 index ccd46c189..000000000 --- a/docs/use-the-network/devices/ready-to-use/adeunis/adeunis-field-test-device.mdx +++ /dev/null @@ -1,137 +0,0 @@ ---- -id: adeunis-field-test-device -hide_title: true -sidebar_label: Adeunis Field Test Device -slug: /use-the-network/devices/ready-to-use/adeunis/adeunis-field-test-device ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Adeunis Field Test Device - - - -### Introduction - -The Adeunis Field Test Device \(ARF8124A\) is a great tool for network testing. -It allows you to rapidly test network coverage at specific geographical -positions to verify that devices will have coverage. - -### Resources - -[Product Page](https://www.adeunis.com/en/produit/ftd-iot-lorawan-network-tester-915-923/) - -[Datasheet](https://www.adeunis.com/wp-content/uploads/2020/02/Data_Sheet_FTD_915-923_EN.pdf) - -[Manual](https://www.adeunis.com/wp-content/uploads/2020/03/FTD_LoRaWAN_US902-928_UG_GB_V1.0.1.pdf) - -### Add Device to Console - -To start, you'll need to add your device to Console. You should have been -provided with a DevEUI, AppEUI, and AppKey from the seller of the device. Follow -our [quickstart](/use-the-network/console/quickstart) for instructions on how to -add a new device to Console. - -### Device Configuration - -The following device configuration changes are required for the device to -function properly on the Helium Network. Although the Adeunis IoT Configurator -application makes the device configuration much easier, it does not allow you to -change all the required settings, so we must use a serial utility. We are using -Realterm for our serial utility, but any will work, just be sure to use the -correct serial settings and send the commands in the correct format. - -[Realterm - Serial Utility](https://sourceforge.net/projects/realterm/) - -#### Serial Settings - -- Rate 115 200 bps -- Parity None -- Data 8 -- Stop Bit 1 - - - -#### Activate Command Mode - -Only this command requires that you send the command in number form. - -Enter Command Mode Command: `0xFF 0xFF 0xFF 0x2B 0x2B 0x2B` - - - -#### Unblock Operating Range - -Command: `ATT63 PROVIDER` - -This command and all that follow should be sent using the ASCII format with a -carriage return\(CR\) at the end. - - - -#### Select Sub band 2 - -Set Value Command: `ATS259=2` - -Read Value Command: `ATS259?` - -#### Uplink Unconfirmed - -Set Value Command:`ATS382=0` - -Read Value Command: `ATS382?` - -#### ADR ON - -Set Value Command: `ATS220=1` - -Read Value Command: `ATS220?` - -#### Set Transmission Interval to 5 seconds - -Set Value Command: `ATS380=5` - -Read Value Command: `ATS380?` - -#### Save Configuration - -Command: `AT&W` - -#### Exit Command View - -Command: `ATO` - -You should see the following responses below from the device after entering the -above commands. - - - -### Sending Packets - -After exiting command mode and on every power on, the device will immediately -attempt to join the network. You will the status of the join attempt on the -Uplink/Downlink screen, please see the manual for more details on this screen. -Once the device has joined press the large push button in the center of the -device to send the uplink payload. - - diff --git a/docs/use-the-network/devices/ready-to-use/aquascope/bvs.mdx b/docs/use-the-network/devices/ready-to-use/aquascope/bvs.mdx deleted file mode 100644 index ad729642a..000000000 --- a/docs/use-the-network/devices/ready-to-use/aquascope/bvs.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: bvs -hide_title: true -title: Ball Valve Servo -description: Retrofittable Motor Actuator to operate Ball Valves -image: img/use-the-network/devices/ready-to-use/aquascope/bvs.jpg -sidebar_label: Ball Valve Servo -slug: /use-the-network/devices/ready-to-use/aquascope/bvs ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Ball Valve Servo - -Retrofittable Motor Actuator to operate Ball Valves - - - -### Resources - -- [Product Page](https://www.aqua-scope.com/ball-valve-servo.html) -- [Datasheet](https://www.aqua-scope.com/fileadmin/docs/BVSLWE01_DataSheet.pdf) -- [Reseller - Aqua-Scope WTB](https://www.aqua-scope.com/buy.html) -- [Video](https://www.youtube.com/watch?v=SsR9Trlw3SU) - -### Specifications - -#### Sensors: - -- temperature - -#### Dimensions: - -- width: 236 mm -- length: 179 mm -- height: 114 mm - -#### Weight: - -- 1147 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/aquascope/wwd.mdx b/docs/use-the-network/devices/ready-to-use/aquascope/wwd.mdx deleted file mode 100644 index ba8324cbe..000000000 --- a/docs/use-the-network/devices/ready-to-use/aquascope/wwd.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: wwd -hide_title: true -title: Flood Sensor -description: Waterproof Flood Sensor with additional sensor pad -image: img/use-the-network/devices/ready-to-use/aquascope/wwd.jpg -sidebar_label: Flood Sensor -slug: /use-the-network/devices/ready-to-use/aquascope/wwd ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Flood Sensor - -Waterproof Flood Sensor with additional sensor pad - - - -### Resources - -- [Product Page](https://www.aqua-scope.com/flood-sensor.html) -- [Datasheet](https://www.aqua-scope.com/fileadmin/docs/WWDLWE_DataSheet.pdf) -- [Reseller - Aqua-Scope WTB](https://www.aqua-scope.com/buy.html) -- [Video](https://www.youtube.com/watch?v=SsR9Trlw3SU) - -### Specifications - -#### Sensors: - -- temperature -- water - -#### Dimensions: - -- width: 98 mm -- length: 51 mm -- height: 28 mm - -#### Weight: - -- 56 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/beiselen/radar.mdx b/docs/use-the-network/devices/ready-to-use/beiselen/radar.mdx deleted file mode 100644 index 01389e5e0..000000000 --- a/docs/use-the-network/devices/ready-to-use/beiselen/radar.mdx +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: radar -hide_title: true -title: DigiSilo Radar Sensor -description: - DigiSilo is a compact distance measurement device and presence detector. Its - sensor is a low power, high precision, pulsed short-range radar sensor and can - measure in a distance range from 50 cm to 7 meters. By operating in the 60 GHz - unlicensed ISM radio band, the radar sensor provides robust performance - without interference from noise, dust, color nor direct or indirect light. - DigiSilo is made for silo monitoring with different mediums like grain, - feedstock, flour, or liquids. The device is designed to be mounted outside on - top of the non-metallic silo. -image: img/use-the-network/devices/ready-to-use/beiselen/radar.jpg -sidebar_label: DigiSilo Radar Sensor -slug: /use-the-network/devices/ready-to-use/beiselen/radar ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DigiSilo Radar Sensor - -DigiSilo is a compact distance measurement device and presence detector. Its -sensor is a low power, high precision, pulsed short-range radar sensor and can -measure in a distance range from 50 cm to 7 meters. By operating in the 60 GHz -unlicensed ISM radio band, the radar sensor provides robust performance without -interference from noise, dust, color nor direct or indirect light. DigiSilo is -made for silo monitoring with different mediums like grain, feedstock, flour, or -liquids. The device is designed to be mounted outside on top of the non-metallic -silo. - - - -### Specifications - -#### Sensors: - -- distance -- motion - -#### Dimensions: - -- width: 125 mm -- length: 280 mm -- height: 60 mm - -#### Weight: - -- 725 grams - -#### Battery: - -- type: lithium-ion -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/boatofficer/boatofficerblue.mdx b/docs/use-the-network/devices/ready-to-use/boatofficer/boatofficerblue.mdx deleted file mode 100644 index 5a3fbf912..000000000 --- a/docs/use-the-network/devices/ready-to-use/boatofficer/boatofficerblue.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: boatofficerblue -hide_title: true -title: BoatOfficer Blue -description: - With BoatOfficer Blue you can monitor your boat, while you’re not around. E.g. - position, battery voltage and temperature are send via TheThingsNetwork to the - BoatOfficer app on your phone. Events like water ingress detection trigger an - immediate push notification. -image: img/use-the-network/devices/ready-to-use/boatofficer/boatofficerblue_leftside.png -sidebar_label: BoatOfficer Blue -slug: /use-the-network/devices/ready-to-use/boatofficer/boatofficerblue ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## BoatOfficer Blue - -With BoatOfficer Blue you can monitor your boat, while you’re not around. E.g. -position, battery voltage and temperature are send via TheThingsNetwork to the -BoatOfficer app on your phone. Events like water ingress detection trigger an -immediate push notification. - - - -### Resources - -- [Product Page](https://www.boatofficer.com/products/BoatOfficerBlue) -- [Reseller - BoatOfficer Webshop](https://shop.boatofficer.com) - -### Specifications - -#### Sensors: - -- button -- gps -- temperature -- voltage - -#### Dimensions: - -- width: 90 mm -- length: 40 mm -- height: 140 mm - -#### Weight: - -- 250 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/bosch/tps110.mdx b/docs/use-the-network/devices/ready-to-use/bosch/tps110.mdx deleted file mode 100644 index dca4e75de..000000000 --- a/docs/use-the-network/devices/ready-to-use/bosch/tps110.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: tps110 -hide_title: true -title: Parking Lot Sensor -description: - The wireless smart parking sensor for detecting parking space occupancy -image: img/use-the-network/devices/ready-to-use/bosch/tps110.jpg -sidebar_label: Parking Lot Sensor -slug: /use-the-network/devices/ready-to-use/bosch/tps110 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Parking Lot Sensor - -The wireless smart parking sensor for detecting parking space occupancy - - - -### Resources - -- [Product Page](https://www.bosch-connectivity.com/products/connected-mobility/parking-lot-sensor/) -- [Datasheet](https://www.bosch-connectivity.com/media/product_detail_pls/parking-lot-sensor-datasheet.pdf) -- [Video](https://youtu.be/HYv50apV-jA) - -### Specifications - -#### Sensors: - -- magnetometer -- gps -- temperature -- radar - -#### Dimensions: - -- height: 30.5 mm - -#### Weight: - -- 191 grams - -#### Battery: - -- type: Lithium battery (Li-SOCI2) -- replaceable: False - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/comtac/lpn-km.mdx b/docs/use-the-network/devices/ready-to-use/comtac/lpn-km.mdx deleted file mode 100644 index bab75a089..000000000 --- a/docs/use-the-network/devices/ready-to-use/comtac/lpn-km.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: lpn-km -hide_title: true -title: LPN KM - Short-circuit monitor -description: - LPN KM is specially designed for the acquisition and transmission of - short-circuit and ground fault messages from transformer stations. -image: img/use-the-network/devices/ready-to-use/comtac/lpn-km-foto.jpg -sidebar_label: LPN KM - Short-circuit monitor -slug: /use-the-network/devices/ready-to-use/comtac/lpn-km ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LPN KM - Short-circuit monitor - -LPN KM is specially designed for the acquisition and transmission of -short-circuit and ground fault messages from transformer stations. - - - -### Resources - -- [Product Page](https://www.comtac.ch/en/products/lora/condition-monitoring/lpn-km-short-circuit-monitor.html) - -### Specifications - -#### Sensors: - -- digital input -- temperature -- battery -- button - -#### Dimensions: - -- width: 115 mm -- length: 130 mm -- height: 55 mm - -#### Weight: - -- 330 grams - -#### Battery: - -- type: LiMn02 5Ah Backup battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/comtac/lpn-td1.mdx b/docs/use-the-network/devices/ready-to-use/comtac/lpn-td1.mdx deleted file mode 100644 index 40c16054d..000000000 --- a/docs/use-the-network/devices/ready-to-use/comtac/lpn-td1.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: lpn-td1 -hide_title: true -title: LPN TD-1 Tracker -description: - Designed for LoRaWAN - Indoor/outdoor positioning on request with GPS or WiFi -image: img/use-the-network/devices/ready-to-use/comtac/lpn-td1-foto.jpg -sidebar_label: LPN TD-1 Tracker -slug: /use-the-network/devices/ready-to-use/comtac/lpn-td1 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LPN TD-1 Tracker - -Designed for LoRaWAN - Indoor/outdoor positioning on request with GPS or WiFi - - - -### Resources - -- [Product Page](https://www.comtac.ch/en/products/tracking/tracker/lpn-td-1-tracker.html) - -### Specifications - -#### Sensors: - -- gps -- wifi ssid -- temperature -- battery - -#### Dimensions: - -- width: 113 mm -- length: 52 mm -- height: 25 mm - -#### Weight: - -- 85 grams - -#### Battery: - -- type: Rechargable Li-Po Battery 1.4Ah -- replaceable: False - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/comtac/lpn-tsm.mdx b/docs/use-the-network/devices/ready-to-use/comtac/lpn-tsm.mdx deleted file mode 100644 index bf685c6aa..000000000 --- a/docs/use-the-network/devices/ready-to-use/comtac/lpn-tsm.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: lpn-tsm -hide_title: true -title: LPN TSM Transformer station monitor -description: - Transmission of operating status and error messages from transformer stations -image: img/use-the-network/devices/ready-to-use/comtac/lpn-tsm-foto.jpg -sidebar_label: LPN TSM Transformer station monitor -slug: /use-the-network/devices/ready-to-use/comtac/lpn-tsm ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LPN TSM Transformer station monitor - -Transmission of operating status and error messages from transformer stations - - - -### Resources - -- [Product Page](https://www.comtac.ch/en/products/lora/condition-monitoring/lpn-tsm-tranformer-station-monitor.html) - -### Specifications - -#### Sensors: - -- temperature -- battery -- voltage -- current -- digital input - -#### Dimensions: - -- width: 162 mm -- length: 252 mm -- height: 90 mm - -#### Weight: - -- 1233 grams - -#### Battery: - -- type: LiMn02 5Ah Backup battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-5tm.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-5tm.mdx deleted file mode 100644 index 2fe5dfe18..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-5tm.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-5tm -hide_title: true -title: DL-5TM -description: Legacy Soil Moisture and Temperature Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-5tm.jpg -sidebar_label: DL-5TM -slug: /use-the-network/devices/ready-to-use/decentlab/dl-5tm ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-5TM - -Legacy Soil Moisture and Temperature Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/legacy-soil-moisture-and-temperature-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-5TM-datasheet.pdf) - -### Specifications - -#### Sensors: - -- moisture -- temperature -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 555 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-atm22.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-atm22.mdx deleted file mode 100644 index cc359a034..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-atm22.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: dl-atm22 -hide_title: true -title: DL-ATM22 -description: Wind Speed, Wind Direction and Temperature Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-atm22.jpg -sidebar_label: DL-ATM22 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-atm22 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-ATM22 - -Wind Speed, Wind Direction and Temperature Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/wind-speed-wind-direction-and-temperature-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-ATM22-datasheet.pdf) - -### Specifications - -#### Sensors: - -- wind speed -- wind direction -- temperature -- tilt -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 1020 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-atm41.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-atm41.mdx deleted file mode 100644 index 7b3e470ca..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-atm41.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: dl-atm41 -hide_title: true -title: DL-ATM41 -description: Eleven Parameter Weather Station for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-atm41.jpg -sidebar_label: DL-ATM41 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-atm41 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-ATM41 - -Eleven Parameter Weather Station for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/eleven-parameter-weather-station-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-ATM41-datasheet.pdf) - -### Specifications - -#### Sensors: - -- solar radiation -- precipitation -- lightning -- wind speed -- wind direction -- temperature -- barometer -- humidity -- tilt -- vapor pressure -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 1290 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-ctd10.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-ctd10.mdx deleted file mode 100644 index 6d399a73a..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-ctd10.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: dl-ctd10 -hide_title: true -title: DL-CTD10 -description: - Pressure / Liquid Level, Temperature and Electrical Conductivity for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-ctd10.jpg -sidebar_label: DL-CTD10 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-ctd10 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-CTD10 - -Pressure / Liquid Level, Temperature and Electrical Conductivity for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/pressure-/-liquid-level-temperature-and-electrical-conductivity-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-CTD10-datasheet.pdf) - -### Specifications - -#### Sensors: - -- conductivity -- level -- temperature -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 1090 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-002.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-002.mdx deleted file mode 100644 index 26f238625..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-002.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-dlr2-002 -hide_title: true -title: DL-DLR2-002 -description: Pulse Counter Dry Contact Transmitter for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-dlr2.jpg -sidebar_label: DL-DLR2-002 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-dlr2-002 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-DLR2-002 - -Pulse Counter Dry Contact Transmitter for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/analog-or-digital-sensor-device-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-DLR2-datasheet.pdf) - -### Specifications - -#### Sensors: - -- pulse count -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 400 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-003.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-003.mdx deleted file mode 100644 index ef84c3aff..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-003.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-dlr2-003 -hide_title: true -title: DL-DLR2-003 -description: Digital Input Dry Contact Transmitter for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-dlr2.jpg -sidebar_label: DL-DLR2-003 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-dlr2-003 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-DLR2-003 - -Digital Input Dry Contact Transmitter for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/analog-or-digital-sensor-device-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-DLR2-datasheet.pdf) - -### Specifications - -#### Sensors: - -- digital input -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 400 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-004.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-004.mdx deleted file mode 100644 index db6c7abda..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-004.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: dl-dlr2-004 -hide_title: true -title: DL-DLR2-004 -description: Analog 4 ... 20 mA Sensor Transmitter for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-dlr2.jpg -sidebar_label: DL-DLR2-004 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-dlr2-004 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-DLR2-004 - -Analog 4 ... 20 mA Sensor Transmitter for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/analog-or-digital-sensor-device-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-DLR2-datasheet.pdf) - -### Specifications - -#### Sensors: - -- analog input -- current -- 4-20 ma -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 400 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-005.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-005.mdx deleted file mode 100644 index e7d157a3e..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-005.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-dlr2-005 -hide_title: true -title: DL-DLR2-005 -description: Analog 0 ... 3 V Sensor Transmitter for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-dlr2.jpg -sidebar_label: DL-DLR2-005 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-dlr2-005 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-DLR2-005 - -Analog 0 ... 3 V Sensor Transmitter for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/analog-or-digital-sensor-device-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-DLR2-datasheet.pdf) - -### Specifications - -#### Sensors: - -- analog input -- voltage -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 400 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-006.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-006.mdx deleted file mode 100644 index d1bd9cbdf..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-006.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-dlr2-006 -hide_title: true -title: DL-DLR2-006 -description: Analog Potentiometer Sensor Transmitter for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-dlr2.jpg -sidebar_label: DL-DLR2-006 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-dlr2-006 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-DLR2-006 - -Analog Potentiometer Sensor Transmitter for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/analog-or-digital-sensor-device-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-DLR2-datasheet.pdf) - -### Specifications - -#### Sensors: - -- analog input -- potentiometer -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 400 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-008.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-008.mdx deleted file mode 100644 index 91dae63f1..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-008.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-dlr2-008 -hide_title: true -title: DL-DLR2-008 -description: Analog PT100 Sensor Transmitter for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-dlr2.jpg -sidebar_label: DL-DLR2-008 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-dlr2-008 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-DLR2-008 - -Analog PT100 Sensor Transmitter for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/analog-or-digital-sensor-device-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-DLR2-datasheet.pdf) - -### Specifications - -#### Sensors: - -- analog input -- temperature -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 400 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-010.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-010.mdx deleted file mode 100644 index 69cd95886..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-010.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-dlr2-010 -hide_title: true -title: DL-DLR2-010 -description: Dual Pulse Counter Dry Contact Transmitter for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-dlr2.jpg -sidebar_label: DL-DLR2-010 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-dlr2-010 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-DLR2-010 - -Dual Pulse Counter Dry Contact Transmitter for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/analog-or-digital-sensor-device-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-DLR2-datasheet.pdf) - -### Specifications - -#### Sensors: - -- pulse count -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 400 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-012.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-012.mdx deleted file mode 100644 index 358c8ab9b..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dlr2-012.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-dlr2-012 -hide_title: true -title: DL-DLR2-012 -description: Analog Strain Gauge Sensor Transmitter for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-dlr2.jpg -sidebar_label: DL-DLR2-012 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-dlr2-012 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-DLR2-012 - -Analog Strain Gauge Sensor Transmitter for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/analog-or-digital-sensor-device-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-DLR2-datasheet.pdf) - -### Specifications - -#### Sensors: - -- analog input -- strain -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 400 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-ds18.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-ds18.mdx deleted file mode 100644 index e83163f4a..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-ds18.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-ds18 -hide_title: true -title: DL-DS18 -description: Temperature Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-ds18.jpg -sidebar_label: DL-DS18 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-ds18 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-DS18 - -Temperature Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/temperature-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-DS18-datasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 500 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dws.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-dws.mdx deleted file mode 100644 index 35764eb7c..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-dws.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-dws -hide_title: true -title: DL-DWS -description: Weighing Scale for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-dws.jpg -sidebar_label: DL-DWS -slug: /use-the-network/devices/ready-to-use/decentlab/dl-dws ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-DWS - -Weighing Scale for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/weighing-scale-for-lorawan) - -### Specifications - -#### Sensors: - -- pulse frequency -- weight -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 400 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-iam.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-iam.mdx deleted file mode 100644 index daeb14c4c..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-iam.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: dl-iam -hide_title: true -title: DL-IAM -description: - Indoor Ambiance Monitor including CO2, TVOC and Motion Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-iam.jpg -sidebar_label: DL-IAM -slug: /use-the-network/devices/ready-to-use/decentlab/dl-iam ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-IAM - -Indoor Ambiance Monitor including CO2, TVOC and Motion Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/indoor-ambiance-monitor-including-co2-tvoc-and-motion-sensor-for-lorawan/) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-IAM-datasheet.pdf) - -### Specifications - -#### Sensors: - -- co2 -- tvoc -- temperature -- humidity -- barometer -- light -- pir -- battery - -#### Dimensions: - -- width: 120 mm -- length: 80 mm -- height: 25 mm - -#### Weight: - -- 144 grams - -#### Battery: - -- type: 2 AA alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-itst.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-itst.mdx deleted file mode 100644 index 0e699e181..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-itst.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-itst -hide_title: true -title: DL-ITST -description: Infrared Thermometer / Surface Temperature Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-itst.jpg -sidebar_label: DL-ITST -slug: /use-the-network/devices/ready-to-use/decentlab/dl-itst ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-ITST - -Infrared Thermometer / Surface Temperature Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/infrared-thermometer-/-surface-temperature-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-ITST-datasheet.pdf) - -### Specifications - -#### Sensors: - -- surface temperature -- temperature -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 460 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-kl66.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-kl66.mdx deleted file mode 100644 index 0047984c2..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-kl66.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-kl66 -hide_title: true -title: DL-KL66 -description: Strain / Weight Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-kl66.jpg -sidebar_label: DL-KL66 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-kl66 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-KL66 - -Strain / Weight Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/strain-/-weight-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-KL66-datasheet.pdf) - -### Specifications - -#### Sensors: - -- pulse frequency -- strain -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 450 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-lid.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-lid.mdx deleted file mode 100644 index 309ff5cdc..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-lid.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-lid -hide_title: true -title: DL-LID -description: Laser Distance / Level Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-lid.jpg -sidebar_label: DL-LID -slug: /use-the-network/devices/ready-to-use/decentlab/dl-lid ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-LID - -Laser Distance / Level Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/laser-distance-level-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-LID-datasheet.pdf) - -### Specifications - -#### Sensors: - -- distance -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 440 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-lp8p.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-lp8p.mdx deleted file mode 100644 index 2861f776b..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-lp8p.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: dl-lp8p -hide_title: true -title: DL-LP8P -description: - CO2, Temperature, Humidity and Barometric Pressure Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-lp8p.jpg -sidebar_label: DL-LP8P -slug: /use-the-network/devices/ready-to-use/decentlab/dl-lp8p ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-LP8P - -CO2, Temperature, Humidity and Barometric Pressure Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/co2-temperature-humidity-and-barometric-pressure-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-LP8P-datasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer -- co2 -- battery - -#### Dimensions: - -- width: 81 mm -- length: 122 mm -- height: 67 mm - -#### Weight: - -- 376 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-mbx.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-mbx.mdx deleted file mode 100644 index 9cc3c82b7..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-mbx.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-mbx -hide_title: true -title: DL-MBX -description: Ultrasonic Distance / Level Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-mbx.jpg -sidebar_label: DL-MBX -slug: /use-the-network/devices/ready-to-use/decentlab/dl-mbx ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-MBX - -Ultrasonic Distance / Level Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/ultrasonic-distance-/-level-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-MBX-datasheet.pdf) - -### Specifications - -#### Sensors: - -- distance -- battery - -#### Dimensions: - -- width: 81 mm -- length: 170 mm -- height: 70 mm - -#### Weight: - -- 448 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-optod.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-optod.mdx deleted file mode 100644 index 6ba0d3e6e..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-optod.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-optod -hide_title: true -title: DL-OPTOD -description: Optical Dissolved Oxygen and Temperature Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-optod.jpg -sidebar_label: DL-OPTOD -slug: /use-the-network/devices/ready-to-use/decentlab/dl-optod ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-OPTOD - -Optical Dissolved Oxygen and Temperature Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/optical-dissolved-oxygen-and-temperature-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-OPTOD-datasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature -- dissolved oxygen - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 1050 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-par.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-par.mdx deleted file mode 100644 index 667d4695c..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-par.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-par -hide_title: true -title: DL-PAR -description: Photosynthetically Active Radiation Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-pxr.jpg -sidebar_label: DL-PAR -slug: /use-the-network/devices/ready-to-use/decentlab/dl-par ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-PAR - -Photosynthetically Active Radiation Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/photosynthetically-active-radiation-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-PAR-datasheet.pdf) - -### Specifications - -#### Sensors: - -- solar radiation -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 620 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pm.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-pm.mdx deleted file mode 100644 index 22e3693ff..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pm.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: dl-pm -hide_title: true -title: DL-PM -description: - Particulate Matter, Temperature, Humidity and Barometric Pressure for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-pm.jpg -sidebar_label: DL-PM -slug: /use-the-network/devices/ready-to-use/decentlab/dl-pm ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-PM - -Particulate Matter, Temperature, Humidity and Barometric Pressure for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/particulate-matter-temperature-humidity-and-barometric-pressure-sensor-for-lorawan) - -### Specifications - -#### Sensors: - -- particulate matter -- temperature -- humidity -- barometer -- battery - -#### Dimensions: - -- width: 81 mm -- length: 122 mm -- height: 67 mm - -#### Weight: - -- 400 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr21.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr21.mdx deleted file mode 100644 index b06494738..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr21.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: dl-pr21 -hide_title: true -title: DL-PR21 -description: - Pressure / Liquid Level and Temperature Sensor with G1/4" Pipe Thread for - LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-pr21.jpg -sidebar_label: DL-PR21 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-pr21 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-PR21 - -Pressure / Liquid Level and Temperature Sensor with G1/4" Pipe Thread for -LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/pressure-/-liquid-level-and-temperature-sensor-with-g1/4-pipe-thread-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-PR21-datasheet.pdf) - -### Specifications - -#### Sensors: - -- pressure -- temperature -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 510 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr26.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr26.mdx deleted file mode 100644 index 07ff98971..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr26.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-pr26 -hide_title: true -title: DL-PR26 -description: Pressure / Liquid Level and Temperature Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-pr26.jpg -sidebar_label: DL-PR26 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-pr26 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-PR26 - -Pressure / Liquid Level and Temperature Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/pressure-/-liquid-level-and-temperature-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-PR26-datasheet.pdf) - -### Specifications - -#### Sensors: - -- pressure -- temperature -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 840 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr36.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr36.mdx deleted file mode 100644 index 517ee7e93..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr36.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: dl-pr36 -hide_title: true -title: DL-PR36 -description: - High-Precision Pressure / Liquid Level and Temperature Sensor for for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-pr36.jpg -sidebar_label: DL-PR36 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-pr36 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-PR36 - -High-Precision Pressure / Liquid Level and Temperature Sensor for for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/high-precision-pressure-/-liquid-level-and-temperature-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-PR36-datasheet.pdf) - -### Specifications - -#### Sensors: - -- pressure -- temperature -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 570 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr36ctd.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr36ctd.mdx deleted file mode 100644 index 9f5eb048f..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pr36ctd.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: dl-pr36ctd -hide_title: true -title: DL-PR36CTD -description: - High-Precision Pressure / Liquid Level, Temperature and Electrical for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-pr36ctd.jpg -sidebar_label: DL-PR36CTD -slug: /use-the-network/devices/ready-to-use/decentlab/dl-pr36ctd ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-PR36CTD - -High-Precision Pressure / Liquid Level, Temperature and Electrical for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/high-precision-pressure-/-liquid-level-temperature-and-electrical-conductivity-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-PR36CTD-datasheet.pdf) - -### Specifications - -#### Sensors: - -- pressure -- temperature -- conductivity -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 700 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pyr.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-pyr.mdx deleted file mode 100644 index 8912f9a3b..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-pyr.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-pyr -hide_title: true -title: DL-PYR -description: Total Solar Radiation Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-pxr.jpg -sidebar_label: DL-PYR -slug: /use-the-network/devices/ready-to-use/decentlab/dl-pyr ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-PYR - -Total Solar Radiation Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/total-solar-radiation-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-PYR-datasheet.pdf) - -### Specifications - -#### Sensors: - -- solar radiation -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 620 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-rhc.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-rhc.mdx deleted file mode 100644 index d12fd3e93..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-rhc.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-rhc -hide_title: true -title: DL-RHC -description: - High-Precision Air Temperature and Humidity Sensor with Radiation for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-rhc.jpg -sidebar_label: DL-RHC -slug: /use-the-network/devices/ready-to-use/decentlab/dl-rhc ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-RHC - -High-Precision Air Temperature and Humidity Sensor with Radiation for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/high-precision-air-temperature-and-humidity-sensor-with-radiation-shield-for-lorawan) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 500 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-sht35-001.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-sht35-001.mdx deleted file mode 100644 index bcc0b6bb0..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-sht35-001.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: dl-sht35-001 -hide_title: true -title: DL-SHT35-001 -description: - Air Temperature and Humidity Sensor with Radiation Shield for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-sht35-001.jpg -sidebar_label: DL-SHT35-001 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-sht35-001 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-SHT35-001 - -Air Temperature and Humidity Sensor with Radiation Shield for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/air-temperature-and-humidity-sensor-with-radiation-shield-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-SHT35-datasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- battery - -#### Dimensions: - -- width: 105 mm -- length: 280 mm -- height: 85 mm - -#### Weight: - -- 585 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-sht35-002.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-sht35-002.mdx deleted file mode 100644 index f40722ed2..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-sht35-002.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-sht35-002 -hide_title: true -title: DL-SHT35-002 -description: Air Temperature and Humidity Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-sht35-002.jpg -sidebar_label: DL-SHT35-002 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-sht35-002 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-SHT35-002 - -Air Temperature and Humidity Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/air-temperature-and-humidity-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-SHT35-datasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 425 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-smtp.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-smtp.mdx deleted file mode 100644 index ff5ecd376..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-smtp.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-smtp -hide_title: true -title: DL-SMTP -description: Soil Moisture and Temperature Profile for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-smtp.jpg -sidebar_label: DL-SMTP -slug: /use-the-network/devices/ready-to-use/decentlab/dl-smtp ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-SMTP - -Soil Moisture and Temperature Profile for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/soil-moisture-and-temperature-profile-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-SMTP-datasheet.pdf) - -### Specifications - -#### Sensors: - -- moisture -- temperature -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 1500 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-tbrg.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-tbrg.mdx deleted file mode 100644 index 650f442e0..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-tbrg.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-tbrg -hide_title: true -title: DL-TBRG -description: Tipping Bucket Rain Gauge for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-tbrg.jpg -sidebar_label: DL-TBRG -slug: /use-the-network/devices/ready-to-use/decentlab/dl-tbrg ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-TBRG - -Tipping Bucket Rain Gauge for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/tipping-bucket-rain-gauge-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-TBRG-datasheet.pdf) - -### Specifications - -#### Sensors: - -- precipitation -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 1530 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-trs11.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-trs11.mdx deleted file mode 100644 index 870c8479b..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-trs11.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: dl-trs11 -hide_title: true -title: DL-TRS11 -description: - Soil Moisture, Temperature and Electrical Conductivity Sensor for for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-trs1x.jpg -sidebar_label: DL-TRS11 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-trs11 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-TRS11 - -Soil Moisture, Temperature and Electrical Conductivity Sensor for for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/soil-moisture-temperature-and-electrical-conductivity-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-TRS11-datasheet.pdf) - -### Specifications - -#### Sensors: - -- moisture -- temperature -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 655 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-trs12.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-trs12.mdx deleted file mode 100644 index d12e590b7..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-trs12.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: dl-trs12 -hide_title: true -title: DL-TRS12 -description: - Soil Moisture, Temperature and Electrical Conductivity Sensor for for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-trs1x.jpg -sidebar_label: DL-TRS12 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-trs12 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-TRS12 - -Soil Moisture, Temperature and Electrical Conductivity Sensor for for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/soil-moisture-temperature-and-electrical-conductivity-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-TRS12-datasheet.pdf) - -### Specifications - -#### Sensors: - -- moisture -- temperature -- conductivity -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 655 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-trs21.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-trs21.mdx deleted file mode 100644 index 22cc94c44..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-trs21.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-trs21 -hide_title: true -title: DL-TRS21 -description: Soil Water Potential and Temperature Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-trs21.jpg -sidebar_label: DL-TRS21 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-trs21 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-TRS21 - -Soil Water Potential and Temperature Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/soil-water-potential-and-temperature-sensor-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-TRS21-datasheet.pdf) - -### Specifications - -#### Sensors: - -- water potential -- temperature -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 565 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-wrm.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-wrm.mdx deleted file mode 100644 index 98e89141b..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-wrm.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: dl-wrm -hide_title: true -title: DL-WRM -description: Winter Road Maintenance Sensor for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-wrm.jpg -sidebar_label: DL-WRM -slug: /use-the-network/devices/ready-to-use/decentlab/dl-wrm ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-WRM - -Winter Road Maintenance Sensor for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/winter-road-maintenance-sensor-for-lorawan) - -### Specifications - -#### Sensors: - -- surface temperature -- temperature -- humidity -- battery - -#### Dimensions: - -- width: 105 mm -- length: 280 mm -- height: 85 mm - -#### Weight: - -- 645 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-zn1.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-zn1.mdx deleted file mode 100644 index 6c3f37fe0..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-zn1.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-zn1 -hide_title: true -title: DL-ZN1 -description: Dendrometer for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-znx.jpg -sidebar_label: DL-ZN1 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-zn1 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-ZN1 - -Dendrometer for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/dendrometer-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-ZN-datasheet.pdf) - -### Specifications - -#### Sensors: - -- potentiometer -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 600 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/decentlab/dl-zn2.mdx b/docs/use-the-network/devices/ready-to-use/decentlab/dl-zn2.mdx deleted file mode 100644 index d209c1ea0..000000000 --- a/docs/use-the-network/devices/ready-to-use/decentlab/dl-zn2.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dl-zn2 -hide_title: true -title: DL-ZN2 -description: Dual Dendrometer for LoRaWAN -image: img/use-the-network/devices/ready-to-use/decentlab/dl-znx.jpg -sidebar_label: DL-ZN2 -slug: /use-the-network/devices/ready-to-use/decentlab/dl-zn2 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## DL-ZN2 - -Dual Dendrometer for LoRaWAN - - - -### Resources - -- [Product Page](https://www.decentlab.com/products/dendrometer-for-lorawan) -- [Datasheet](https://cdn.decentlab.com/download/datasheets/Decentlab-DL-ZN-datasheet.pdf) - -### Specifications - -#### Sensors: - -- potentiometer -- battery - -#### Dimensions: - -- width: 81 mm -- length: 135 mm -- height: 70 mm - -#### Weight: - -- 600 grams - -#### Battery: - -- type: 2 C alkaline -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/develiot/rwmr.mdx b/docs/use-the-network/devices/ready-to-use/develiot/rwmr.mdx deleted file mode 100644 index 8c436d3af..000000000 --- a/docs/use-the-network/devices/ready-to-use/develiot/rwmr.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -id: rwmr -hide_title: true -title: Remote Water Meter Reader -description: - Senses and transmits water consumption data in real-time remotely via LoRaWAN -image: img/use-the-network/devices/ready-to-use/develiot/main.png -sidebar_label: Remote Water Meter Reader -slug: /use-the-network/devices/ready-to-use/develiot/rwmr ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Remote Water Meter Reader - -Senses and transmits water consumption data in real-time remotely via LoRaWAN - - - -### Resources - -- [Product Page](https://www.develiot.com/remote-water-meter-reader) -- [Datasheet]() - -### Specifications - -#### Sensors: - -- temperature -- battery - -#### Dimensions: - -- width: 36 mm -- length: 121 mm -- height: 35 mm - -#### Weight: - -- 163 grams - -#### Battery: - -- type: AA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/develiot/uaqms.mdx b/docs/use-the-network/devices/ready-to-use/develiot/uaqms.mdx deleted file mode 100644 index c183ca313..000000000 --- a/docs/use-the-network/devices/ready-to-use/develiot/uaqms.mdx +++ /dev/null @@ -1,64 +0,0 @@ ---- -id: uaqms -hide_title: true -title: Urban Air Quality Monitoring Station -description: - Measures key air quality indicators and environmental parameters, mapping the - pollution in real-time. -image: img/use-the-network/devices/ready-to-use/develiot/station.jpg -sidebar_label: Urban Air Quality Monitoring Station -slug: /use-the-network/devices/ready-to-use/develiot/uaqms ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Urban Air Quality Monitoring Station - -Measures key air quality indicators and environmental parameters, mapping the -pollution in real-time. - - - -### Resources - -- [Product Page](https://www.develiot.com/urban-air-quality-system) -- [Datasheet]() - -### Specifications - -#### Sensors: - -- altitude -- barometer -- battery -- co2 -- gps -- temperature -- humidity -- wind direction -- wind speed -- sound - -#### Dimensions: - -- width: 400 mm -- length: 300 mm -- height: 150 mm - -#### Weight: - -- 11000 grams - -#### Battery: - -- type: Lead Acid -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/digital-matter/digital-matter-lorawan-gps.mdx b/docs/use-the-network/devices/ready-to-use/digital-matter/digital-matter-lorawan-gps.mdx deleted file mode 100644 index 17dfc4f25..000000000 --- a/docs/use-the-network/devices/ready-to-use/digital-matter/digital-matter-lorawan-gps.mdx +++ /dev/null @@ -1,239 +0,0 @@ ---- -id: digital-matter-lorawan-gps -hide_title: true -sidebar_label: Digital Matter LoRaWAN GPS -slug: /use-the-network/devices/ready-to-use/digital-matter/digital-matter-lorawan-gps ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Digital Matter LoRaWAN GPS - -Step-by-step guide on configuring and onboarding Digital Matter LoRaWAN GPS -devices. - -

- -
-
- -
- -### Introduction - -The -[Digital Matter Oyster](https://www.digitalmatter.com/devices/oyster-lorawan/)/[Yabby](https://www.digitalmatter.com/devices/yabby-lorawan/) -are rugged IP67 rated battery powered GPS tracking devices. This guide will show -you the hardware and software setup steps required to provision and onboard -these devices on the Helium Network. - -Functionally, the Oyster and Yabby are both battery powered GPS tracking -devices. Their main differences lie in form factor and battery life. - -### Resources - -[Oyster LoRaWAN Configuration Tool](https://www.oemserver.com/tools/OysterLoRaWAN/ConfigTool/setup.exe) - -[Oyster LoRaWAN Configuration and Usage Guide](https://support.digitalmatter.com/support/solutions/articles/16000063310-oyster-lorawan-configuration-and-usage-guide) - -[Yabby LoRaWAN Configuration Tool](https://www.oemserver.com/tools/YabbyLoRaWAN/ConfigTool/setup.exe) - -[Yabby LoRaWAN Configuration and Usage Guide](https://support.digitalmatter.com/support/solutions/articles/16000077618-configuration-and-usage-guide) - -### Hardware - -- Digital Matter Oyster/Yabby -- 3 x AA 1.5V Batteries \(Oyster\) -- 3 x AAA 1.5V Batteries \(Yabby\) -- Digital Matter Configuration Cable -- Digital Matter Yabby Configuration Cable Adapter \(Yabby only\) - -### Software - -- [Helium Console](https://console.helium.com/) -- [Oyster Configuration Tool ](https://www.oemserver.com/tools/OysterLoRaWAN/ConfigTool/setup.exe)\(Windows\) -- [Yabby Configuration Tool ](https://www.oemserver.com/tools/YabbyLoRaWAN/ConfigTool/setup.exe)\(Windows\) - -### Hardware Setup - -The _Oyster and Yabby take 3 cells of their respective battery types. \(AA and -AAA\)_ - -The Oyster uses a -[FTDI TTL to USB Serial Converter Cable](https://www.ftdichip.com/Support/Documents/DataSheets/Cables/DS_TTL-232RG_CABLES.pdf) - -
- -
- -
- FTDI TTL to USB Serial Converter Cable -
- -This cable plugs into the four-pin connector below the battery compartment. - -The Yabby uses the same cable, but will need an additional adapter for the Pogo -pins. - -
- -
- -
Yabby Pogo Adapter Cable
- -Once the devices have been provisioned and the batteries are populated, the -enclosure can be sealed by using the included screws. - ---- - -That’s it for hardware setup! - ---- - -### Software Setup - -The Oyster/Yabby ship with a pre-provisioned AppEUI and AppKey. If you choose to -use these credentials, you can leave the AppEUI and AppKey fields blank in the -Windows utility. If you’d like to provision the device with new credentials, you -must copy the AppEUI and AppKey from the device -[created in Console](/use-the-network/console/adding-devices). - -The basic parameters of interest are as follows: - -```text -General: -In Trip Fix : hh:mm:ss : Will determine transmission frequency - -Basic LoRaWAN: - Region : US915 [1.0.2B] - Sub-Band : 2 (ch. 8-15, 70) - Activation : OTAA - JoinEUI / AppEUI : [ Blank to use pre-provisioned / AppEUI from Console ] - NwkKey (1.1) / AppKey (1.0) : [ Blank to use pre-provisioned / AppKey from Console ] - -``` - -#### Connecting your device - -When you plug in your cable, your PC will assign it a COM port, which you can -retrieve from the Device Manager from the _**Ports \(COM & LPT\).**_ - -To access the device manager, press the Windows key on your keyboard and search -for "Device Manager". - -Windows Device Manager - -Select the corresponding port from the drop-down list in the top right of the -utility and click _**Start**_. - -If the Program Firmware and Program Parameters boxes are left unchecked, the -utility will continuously read and display the current device settings without -applying changes. - -Current Device Settings and Transaction List - -You can check logs by clicking the DevEUI List button on the top left, which -will show a list of scanned DevEUIs and transactions. Each time a device is -programmed, the parameter list will flash, and the DevEUI list will update. This -list is available in CSV format, so it can be conveniently imported into a -spreadsheet. - -To program the new parameters and firmware, enter the desired parameters in the -right-hand column, and check the corresponding boxes to update _**firmware**_ -and/or _**parameters**._ When you are finished, you may hit _**Stop**_, and -disconnect your device. - -Once the device has been configured, it will attempt to join the Helium Network -by transmitting join requests. If the device has been configured properly in -Console and has knowledge of the device’s AppEUI and AppKey, the Hotspot that -hears the join request will send a join-accept message and allow the device to -join the network and transmit data. - -### Usage - -These devices use an accelerometer to detect movement, allowing it to decide -when an asset is in-trip and when it is stationary. This allows it schedule -battery-hungry GPS fixes when appropriate, to optimize battery life. Each time a -status update is scheduled, the device will attempt a GPS fix, then transmit -results \(regardless of whether a fix succeeded or not\). - -### Device Payload - -A sample device payload is as follows: - -```text -DCCF3816BF5046B70000D3 -``` - -When decoded becomes: - -```text -{ - "type": "position", - "latitudeDeg": 37.282198, - "longitudeDeg": -122.0128577, - "inTrip": false, - "fixFailed": false, - "headingDeg": 0, - "speedKmph": 0, - "batV": 5.275, - "manDown": null -} -``` - -To learn more about decoding this payload, you may use this -[utility](https://www.oemserver.com/tools/OysterLoRaWAN/UplinkDecoder.html). To -view the Javascript sample code, you can view source. - -### Battery Life Estimate - -[Download Oyster LoRaWAN Battery Life Estimator](https://support.digitalmatter.com/helpdesk/attachments/16023300051) - -This spreadsheet will help estimate approximate battery life of the Digital -Matter Oyster. Simply modify the fields to represent the desired number of -transmissions within a day. - -### myDevices/Cayenne Integration - -Helium now supports myDevices and the Cayenne LPP \(low power payload\) format. -Cayenne features a simple drag and drop interface that allows developers, -designers and engineers quickly prototype and share their connected device -projects. - -To learn more about myDevices Cayenne integration, visit myDevices Cayenne - -:::info - -myDevices currently only includes the Digital Matter Oyster in their device -library. - -::: - -When you are adding a device/widget in Cayenne, look for the **Digital Matter -Oyster** under **Helium.** - -myDevices Cayenne - Adding a Digital Matter Oyster - -Copy the device's **DevEUI** into the field. This value should correspond to the -associated Digital Matter Oyster DevEUI in **Console.** Then, click **Add -device.** - -myDevices Cayenne - Adding a Digital Matter Oyster - -That's it for adding a Digital Matter Oyster in myDevices Cayenne! diff --git a/docs/use-the-network/devices/ready-to-use/digital-matter/oyster.mdx b/docs/use-the-network/devices/ready-to-use/digital-matter/oyster.mdx deleted file mode 100644 index d4faa3888..000000000 --- a/docs/use-the-network/devices/ready-to-use/digital-matter/oyster.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: oyster -hide_title: true -title: Oyster -description: - Ultra-rugged, long-life battery-powered LoRaWAN® GPS asset tracking device -image: img/use-the-network/devices/ready-to-use/digital-matter/oyster.png -sidebar_label: Oyster -slug: /use-the-network/devices/ready-to-use/digital-matter/oyster ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Oyster - -Ultra-rugged, long-life battery-powered LoRaWAN® GPS asset tracking device - - - -### Resources - -- [Product Page](https://www.digitalmatter.com/devices/oyster-lorawan) - -### Specifications - -#### Sensors: - -- accelerometer -- battery -- gps -- temperature - -#### Dimensions: - -- width: 86 mm -- length: 108 mm -- height: 31 mm - -#### Weight: - -- 188 grams - -#### Battery: - -- type: AA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/digital-matter/yabby-edge.mdx b/docs/use-the-network/devices/ready-to-use/digital-matter/yabby-edge.mdx deleted file mode 100644 index 2f087880c..000000000 --- a/docs/use-the-network/devices/ready-to-use/digital-matter/yabby-edge.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: yabby-edge -hide_title: true -title: Yabby Edge -description: - Ultra-rugged, Indoor / Outdoor, long-life battery-powered LoRaWAN® GPS asset - tracking device -image: img/use-the-network/devices/ready-to-use/digital-matter/yabby-edge.png -sidebar_label: Yabby Edge -slug: /use-the-network/devices/ready-to-use/digital-matter/yabby-edge ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Yabby Edge - -Ultra-rugged, Indoor / Outdoor, long-life battery-powered LoRaWAN® GPS asset -tracking device - - - -### Resources - -- [Product Page](https://www.digitalmatter.com/our-devices/yabby-edge) - -### Specifications - -#### Sensors: - -- accelerometer -- battery -- gps -- temperature - -#### Dimensions: - -- width: 63 mm -- length: 85 mm -- height: 24 mm - -#### Weight: - -- 88 grams - -#### Battery: - -- type: AAA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lbt1.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lbt1.mdx deleted file mode 100644 index a61613619..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lbt1.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -id: lbt1 -hide_title: true -title: LBT1 -description: LoRaWAN BLE Indoor Tracker -image: img/use-the-network/devices/ready-to-use/dragino/lbt1.jpg -sidebar_label: LBT1 -slug: /use-the-network/devices/ready-to-use/dragino/lbt1 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LBT1 - -LoRaWAN BLE Indoor Tracker - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/165-lbt1.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/LBT1/) - -### Specifications - -#### Sensors: - -- motion - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/ldds20.mdx b/docs/use-the-network/devices/ready-to-use/dragino/ldds20.mdx deleted file mode 100644 index 98c8051f1..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/ldds20.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -id: ldds20 -hide_title: true -title: LDDS20 -description: LoRaWAN Distance Detection Sensor -image: img/use-the-network/devices/ready-to-use/dragino/ldds20.jpg -sidebar_label: LDDS20 -slug: /use-the-network/devices/ready-to-use/dragino/ldds20 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LDDS20 - -LoRaWAN Distance Detection Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/164-ldds20.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/LDDS20/) - -### Specifications - -#### Sensors: - -- level - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/ldds75.mdx b/docs/use-the-network/devices/ready-to-use/dragino/ldds75.mdx deleted file mode 100644 index 135d035be..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/ldds75.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -id: ldds75 -hide_title: true -title: LDDS75 -description: LoRaWAN Distance Detection Sensor -image: img/use-the-network/devices/ready-to-use/dragino/ldds75.jpg -sidebar_label: LDDS75 -slug: /use-the-network/devices/ready-to-use/dragino/ldds75 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LDDS75 - -LoRaWAN Distance Detection Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/161-ldds75.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/LDDS75/) - -### Specifications - -#### Sensors: - -- distance - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lds01.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lds01.mdx deleted file mode 100644 index 60eb316ae..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lds01.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -id: lds01 -hide_title: true -title: LDS01 -description: LoRaWAN Door Sensor -image: img/use-the-network/devices/ready-to-use/dragino/lds01.jpg -sidebar_label: LDS01 -slug: /use-the-network/devices/ready-to-use/dragino/lds01 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LDS01 - -LoRaWAN Door Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/157-lds01.html) -- [Datasheet](http://www.dragino.com/products/lora-lorawan-end-node/item/157-lds01.html) - -### Specifications - -#### Sensors: - -- magnetometer - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lds02.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lds02.mdx deleted file mode 100644 index 6c82f5456..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lds02.mdx +++ /dev/null @@ -1,238 +0,0 @@ ---- -id: lds02 -hide_title: true -title: LDS02 -description: LoRoWAN Door Sensor -sidebar_label: LDS02 -slug: /use-the-network/devices/ready-to-use/dragino/lds02 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Dragino LDS02 - - - -LoRaWAN Door Sensor Mk.2 - -### Introduction - -The [Dragino LDS02](https://www.dragino.com/products/lorawan-nb-iot-door-sensor-water-leak/item/181-lds02.html) -is a self-contained sensor with LoRaWAN, 2xAAA batteries, a magnetic reed proximity switch and accompanying magnet. -When the magnet is aligned to the sensor and closer than a centimeter, the switch is closed. When the magnet is moved further, the switch is open. - -### Resources - -[Product Page](https://www.dragino.com/products/lorawan-nb-iot-door-sensor-water-leak/item/181-lds02.html) - -[Datasheet](https://www.dragino.com/downloads/downloads/LoRa_End_Node/LDS02/Datasheet_LDS02_Door_Sensor.pdf) - -[Manual](https://www.dragino.com/downloads/downloads/LoRa_End_Node/LDS02/LDS02_LoRaWAN_Door_Sensor_UserManual_v1.1.pdf) - -### Add Device to Console - -To start, you'll need to add your device to the Helium Console. In the package is a sticker containing the Device EUI (also QR code), App EUI, and App Key. -(The APSSKEY and NETSKEY are unused.) -Follow our [quick start for instructions](/use-the-network/console/adding-devices) to add a new device to Console. - -Open the Debug panel on the Device view to observe incoming messages for the next step. - -### Install Batteries - -Open the LDS02 enclosure and add two AAA battery cells for power. -For the best wide-range temperature tolerance and longevity, consider Lithium primary cells, such as Energizer Ultimate Lithium L92SBP. - -On insertion, the LED should light quickly Red, Blue, Green, then off. -You should immediately see Join and Uplink messages on the Helium Console Debug panel. -If you see no messages, or no LED flashing, double-check the device IDs, then remove and reinstall one battery to start initialization again. - -### myDevices Cayenne - -This device is supported directly by [myDevices Cayenne](https://cayenne.mydevices.com/cayenne) via the -included Integration in Helium's Console. - -To add the LDS02 to Cayenne, you do not need to set up a Decode script at all. Cayenne takes the encoded Device payload directly and parses the -events from it. - -Be careful to select **Helium** when adding the LDS02 to Cayenne. -As described [here](https://docs.mydevices.com/docs/lorawan/helium), select -1. "Add new..." -2. "Device/Widget" -3. "LoRa" -4. "Helium" -5. select `Dragino LDS02 LoRaWAN Door Sensor` -6. Enter the Device EUI and other information. - -On the Helium Console, select `Flow` and directly connect the LHT65 Device to the -Cayenne Integration with a connecting flow line. *Do not use a Decoder.* - -Cayenne will show: -* RSSI (dBm) -* SNR (dB) -* Battery Voltage (v) -* Battery (%) -* Door state (0/1) -* Door ("Dorr" sic) Open Times -* Last Door Open Duration (in minutes!) -* Alarm state (0/1) - -### Decode Device Payload - -To decompose the packed 10-byte data Payload from the device into individual values, -you may provide a decode Function as explained in [our short primer](/use-the-network/console/functions). -The manufacture of this device, Dragino, is using their own encoding scheme to -define which bytes hold which piece of data. Below is a table taken from the -manual showing the size and location of each piece of data. - - - -If you would like to decode the device payload to view it in Console or send to -your own application, this section will show you how. We'll be using a Console -Function Decoder to unpack the device payload into a human readable form. - -#### Create Function Decoder - -Create a new custom Function decoder, by selecting `Functions`, then `(+)`. -Name the function (perhaps "LDS02"), type `Decoder` and `Custom Script`. Paste the script below, provided by Dragino: -```js -function Decoder(bytes, port) { - // Decode an uplink message from a buffer - // (array) of bytes to an object of fields. - var value = (bytes[0] << 8 | bytes[1]) & 0x3FFF; - var bat = value / 1000;//Battery,units:V - - var door_open_status = bytes[0] & 0x80 ? 1 : 0;//1:open,0:close - var water_leak_status = bytes[0] & 0x40 ? 1 : 0; - - var mod = bytes[2]; - var alarm = bytes[9] & 0x01; - - if (mod == 1) { - var open_times = bytes[3] << 16 | bytes[4] << 8 | bytes[5]; - var open_duration = bytes[6] << 16 | bytes[7] << 8 | bytes[8];//units:min - if (bytes.length == 10 && 0x07 > bytes[0] < 0x0f) - return { - BAT_V: bat, - MOD: mod, - DOOR_OPEN_STATUS: door_open_status, - DOOR_OPEN_TIMES: open_times, - LAST_DOOR_OPEN_DURATION: open_duration, - ALARM: alarm - }; - } - else if (mod == 2) { - var leak_times = bytes[3] << 16 | bytes[4] << 8 | bytes[5]; - var leak_duration = bytes[6] << 16 | bytes[7] << 8 | bytes[8];//units:min - if (bytes.length == 10 && 0x07 > bytes[0] < 0x0f) - return { - BAT_V: bat, - MOD: mod, - WATER_LEAK_STATUS: water_leak_status, - WATER_LEAK_TIMES: leak_times, - LAST_WATER_LEAK_DURATION: leak_duration - }; - } - else if (mod == 3) - if (bytes.length == 10 && 0x07 > bytes[0] < 0x0f) { - return { - BAT_V: bat, - MOD: mod, - DOOR_OPEN_STATUS: door_open_status, - WATER_LEAK_STATUS: water_leak_status, - ALARM: alarm - }; - } - else { - return { - BAT_V: bat, - MOD: mod, - }; - } -} -``` - -#### Create a Flow - -To associate the Device with the Decoder Function, go to the Flow panel. - -Drag the Device instance and the Function into the field. -Connect them with a line from the Device to the Function - -#### Viewing Decoded Device Data - -Once you have attached the decoder we can now open the Debug window to view the -decoded device payload in the received uplink. -To open the Debug window just click on the bug icon on the -right side of the device page. Once you have the Debug window open you can wait -for the next packet to transmit or force a manual transmission by triggering the sensor with the magnet. -You will see the LED flash green while it sends a packet to the network. - -## Google Sheets log - -You can also use the Google Sheet integration to map the decoded data to a Form for recording in sheets. -Create a Google Form with Short Answer questions for -* `battery-volts` -* `door-open` -* `door-open-count` -* `last-open-duration` -* `alarm` - -Map it to the Google Sheets Integration and provide this decoder as part of the Sheets setup: -```js -function Decoder(bytes, port) { - var value = (bytes[0] << 8 | bytes[1]) & 0x3FFF; - var bat = value / 1000; // Battery, units:V - var door_open_status = bytes[0] & 0x80 ? 1 : 0; // 1:open, 0:close - var alarm = bytes[9] & 0x01; - var open_times = bytes[3] << 16 | bytes[4] << 8 | bytes[5]; - var open_duration = bytes[6] << 16 | bytes[7] << 8 | bytes[8];//units:min - if (bytes.length == 10 && 0x07 > bytes[0] < 0x0f) { - var decodedPayload = { - "battery-volts": bat, - "door-open": door_open_status, - "door-open-count": open_times, - "last-open-duration": open_duration, - "alarm": alarm - }; - return Serialize(decodedPayload) - } -} - -// Generated: do not touch unless your Google Form fields have changed -var field_mapping = { - "battery-volts": "entry.702320693", - "door-open": "entry.1934071370", - "door-open-count": "entry.844671899", - "last-open-duration": "entry.1464236526", - "alarm": "entry.2127237487" -}; -// End Generated - -function Serialize(payload) { - var str = []; - for (var key in payload) { - if (payload.hasOwnProperty(key)) { - var name = encodeURIComponent(field_mapping[key]); - var value = encodeURIComponent(payload[key]); - str.push(name + "=" + value); - } - } - return str.join("&"); -} -``` - -The Sheets integration will provide its own Decoder Function block. -Create a new flow from the LDS02 Device, to this Decoder, to the Sheets Integration block. - -## Notes -Note that the Door Open Duration is a count of full minutes (rounded down) that the door was last open. It does not show the Door Closed time, but repeats the Door Open time for the subsequent Open message. - -If door open/close events happen faster than LoRa can send messages (about 3 seconds each), then the door open/close Count will still be correct, and you will see nonsequential values in the Count for missed door events. The last sent message appears to correctly reflect the state of the door, regardless of previously missed messages. - -A heartbeat message is automatically sent every 24 hours (+ 5 seconds) when idle, restating the door condition. diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lgt92.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lgt92.mdx deleted file mode 100644 index 6b2d53267..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lgt92.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -id: lgt92 -hide_title: true -title: LGT92 -description: LoRaWAN GPS Tracker with 9-axis accelerometer-LGT92 -image: img/use-the-network/devices/ready-to-use/dragino/lgt92.jpg -sidebar_label: LGT92 -slug: /use-the-network/devices/ready-to-use/dragino/lgt92 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LGT92 - -LoRaWAN GPS Tracker with 9-axis accelerometer-LGT92 - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/142-lgt-92.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LGT_92/) -- [Configure on Console](/use-the-network/coverage-mapping/mappers-quickstart) - -### Specifications - -#### Sensors: - -- motion - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lht65.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lht65.mdx deleted file mode 100644 index 333a6f232..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lht65.mdx +++ /dev/null @@ -1,162 +0,0 @@ ---- -id: lht65 -hide_title: true -sidebar_label: LHT65 -description: LoRaWAN Temperature & Humidity sensor -image: img/use-the-network/devices/ready-to-use/dragino/lht65.jpg -slug: /use-the-network/devices/ready-to-use/dragino/lht65 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Dragino LHT65 - - - -Multi Sensor Device with Built in Temperature and Humidity Sensor - -### Introduction - -The Dragino LHT65 is a multi-sensor device which includes a built in temperature -and humidity sensor as well as an external sensor connector which supports -sensors such as temperature, soil moisture, tilting, and illumination. The -device includes a non-chargeable battery that can last for more than 10 years. - -### Resources - -[Product Page](https://www.dragino.com/products/lora-lorawan-end-node/item/151-lht65.html) - -[Datasheet](https://www.dragino.com/downloads/downloads/LHT65/Datasheet_LHT65_LoRaWAN_Temperature_Humidity_Sensor.pdf) - -[Manual](https://www.dragino.com/downloads/downloads/LHT65/UserManual/LHT65_Temperature_Humidity_Sensor_UserManual_v1.8.0.pdf) - -### Add Device to Console - -To start, you'll need to add your device to Console. You should have been -provided with a DevEUI, AppEUI, and AppKey inside the device packaging. Follow -our [quick start for instructions](/use-the-network/console/adding-devices) on -how to add a new device to Console. - -### Join Device to Network - -Your device will be in a deep sleep mode when you receive it. To activate the -device and place it in a normal operating state, hold down the ACT button for -three seconds until you see the LED blink green five times quickly. The -operating mode table is shown below for reference. - - - -The device should now begin attempting to join the network. Within a minute or -two you should see an activation event on the Console device page as shown -below. The device LED will also show solid green for five seconds after it has -joined. - - - -Once you have seen an event similar to above, your device is now joined to the -network and will send its sensor values every ten minutes by default. The -transmit frequency and many more settings can be changed, please refer to the -manual for instructions. - -### myDevices Cayenne - -If you would like to easily view your device's data on a web or mobile dashboard -for free, this device is supported out of the box by myDevices Cayenne via the -integration on Console. - -To add the LHT65 to myDevices Cayenne, you do not need to set up a Decode script -as described below. Cayenne takes the encoded payload directly and parses the -temperature and other data elements from it. - -Be careful to select **Helium** when adding the LHT65 to Cayenne. -As described [here](https://docs.mydevices.com/docs/lorawan/helium), select -1. "Add new..." -2. "Device/Widget" -3. "LoRa" -4. "Helium" -5. select Dragino LHT65 - -On the Helium Console, select `Flow` and directly connect the LHT65 Device to the -Cayenne Integration. Do not use a Decoder. - -### Decode Device Payload - -When this device transmits its data, it does so in a space efficient manner by -packing the bytes of data in a specific way so that no space is wasted, learn -more about this in [our short primer](/use-the-network/console/functions). The -manufacture of this device, Dragino, is using their own encoding scheme to -define which bytes hold which piece of data. Below is a table taken from the -manual showing the size and location of each piece of data. - - - -If you would like to decode the device payload to view it in Console or send to -your own application, this section will show you how. We'll be using a Console -Function Decoder to unpack the device payload into a human readable form, you -can learn more about Functions in general here). - -#### Create Function Decoder - -Lets begin by creating a new custom function decoder. First enter a name, select -decoder for function type, and finally custom script since we'll be inputting -our own script. Next, remove the template custom script, and copy and paste the -entire script found -[here](https://www.dragino.com/downloads/downloads/LHT65/payload_decode/ttn_payload_decode_v1.7.txt) -into the script editor. Last, create a label that we'll use to attach this -decoder to the device with. - - - -#### Attaching Function Decoder - -Next navigate to the device page and attach the label we just created for the -function decoder as shown below. - - - -#### Viewing Decoded Device Data - -Once you have attached the decoder we can now open the Debug window to view the -decoded device payload in the received uplink. You can learn more about the -Debug tool here. To open the Debug window just click on the bug icon on the -right side of the device page. Once you have the Debug window open you can wait -for the next packet to transmit or force a manual transmission by holding down -the ACT button for more then one second and less then three. You'll see the LED -turn green while you hold it down and then it should turn red briefly after -releasing. You should see the uplink message with the decoded fields as shown -below. - - - -### Sending Device Payload to Your Application - -To learn more about how to send the device data payload to your own application -checkout the Console integrations here. diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lse01.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lse01.mdx deleted file mode 100644 index e0c9f9f1d..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lse01.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -id: lse01 -hide_title: true -title: LSE01 -description: LoRaWAN Soil Moisture & EC Sensor -image: img/use-the-network/devices/ready-to-use/dragino/lse01.jpg -sidebar_label: LSE01 -slug: /use-the-network/devices/ready-to-use/dragino/lse01 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LSE01 - -LoRaWAN Soil Moisture & EC Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/159-lse01.html) -- [Datasheet](http://www.dragino.com/products/lora-lorawan-end-node/item/159-lse01.html) - -### Specifications - -#### Sensors: - -- moisture -- conductivity - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lsn50-v2.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lsn50-v2.mdx deleted file mode 100644 index 859f0453c..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lsn50-v2.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -id: lsn50-v2 -hide_title: true -title: LSN50-V2 -description: Waterproof Long Range Wireless LoRa Sensor Node. -image: img/use-the-network/devices/ready-to-use/dragino/lsn50-v2.jpg -sidebar_label: LSN50-V2 -slug: /use-the-network/devices/ready-to-use/dragino/lsn50-v2 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LSN50-V2 - -Waterproof Long Range Wireless LoRa Sensor Node. - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/155-lsn50-v2.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LSN50-LoRaST/) - -### Specifications - -#### Sensors: - -- temperature - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lsn50v2-d20.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lsn50v2-d20.mdx deleted file mode 100644 index 05dd3e932..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lsn50v2-d20.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -id: lsn50v2-d20 -hide_title: true -title: LSN50v2-D20 -description: - LoRaWAN Waterproof / Outdoor Temperature Sensor for Air, Liquid or Object. -image: img/use-the-network/devices/ready-to-use/dragino/lsn50v2-d20-00.jpg -sidebar_label: LSN50v2-D20 -slug: /use-the-network/devices/ready-to-use/dragino/lsn50v2-d20 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LSN50v2-D20 - -LoRaWAN Waterproof / Outdoor Temperature Sensor for Air, Liquid or Object. - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/168-lsn50v2-d20.html) -- [Datasheet](http://www.dragino.com/products/lora-lorawan-end-node/item/168-lsn50v2-d20.html) - -### Specifications - -#### Sensors: - -- temperature - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lsn50v2-s31.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lsn50v2-s31.mdx deleted file mode 100644 index d6b0643fa..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lsn50v2-s31.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -id: lsn50v2-s31 -hide_title: true -title: LSN50v2-S31 -description: LoRaWAN Temperature & Humidity Sensor -image: img/use-the-network/devices/ready-to-use/dragino/lsn50v2-s31-00.jpg -sidebar_label: LSN50v2-S31 -slug: /use-the-network/devices/ready-to-use/dragino/lsn50v2-s31 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LSN50v2-S31 - -LoRaWAN Temperature & Humidity Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/169-lsn50v2-s31.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/LSN50v2-S31/) - -### Specifications - -#### Sensors: - -- temperature -- humidity - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lt22222-l.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lt22222-l.mdx deleted file mode 100644 index 7124ea7ba..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lt22222-l.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -id: lt22222-l -hide_title: true -title: LT22222-L -description: LoRaWAN I/O controller. -image: img/use-the-network/devices/ready-to-use/dragino/lt22222-l.jpg -sidebar_label: LT22222-L -slug: /use-the-network/devices/ready-to-use/dragino/lt22222-l ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LT22222-L - -LoRaWAN I/O controller. - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/156-lt-22222-l.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LT_LoRa_IO_Controller/LT22222-L/) - -### Specifications - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lt33222-l.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lt33222-l.mdx deleted file mode 100644 index bac98fbbf..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lt33222-l.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -id: lt33222-l -hide_title: true -title: LT332222-L -description: LoRaWAN I/O controller. -image: img/use-the-network/devices/ready-to-use/dragino/lt33222-l.jpg -sidebar_label: LT332222-L -slug: /use-the-network/devices/ready-to-use/dragino/lt33222-l ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LT332222-L - -LoRaWAN I/O controller. - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/138-lt-33222-l.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LT_LoRa_IO_Controller/LT33222-L/) -- [Reseller - Dragino](http://www.dragino.com/) - -### Specifications - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/lwl01.mdx b/docs/use-the-network/devices/ready-to-use/dragino/lwl01.mdx deleted file mode 100644 index 5ee9b01fc..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/lwl01.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -id: lwl01 -hide_title: true -title: LWL01 -description: LoRaWAN Water Leak Sensor -image: img/use-the-network/devices/ready-to-use/dragino/lwl01.jpg -sidebar_label: LWL01 -slug: /use-the-network/devices/ready-to-use/dragino/lwl01 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LWL01 - -LoRaWAN Water Leak Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/158-lwl01.html) -- [Datasheet](http://www.dragino.com/products/lora-lorawan-end-node/item/158-lwl01.html) - -### Specifications - -#### Sensors: - -- water - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/rs485-bl.mdx b/docs/use-the-network/devices/ready-to-use/dragino/rs485-bl.mdx deleted file mode 100644 index fb04c3ebb..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/rs485-bl.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -id: rs485-bl -hide_title: true -title: RS485-BL -description: LoRaWAN RS485/UART Converter -- WaterProof Battery Powered -image: img/use-the-network/devices/ready-to-use/dragino/rs485-bl.jpg -sidebar_label: RS485-BL -slug: /use-the-network/devices/ready-to-use/dragino/rs485-bl ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## RS485-BL - -LoRaWAN RS485/UART Converter -- WaterProof Battery Powered - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/167-rs485-bl.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/RS485-BL/&file=Datasheet_RS485-BL_WaterProof_BatteryPower_RS485_UART_to_LoRaWAN_Converter.pdf) - -### Specifications - -#### Dimensions: - -- width: 50 mm -- length: 130 mm -- height: 45 mm - -#### Weight: - -- 150 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/dragino/rs485-ln.mdx b/docs/use-the-network/devices/ready-to-use/dragino/rs485-ln.mdx deleted file mode 100644 index 56ea76a96..000000000 --- a/docs/use-the-network/devices/ready-to-use/dragino/rs485-ln.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -id: rs485-ln -hide_title: true -title: RS485-LN -description: An RS485/Modbus to LoRaWAN Converter -image: img/use-the-network/devices/ready-to-use/dragino/rs485-ln.jpg -sidebar_label: RS485-LN -slug: /use-the-network/devices/ready-to-use/dragino/rs485-ln ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## RS485-LN - -An RS485/Modbus to LoRaWAN Converter - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/154-rs485-ln.html) -- [Datasheet](http://www.dragino.com/products/lora-lorawan-end-node/item/154-rs485-ln.html) - -### Specifications - -#### Dimensions: - -- width: 110 mm -- length: 90 mm -- height: 25 mm - -#### Weight: - -- 210 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/enthutech/lbt1.mdx b/docs/use-the-network/devices/ready-to-use/enthutech/lbt1.mdx deleted file mode 100644 index 520518000..000000000 --- a/docs/use-the-network/devices/ready-to-use/enthutech/lbt1.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -id: lbt1 -hide_title: true -title: LBT1 -description: LoRaWAN BLE Indoor Tracker -image: img/use-the-network/devices/ready-to-use/enthutech/lbt1.jpg -sidebar_label: LBT1 -slug: /use-the-network/devices/ready-to-use/enthutech/lbt1 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LBT1 - -LoRaWAN BLE Indoor Tracker - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/165-lbt1.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/LBT1/) -- [Reseller - Enthu Technology Solutions India Pvt Ltd](https://www.enthutech.in/zh_HK/shop/category/lora-devices-2) - -### Specifications - -#### Sensors: - -- motion - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/enthutech/ldds75.mdx b/docs/use-the-network/devices/ready-to-use/enthutech/ldds75.mdx deleted file mode 100644 index f03262b56..000000000 --- a/docs/use-the-network/devices/ready-to-use/enthutech/ldds75.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -id: ldds75 -hide_title: true -title: LDDS75 -description: LoRaWAN Distance Detection Sensor -image: img/use-the-network/devices/ready-to-use/enthutech/ldds75.jpg -sidebar_label: LDDS75 -slug: /use-the-network/devices/ready-to-use/enthutech/ldds75 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LDDS75 - -LoRaWAN Distance Detection Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/161-ldds75.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/LDDS75/) -- [Reseller - Enthu Technology Solutions India Pvt Ltd](https://www.enthutech.in/zh_HK/shop/category/lora-devices-2) - -### Specifications - -#### Sensors: - -- distance - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/enthutech/lds01.mdx b/docs/use-the-network/devices/ready-to-use/enthutech/lds01.mdx deleted file mode 100644 index d135cd8d7..000000000 --- a/docs/use-the-network/devices/ready-to-use/enthutech/lds01.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -id: lds01 -hide_title: true -title: LDS01 -description: LoRaWAN Door Sensor -image: img/use-the-network/devices/ready-to-use/enthutech/lds01.jpg -sidebar_label: LDS01 -slug: /use-the-network/devices/ready-to-use/enthutech/lds01 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LDS01 - -LoRaWAN Door Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/157-lds01.html) -- [Datasheet](http://www.dragino.com/products/lora-lorawan-end-node/item/157-lds01.html) -- [Reseller - Enthu Technology Solutions India Pvt Ltd](https://www.enthutech.in/zh_HK/shop/category/lora-devices-2) - -### Specifications - -#### Sensors: - -- magnetometer - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/enthutech/ldss20.mdx b/docs/use-the-network/devices/ready-to-use/enthutech/ldss20.mdx deleted file mode 100644 index ec38725c9..000000000 --- a/docs/use-the-network/devices/ready-to-use/enthutech/ldss20.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -id: ldss20 -hide_title: true -title: LDDS20 -description: LoRaWAN Liquid Level Sensor -image: img/use-the-network/devices/ready-to-use/enthutech/ldss20.jpg -sidebar_label: LDDS20 -slug: /use-the-network/devices/ready-to-use/enthutech/ldss20 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LDDS20 - -LoRaWAN Liquid Level Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/164-ldds20.html) -- [Datasheet](http://www.dragino.com/products/lora-lorawan-end-node/item/164-ldds20.html) -- [Reseller - Enthu Technology Solutions India Pvt Ltd](https://www.enthutech.in/zh_HK/shop/category/lora-devices-2) - -### Specifications - -#### Sensors: - -- level - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/enthutech/lse01.mdx b/docs/use-the-network/devices/ready-to-use/enthutech/lse01.mdx deleted file mode 100644 index d5fefb2b7..000000000 --- a/docs/use-the-network/devices/ready-to-use/enthutech/lse01.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -id: lse01 -hide_title: true -title: LSE01 -description: LoRaWAN Soil Moisture & EC Sensor -image: img/use-the-network/devices/ready-to-use/enthutech/lse01.jpg -sidebar_label: LSE01 -slug: /use-the-network/devices/ready-to-use/enthutech/lse01 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LSE01 - -LoRaWAN Soil Moisture & EC Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/159-lse01.html) -- [Datasheet](http://www.dragino.com/products/lora-lorawan-end-node/item/159-lse01.html) -- [Reseller - Enthu Technology Solutions India Pvt Ltd](https://www.enthutech.in/zh_HK/shop/category/lora-devices-2) - -### Specifications - -#### Sensors: - -- moisture -- conductivity - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/enthutech/lsn50v2-d20.mdx b/docs/use-the-network/devices/ready-to-use/enthutech/lsn50v2-d20.mdx deleted file mode 100644 index b1301417d..000000000 --- a/docs/use-the-network/devices/ready-to-use/enthutech/lsn50v2-d20.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -id: lsn50v2-d20 -hide_title: true -title: LSN50v2-D20 -description: - LoRaWAN Waterproof / Outdoor Temperature Sensor for Air, Liquid or Object. -image: img/use-the-network/devices/ready-to-use/enthutech/lsn50v2-d20-00.jpg -sidebar_label: LSN50v2-D20 -slug: /use-the-network/devices/ready-to-use/enthutech/lsn50v2-d20 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LSN50v2-D20 - -LoRaWAN Waterproof / Outdoor Temperature Sensor for Air, Liquid or Object. - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/168-lsn50v2-d20.html) -- [Datasheet](http://www.dragino.com/products/lora-lorawan-end-node/item/168-lsn50v2-d20.html) -- [Reseller - Enthu Technology Solutions India Pvt Ltd](https://www.enthutech.in/zh_HK/shop/category/lora-devices-2) - -### Specifications - -#### Sensors: - -- temperature - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/enthutech/lsn50v2-s31.mdx b/docs/use-the-network/devices/ready-to-use/enthutech/lsn50v2-s31.mdx deleted file mode 100644 index 4664d4764..000000000 --- a/docs/use-the-network/devices/ready-to-use/enthutech/lsn50v2-s31.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -id: lsn50v2-s31 -hide_title: true -title: LSN50v2-S31 -description: LoRaWAN Temperature & Humidity Sensor -image: img/use-the-network/devices/ready-to-use/enthutech/lsn50v2-s31-00.jpg -sidebar_label: LSN50v2-S31 -slug: /use-the-network/devices/ready-to-use/enthutech/lsn50v2-s31 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LSN50v2-S31 - -LoRaWAN Temperature & Humidity Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/169-lsn50v2-s31.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/LSN50v2-S31/) -- [Reseller - Enthu Technology Solutions India Pvt Ltd](https://www.enthutech.in/zh_HK/shop/category/lora-devices-2) - -### Specifications - -#### Sensors: - -- temperature -- humidity - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/enthutech/lwl01.mdx b/docs/use-the-network/devices/ready-to-use/enthutech/lwl01.mdx deleted file mode 100644 index 3c82e1a2e..000000000 --- a/docs/use-the-network/devices/ready-to-use/enthutech/lwl01.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -id: lwl01 -hide_title: true -title: LWL01 -description: LoRaWAN Water Leak Sensor -image: img/use-the-network/devices/ready-to-use/enthutech/lwl01.jpg -sidebar_label: LWL01 -slug: /use-the-network/devices/ready-to-use/enthutech/lwl01 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LWL01 - -LoRaWAN Water Leak Sensor - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/158-lwl01.html) -- [Datasheet](http://www.dragino.com/products/lora-lorawan-end-node/item/158-lwl01.html) -- [Reseller - Enthu Technology Solutions India Pvt Ltd](https://www.enthutech.in/zh_HK/shop/category/lora-devices-2) - -### Specifications - -#### Sensors: - -- water - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/enthutech/rs485-bl.mdx b/docs/use-the-network/devices/ready-to-use/enthutech/rs485-bl.mdx deleted file mode 100644 index fc9df2c8d..000000000 --- a/docs/use-the-network/devices/ready-to-use/enthutech/rs485-bl.mdx +++ /dev/null @@ -1,44 +0,0 @@ ---- -id: rs485-bl -hide_title: true -title: RS485-BL -description: LoRaWAN RS485/UART Converter -- WaterProof Battery Powered -image: img/use-the-network/devices/ready-to-use/enthutech/rs485-bl.jpg -sidebar_label: RS485-BL -slug: /use-the-network/devices/ready-to-use/enthutech/rs485-bl ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## RS485-BL - -LoRaWAN RS485/UART Converter -- WaterProof Battery Powered - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/167-rs485-bl.html) -- [Datasheet](http://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/RS485-BL/&file=Datasheet_RS485-BL_WaterProof_BatteryPower_RS485_UART_to_LoRaWAN_Converter.pdf) -- [Reseller - Enthu Technology Solutions India Pvt Ltd](https://www.enthutech.in/zh_HK/shop/category/lora-devices-2) - -### Specifications - -#### Dimensions: - -- width: 50 mm -- length: 130 mm -- height: 45 mm - -#### Weight: - -- 150 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/enthutech/rs485-ln.mdx b/docs/use-the-network/devices/ready-to-use/enthutech/rs485-ln.mdx deleted file mode 100644 index c7aa83ccd..000000000 --- a/docs/use-the-network/devices/ready-to-use/enthutech/rs485-ln.mdx +++ /dev/null @@ -1,44 +0,0 @@ ---- -id: rs485-ln -hide_title: true -title: RS485-LN -description: An RS485/Modbus to LoRaWAN Converter -image: img/use-the-network/devices/ready-to-use/enthutech/rs485-ln.jpg -sidebar_label: RS485-LN -slug: /use-the-network/devices/ready-to-use/enthutech/rs485-ln ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## RS485-LN - -An RS485/Modbus to LoRaWAN Converter - - - -### Resources - -- [Product Page](http://www.dragino.com/products/lora-lorawan-end-node/item/154-rs485-ln.html) -- [Datasheet](http://www.dragino.com/products/lora-lorawan-end-node/item/154-rs485-ln.html) -- [Reseller - Enthu Technology Solutions India Pvt Ltd](https://www.enthutech.in/zh_HK/shop/product/rs485-ln-modbus-to-lorawan-converter-415) - -### Specifications - -#### Dimensions: - -- width: 110 mm -- length: 90 mm -- height: 25 mm - -#### Weight: - -- 210 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/imst/ioke868.mdx b/docs/use-the-network/devices/ready-to-use/imst/ioke868.mdx deleted file mode 100644 index 16c6a41f2..000000000 --- a/docs/use-the-network/devices/ready-to-use/imst/ioke868.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: ioke868 -hide_title: true -title: iOKE868 -description: - The iOKE868 LoRaWAN® optical reading head unit leverages the long range and - low power consumption of LoRa® to provide real-time data monitoring of energy - consumption and secure connectivity to the LoRaWAN® IoT network. -image: img/use-the-network/devices/ready-to-use/imst/io881a.jpg -sidebar_label: iOKE868 -slug: /use-the-network/devices/ready-to-use/imst/ioke868 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## iOKE868 - -The iOKE868 LoRaWAN® optical reading head unit leverages the long range and low -power consumption of LoRa® to provide real-time data monitoring of energy -consumption and secure connectivity to the LoRaWAN® IoT network. - - - -### Resources - -- [Product Page](https://wireless-solutions.de/products/lora-solutions-by-imst/ioke868-lorawan-optical-unit/) -- [Datasheet](https://wireless-solutions.de/downloadfile/ioke868-documents/) -- [Video](https://youtu.be/QeGTIGgXy8U) - -### Specifications - -#### Dimensions: - -- width: 34 mm -- length: 47 mm -- height: 22 mm - -#### Weight: - -- 33 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/imst/range-extender.mdx b/docs/use-the-network/devices/ready-to-use/imst/range-extender.mdx deleted file mode 100644 index 4c9592d6b..000000000 --- a/docs/use-the-network/devices/ready-to-use/imst/range-extender.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: range-extender -hide_title: true -title: Wireless M-Bus Range Extender -description: - The Wireless M-Bus Range Extender is a compact and cost-effective device that - collects wireless M-Bus messages from utility meters and forwards them to a - LoRaWAN® network. -image: img/use-the-network/devices/ready-to-use/imst/range-extender.jpg -sidebar_label: Wireless M-Bus Range Extender -slug: /use-the-network/devices/ready-to-use/imst/range-extender ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless M-Bus Range Extender - -The Wireless M-Bus Range Extender is a compact and cost-effective device that -collects wireless M-Bus messages from utility meters and forwards them to a -LoRaWAN® network. - - - -### Resources - -- [Product Page](https://wireless-solutions.de/products/wireless-m-bus-range-extender-with-lorawan) -- [Datasheet](https://wireless-solutions.de/downloadfile/wireless-m-bus-range-extender/) -- [Video](https://youtu.be/6d6q4RrCpS0) - -### Specifications - -#### Dimensions: - -- width: 92 mm -- length: 145 mm -- height: 55 mm - -#### Weight: - -- 335 grams - -#### Battery: - -- type: SL-2880/S -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/iotsens/airquality-device.mdx b/docs/use-the-network/devices/ready-to-use/iotsens/airquality-device.mdx deleted file mode 100644 index e5043defb..000000000 --- a/docs/use-the-network/devices/ready-to-use/iotsens/airquality-device.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: airquality-device -hide_title: true -title: Air Quality Monitor -description: - Device with a set of environmental sensors capable of collecting different - variables to evaluate the conditions of the air that surrounds it. This device - measures the concentration of CO, SO2, NO2, O3, NO, H2S, CO2, the particles - suspended in the air (PM2.5 and PM10) and TVOC. Developed based on the - guidelines set forth in the framework Directive 96/62/EC of the council and - all its Daughter Directives. -image: img/use-the-network/devices/ready-to-use/iotsens/airquality-device.png -sidebar_label: Air Quality Monitor -slug: /use-the-network/devices/ready-to-use/iotsens/airquality-device ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Air Quality Monitor - -Device with a set of environmental sensors capable of collecting different -variables to evaluate the conditions of the air that surrounds it. This device -measures the concentration of CO, SO2, NO2, O3, NO, H2S, CO2, the particles -suspended in the air (PM2.5 and PM10) and TVOC. Developed based on the -guidelines set forth in the framework Directive 96/62/EC of the council and all -its Daughter Directives. - - - -### Resources - -- [Product Page](http://hardware.iotsens.com/datasheets/IoTsens-Datasheet-Air_quality_Monitor_EN.pdf) -- [Datasheet](http://hardware.iotsens.com/datasheets/IoTsens-Datasheet-Air_quality_Monitor_EN.pdf) - -### Specifications - -#### Sensors: - -- co -- so2 -- no2 -- False -- o3 -- h2s -- co2 -- tvoc -- temperature -- humidity -- barometer -- dust -- pm2.5 -- pm10 - -#### Dimensions: - -- width: 120 mm -- length: 250 mm -- height: 60 mm - -#### Weight: - -- 400 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/iotsens/lidar-device.mdx b/docs/use-the-network/devices/ready-to-use/iotsens/lidar-device.mdx deleted file mode 100644 index 6212603c4..000000000 --- a/docs/use-the-network/devices/ready-to-use/iotsens/lidar-device.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: lidar-device -hide_title: true -title: Optical Distance Monitor -description: - Device with integrated LIDAR sensor working with TOF technology for real data - collection on the filling level. It becomes an optimal tool in waste - management and liquid level detection in tanks among other applications. -image: img/use-the-network/devices/ready-to-use/iotsens/lidar-device.png -sidebar_label: Optical Distance Monitor -slug: /use-the-network/devices/ready-to-use/iotsens/lidar-device ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Optical Distance Monitor - -Device with integrated LIDAR sensor working with TOF technology for real data -collection on the filling level. It becomes an optimal tool in waste management -and liquid level detection in tanks among other applications. - - - -### Resources - -- [Product Page](http://hardware.iotsens.com/datasheets/IoTsens-Datasheet-Optical_Distance-Monitor_EN.pdf) -- [Datasheet](http://hardware.iotsens.com/datasheets/IoTsens-Datasheet-Optical_Distance-Monitor_EN.pdf) - -### Specifications - -#### Sensors: - -- distance -- battery -- temperature - -#### Dimensions: - -- width: 190 mm -- length: 90 mm -- height: 80 mm - -#### Weight: - -- 400 grams - -#### Battery: - -- type: D -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/iotsens/sound-device.mdx b/docs/use-the-network/devices/ready-to-use/iotsens/sound-device.mdx deleted file mode 100644 index 7b9598762..000000000 --- a/docs/use-the-network/devices/ready-to-use/iotsens/sound-device.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: sound-device -hide_title: true -title: Sound Level Meter -description: - Device able to monitor noise levels due to its integrated microphone. It can - analyze the surrounding ambient sound A-weighted, in the audible frequency - spectrum for the human ear, showing the collected data in dBA. Developed based - on the guidelines set out in Directive 2002/49 / CE of the European Parliament - and of the Council, of June 25, 2002 and Law 37/2003 of November 17 published - in the BOE of Spain both for noise pollution -image: img/use-the-network/devices/ready-to-use/iotsens/sound-device.png -sidebar_label: Sound Level Meter -slug: /use-the-network/devices/ready-to-use/iotsens/sound-device ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Sound Level Meter - -Device able to monitor noise levels due to its integrated microphone. It can -analyze the surrounding ambient sound A-weighted, in the audible frequency -spectrum for the human ear, showing the collected data in dBA. Developed based -on the guidelines set out in Directive 2002/49 / CE of the European Parliament -and of the Council, of June 25, 2002 and Law 37/2003 of November 17 published in -the BOE of Spain both for noise pollution - - - -### Resources - -- [Product Page](http://hardware.iotsens.com/datasheets/IoTsens-Datasheet-Sound_Sensor-Monitor_EN.pdf) -- [Datasheet](http://hardware.iotsens.com/datasheets/IoTsens-Datasheet-Sound_Sensor-Monitor_EN.pdf) - -### Specifications - -#### Sensors: - -- sound -- battery -- temperature - -#### Dimensions: - -- width: 120 mm -- length: 250 mm -- height: 60 mm - -#### Weight: - -- 610 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/izinto/izi-io-4840.mdx b/docs/use-the-network/devices/ready-to-use/izinto/izi-io-4840.mdx deleted file mode 100644 index 965cc0eac..000000000 --- a/docs/use-the-network/devices/ready-to-use/izinto/izi-io-4840.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: izi-io-4840 -hide_title: true -title: izi-io 4840 -description: - Powerful Multi-I/O Edge Computing Controller with LoRaWAN. The top-hat rail - mounted device features 8 analog / RTD / digital inputs, 4 digital outputs as - well as industry-standard bus interfaces such as CAN and Modbus. Built-in Soft - PLC can process data on the device for standalone control purposes and - efficient LoRaWAN usage. External power supply with 8..30V. -image: img/use-the-network/devices/ready-to-use/izinto/izi-io-4840-front-tr.png -sidebar_label: izi-io 4840 -slug: /use-the-network/devices/ready-to-use/izinto/izi-io-4840 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## izi-io 4840 - -Powerful Multi-I/O Edge Computing Controller with LoRaWAN. The top-hat rail -mounted device features 8 analog / RTD / digital inputs, 4 digital outputs as -well as industry-standard bus interfaces such as CAN and Modbus. Built-in Soft -PLC can process data on the device for standalone control purposes and efficient -LoRaWAN usage. External power supply with 8..30V. - - - -### Resources - -- [Product Page](https://www.izinto.online/izi-io/) -- [Datasheet](https://www.izinto.online/wp-content/uploads/2020/01/izi-io-Datenblatt.pdf) - -### Specifications - -#### Sensors: - -- link -- temperature - -#### Dimensions: - -- width: 22.5 mm -- length: 119 mm -- height: 101 mm - -#### Weight: - -- 160 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/laird/rs1xx-ext-multi-sensor.mdx b/docs/use-the-network/devices/ready-to-use/laird/rs1xx-ext-multi-sensor.mdx deleted file mode 100644 index 9647b7111..000000000 --- a/docs/use-the-network/devices/ready-to-use/laird/rs1xx-ext-multi-sensor.mdx +++ /dev/null @@ -1,74 +0,0 @@ ---- -id: rs1xx-ext-multi-sensor -hide_title: true -title: Sentrius RS1xx Multi Sensor -description: Multi Sensor, Integrated Temperature, Humidity Sensor with External - OpenClosed Proximity #455-00040/455-00041/455-00071/455-00072/455-00073/455-00074/455-00075/455-00100 -image: img/use-the-network/devices/ready-to-use/laird/rs1xx-ext-sensor.jpg -sidebar_label: Sentrius RS1xx Multi Sensor -slug: /use-the-network/devices/ready-to-use/laird/rs1xx-ext-multi-sensor ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Sentrius RS1xx Multi Sensor - -Multi Sensor, Integrated Temperature, Humidity Sensor with External OpenClosed -Proximity -#455-00040/455-00041/455-00071/455-00072/455-00073/455-00074/455-00075/455-00100 - - - -### Resources - -- [Product Page](https://www.lairdconnect.com/wireless-modules/lorawan-solutions/sentrius-rs1xx-lora-enabled-sensors) -- [Datasheet](https://www.lairdconnect.com/documentation/sentrius-rs1xx-ext-openclosed-and-int-temphumidity-sensor-user-guide-v11) -- [Reseller - Digi-Key (RS1XX Open/Closed sensor)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00046/11587434) -- [Reseller - Digi-Key (RS1XX North America US902-928 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00040/11587435?s=N4IgTCBcDaICwFYEFoAM66pAXQL5A) -- [Reseller - Digi-Key (RS1XX Europe EU863-870 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00041/11587436?s=N4IgTCBcDaICwFYEFoAM64EYQF0C%2BQA) -- [Reseller - Digi-Key (RS1XX Australia AU915-928 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00074/11587439?s=N4IgTCBcDaICwFYEFoAM6DscQF0C%2BQA) -- [Reseller - Digi-Key (RS1XX Australia AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00075/11587430?s=N4IgTCBcDaICwFYEFoAM6DsCQF0C%2BQA) -- [Reseller - Digi-Key (RS1XX New Zealand AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00072?qs=%2Fha2pyFaduibvO2WQuVQrzQ%2FYIEGr87bEluXxM57rcvZaOa639Wk6A%3D%3D) -- [Reseller - Digi-Key (RS1XX Taiwan AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00071/11587432?s=N4IgTCBcDaICwFYEFoAM6DsBGEBdAvkA) -- [Reseller - Digi-Key (RS1XX Hong Kong AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00073/11587437?s=N4IgTCBcDaICwFYEFoAM6DsBmEBdAvkA) -- [Reseller - Mouser (RS1XX Open/Closed sensor)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00046?qs=GBLSl2AkiruTG6IIfppszA%3D%3D) -- [Reseller - Mouser (RS1XX North America US902-928 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00040?qs=%2Fha2pyFadujcfqkV6S08jiSXCzhxbhXQdr5RSRfmbgpMHwKHbt%2FnQA%3D%3D) -- [Reseller - Mouser (RS1XX Europe EU863-870 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00041?qs=%2Fha2pyFadujcfqkV6S08jqTkOgnnf%2FM2NJi0egiQj5eZMkPgU6nylQ%3D%3D) -- [Reseller - Mouser (RS1XX Australia AU915-928 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00074?qs=%2Fha2pyFaduibvO2WQuVQr6L23ZY4qm36ukfMQaLZRPwDJWRJz8ISUw%3D%3D) -- [Reseller - Mouser (RS1XX Australia AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00075?qs=%2Fha2pyFaduibvO2WQuVQr6FKYy23wqKDuwaQQo5owHaEMELqc2%252BOrw%3D%3D) -- [Reseller - Mouser (RS1XX New Zealand AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00072?qs=%2Fha2pyFaduibvO2WQuVQrzQ%2FYIEGr87bEluXxM57rcvZaOa639Wk6A%3D%3D) -- [Reseller - Mouser (RS1XX Taiwan AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00071?qs=%2Fha2pyFaduibvO2WQuVQr3nEdiR8D4MKEkVjA2fe3ayipLca8DHuOA%3D%3D) -- [Reseller - Mouser (RS1XX Hong Kong AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00073?qs=%2Fha2pyFaduibvO2WQuVQr4OIloatoKlQpzurOPkkLlZxhUYQg9MWNQ%3D%3D) -- [Reseller - Mouser (RS1XX Singapore AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00100?qs=%2Fha2pyFaduhXFoy1WA9XVxZatNZvadjEhfoeza7GIMO44IygCH1%252BkQ%3D%3D) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- proximity - -#### Dimensions: - -- width: 91 mm -- length: 116 mm -- height: 34 mm - -#### Weight: - -- 185 grams - -#### Battery: - -- type: AA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/laird/rs1xx-ext-temp-1w-sensor.mdx b/docs/use-the-network/devices/ready-to-use/laird/rs1xx-ext-temp-1w-sensor.mdx deleted file mode 100644 index 9e6e32fb5..000000000 --- a/docs/use-the-network/devices/ready-to-use/laird/rs1xx-ext-temp-1w-sensor.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -id: rs1xx-ext-temp-1w-sensor -hide_title: true -title: Sentrius RS1xx Ext Temp 1W Sensor -description: External 1-Wire Temperature Sensor #455-00069/455-00070/455-00064/455-00065/455-00066/455-00067/455-00068/455-00097 -image: img/use-the-network/devices/ready-to-use/laird/rs1xx-ext-sensor.jpg -sidebar_label: Sentrius RS1xx Ext Temp 1W Sensor -slug: /use-the-network/devices/ready-to-use/laird/rs1xx-ext-temp-1w-sensor ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Sentrius RS1xx Ext Temp 1W Sensor - -External 1-Wire Temperature Sensor -#455-00069/455-00070/455-00064/455-00065/455-00066/455-00067/455-00068/455-00097 - - - -### Resources - -- [Product Page](https://www.lairdconnect.com/wireless-modules/lorawan-solutions/sentrius-rs1xx-lora-enabled-sensors) -- [Datasheet](https://www.lairdconnect.com/node/11151) -- [Reseller - Digi-Key (RS1XX External Temperature Probe)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00036/10639026) -- [Reseller - Digi-Key (RS1XX North America US902-928 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00070/10639014?s=N4IgTCBcDaICwFYEFoAM6DsqQF0C%2BQA) -- [Reseller - Digi-Key (RS1XX Europe EU863-870 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00069/10639020?s=N4IgTCBcDaICwFYEFoAM6BsBOEBdAvkA) -- [Reseller - Digi-Key (RS1XX Australia AU915-928 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00067/10639012?s=N4IgTCBcDaICwFYEFoAM6BsB2EBdAvkA) -- [Reseller - Digi-Key (RS1XX Australia AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00068/10639019?s=N4IgTCBcDaICwFYEFoAM6BsAOEBdAvkA) -- [Reseller - Digi-Key (RS1XX New Zealand AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00065/10639017?s=N4IgTCBcDaICwFYEFoAM6BsCQF0C%2BQA) -- [Reseller - Digi-Key (RS1XX Taiwan AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00064/10639016?s=N4IgTCBcDaICwFYEFoAM6BscQF0C%2BQA) -- [Reseller - Digi-Key (RS1XX Hong Kong AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00066/10639015?s=N4IgTCBcDaICwFYEFoAM6BsGQF0C%2BQA) -- [Reseller - Mouser (RS1XX External Temperature Probe)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00036?qs=BJlw7L4Cy7%2FCpdoOZjaWBw%3D%3D) -- [Reseller - Mouser (RS1XX North America US902-928 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00070?qs=%2Fha2pyFaduibvO2WQuVQr1EeKAajv6AbFp0GDHw2K7Nue1ZNsOqY2A%3D%3D) -- [Reseller - Mouser (RS1XX Europe EU863-870 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00069?qs=%2Fha2pyFaduiVPYR7juSnKxhKN8fEuaKhTTI7qHCC8n8q5GR5faUpRg%3D%3D) -- [Reseller - Mouser (RS1XX Australia AU915-928 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00067?qs=%2Fha2pyFaduiVPYR7juSnKyvINsVSrtl1q7t9skaNlR4zoIJjGv0R5g%3D%3D) -- [Reseller - Mouser (RS1XX Australia AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00068?qs=%2Fha2pyFaduiVPYR7juSnK28NraPxTJxXBk9iQuyGx4UFcwuqCIJ5OA%3D%3D) -- [Reseller - Mouser (RS1XX New Zealand AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00065?qs=%2Fha2pyFaduiVPYR7juSnK7AoEAY9Gb1zVqqKyBhCff9VwIfiRBR2bw%3D%3D) -- [Reseller - Mouser (RS1XX Taiwan AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00064?qs=%2Fha2pyFaduiVPYR7juSnK%2Fs3kMTPbvR5t7EtThrSWfQziE16HokG0w%3D%3D) -- [Reseller - Mouser (RS1XX Hong Kong AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00066?qs=%2Fha2pyFaduiVPYR7juSnK5hx9Xz%2F3qlXzfgFUvpyMasvkh%252BC0yiLHw%3D%3D) -- [Reseller - Mouser (RS1XX Singapore AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00097?qs=W%2FMpXkg%252BdQ6vfxfEP8u7cg%3D%3D) - -### Specifications - -#### Sensors: - -- temperature - -#### Dimensions: - -- width: 91 mm -- length: 131 mm -- height: 34 mm - -#### Weight: - -- 185 grams - -#### Battery: - -- type: AA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/laird/rs1xx-ext-temp-rtd-sensor.mdx b/docs/use-the-network/devices/ready-to-use/laird/rs1xx-ext-temp-rtd-sensor.mdx deleted file mode 100644 index e73446e32..000000000 --- a/docs/use-the-network/devices/ready-to-use/laird/rs1xx-ext-temp-rtd-sensor.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -id: rs1xx-ext-temp-rtd-sensor -hide_title: true -title: Sentrius RS1xx Ext Temp RTD Sensor -description: External RTD Temperature Sensor #455-00103/455-00104/455-00105/455-00106/455-00108/455-00109/455-00110/455-00111 -image: img/use-the-network/devices/ready-to-use/laird/rs1xx-ext-sensor.jpg -sidebar_label: Sentrius RS1xx Ext Temp RTD Sensor -slug: /use-the-network/devices/ready-to-use/laird/rs1xx-ext-temp-rtd-sensor ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Sentrius RS1xx Ext Temp RTD Sensor - -External RTD Temperature Sensor -#455-00103/455-00104/455-00105/455-00106/455-00108/455-00109/455-00110/455-00111 - - - -### Resources - -- [Product Page](https://www.lairdconnect.com/wireless-modules/lorawan-solutions/sentrius-rs1xx-lora-enabled-sensors) -- [Datasheet](https://www.lairdconnect.com/node/11151) -- [Reseller - Digi-Key (RS1XX RTD sensor)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00112/11691225) -- [Reseller - Digi-Key (RS1XX North America US902-928 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00103/11691229) -- [Reseller - Digi-Key (RS1XX Europe EU863-870 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00104/11691233) -- [Reseller - Digi-Key (RS1XX Australia AU915-928 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00110/11691226?s=N4IgTCBcDaICwFYEFoAMqCMHUgLoF8g) -- [Reseller - Digi-Key (RS1XX Australia AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00111/11691228?s=N4IgTCBcDaICwFYEFoAMqCMWQF0C%2BQA) -- [Reseller - Digi-Key (RS1XX New Zealand AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00106/11691231?s=N4IgTCBcDaICwFYEFoAMqCMqBsIC6AvkA) -- [Reseller - Digi-Key (RS1XX Taiwan AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00105/11691232?s=N4IgTCBcDaICwFYEFoAMqCMqEgLoF8g) -- [Reseller - Digi-Key (RS1XX Hong Kong AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00109/11691230) -- [Reseller - Mouser (RS1XX RTD sensor)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00112?qs=rI7uf1IzohSFux28s78pfg%3D%3D) -- [Reseller - Mouser (RS1XX North America US902-928 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00103?qs=%2Fha2pyFaduhXFoy1WA9XV2vBTzTp8vtDxz5gbLwKGuEHlaDNXcpGUA%3D%3D) -- [Reseller - Mouser (RS1XX Europe EU863-870 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00104?qs=%2Fha2pyFaduhXFoy1WA9XVzMYyci9zgKfqcOB26mV3Wbr2tEqrVoBLQ%3D%3D) -- [Reseller - Mouser (RS1XX Australia AU915-928 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00110?qs=%2Fha2pyFaduiy%2FNQk39CM%2F5ypVFlEvpUtQp5jPkOSUP7de2I0phLIwQ%3D%3D) -- [Reseller - Mouser (RS1XX Australia AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00111?qs=%2Fha2pyFaduiy%2FNQk39CM%2F1sgT1WDccUtcvB4RNQhVzf2zwgAA%252BNhog%3D%3D) -- [Reseller - Mouser (RS1XX New Zealand AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00106?qs=%2Fha2pyFaduhXFoy1WA9XV8HX6C1ZeLF%252Bx3h65D68H%2F9HG3MrZ8TvtA%3D%3D) -- [Reseller - Mouser (RS1XX Taiwan AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00105?qs=%2Fha2pyFaduhXFoy1WA9XV1o37c8GRNlXZZ%252Bi6JF0JtgVqB%2Fz0xbgOQ%3D%3D) -- [Reseller - Mouser (RS1XX Hong Kong AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00109?qs=rI7uf1IzohSvZ%2F5rjkxGTw%3D%3D) -- [Reseller - Mouser (RS1XX Singapore AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00108?qs=W%2FMpXkg%252BdQ4uz46Y19fr%252BQ%3D%3D) - -### Specifications - -#### Sensors: - -- temperature - -#### Dimensions: - -- width: 91 mm -- length: 116 mm -- height: 34 mm - -#### Weight: - -- 185 grams - -#### Battery: - -- type: AA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/laird/rs1xx-temp-rh-sensor.mdx b/docs/use-the-network/devices/ready-to-use/laird/rs1xx-temp-rh-sensor.mdx deleted file mode 100644 index e15d10c6d..000000000 --- a/docs/use-the-network/devices/ready-to-use/laird/rs1xx-temp-rh-sensor.mdx +++ /dev/null @@ -1,67 +0,0 @@ ---- -id: rs1xx-temp-rh-sensor -hide_title: true -title: Sentrius RS1xx Temp-RH Sensor -description: Integrated Temperature, Humidity Sensor #455-0001/455-0002/455-00059/455-00060/455-00061/455-00062/455-00063/455-00095 -image: img/use-the-network/devices/ready-to-use/laird/rs1xx-temp-rh-sensor.jpg -sidebar_label: Sentrius RS1xx Temp-RH Sensor -slug: /use-the-network/devices/ready-to-use/laird/rs1xx-temp-rh-sensor ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Sentrius RS1xx Temp-RH Sensor - -Integrated Temperature, Humidity Sensor -#455-0001/455-0002/455-00059/455-00060/455-00061/455-00062/455-00063/455-00095 - - - -### Resources - -- [Product Page](https://www.lairdconnect.com/wireless-modules/lorawan-solutions/sentrius-rs1xx-lora-enabled-sensors) -- [Datasheet](https://www.lairdconnect.com/documentation/sentrius-rs1xx-configuration-guide-v112) -- [Reseller - Digi-Key (RS1XX North America US902-928 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-0001/8023006) -- [Reseller - Digi-Key (RS1XX Europe EU863-870 version)](https://www.digikey.co.uk/product-detail/en/laird-connectivity-inc/455-0002/455-0002-ND/8023004) -- [Reseller - Digi-Key (RS1XX Australia AU915-928 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00062/10639013?s=N4IgTCBcDaICwFYEFoAM6BsEC6BfIA) -- [Reseller - Digi-Key (RS1XX New Zealand AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00060/10639021?s=N4IgTCBcDaICwFYEFoAM6BsqQF0C%2BQA) -- [Reseller - Digi-Key (RS1XX Taiwan AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00059/10639011?s=N4IgTCBcDaICwFYEFoAM6EE4QF0C%2BQA) -- [Reseller - Digi-Key (RS1XX Hong Kong AS923 version)](https://www.digikey.com/en/products/detail/laird-connectivity-inc/455-00061/10639025?s=N4IgTCBcDaICwFYEFoAM6BsBGEBdAvkA) -- [Reseller - Mouser (RS1XX North America US902-928 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-0001?qs=f9yNj16SXrLHWGWgPjEnvQ%3D%3D) -- [Reseller - Mouser (RS1XX Europe EU863-870 version)](https://www.mouser.co.uk/ProductDetail/Laird-Connectivity/455-0002/?qs=f9yNj16SXrIAaoVm5TkfuA%3D%3D) -- [Reseller - Mouser (RS1XX Australia AU915-928 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00062?qs=%2Fha2pyFaduiVPYR7juSnK7Z5c85KXbBGXG2burRb%252Bu%2Fiv4fNSMhC1g%3D%3D) -- [Reseller - Mouser (RS1XX New Zealand AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00060?qs=%2Fha2pyFaduiVPYR7juSnK4HtmUbAGQ%2FyY9G5NV4%2F5WnloWmX%2FDVRmg%3D%3D) -- [Reseller - Mouser (RS1XX Taiwan AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00059?qs=%2Fha2pyFadug275OP%2F%252BIeOGqsiPUjgBUS3ujP7OCtiSiqAKHYcWnchQ%3D%3D) -- [Reseller - Mouser (RS1XX Hong Kong AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00061?qs=%2Fha2pyFaduiVPYR7juSnK65B4wN7scy2iXni0py6MqHs2gndLUPjTA%3D%3D) -- [Reseller - Mouser (RS1XX Singapore AS923 version)](https://www.mouser.com/ProductDetail/Laird-Connectivity/455-00095?qs=W%2FMpXkg%252BdQ5CxdiDQv0Dww%3D%3D) - -### Specifications - -#### Sensors: - -- temperature -- humidity - -#### Dimensions: - -- width: 91 mm -- length: 116 mm -- height: 34 mm - -#### Weight: - -- 168 grams - -#### Battery: - -- type: AA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw06davk.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw06davk.mdx deleted file mode 100644 index cc9576797..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw06davk.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: mcf-lw06davk -hide_title: true -title: MCF-LW06DAVK -description: Davis Vantage interface -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.jpg -sidebar_label: MCF-LW06DAVK -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lw06davk ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LW06DAVK - -Davis Vantage interface - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lw06davk/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LWWS06DAVK_DAVKP.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer -- wind speed -- wind direction -- rainfall -- solar radiation -- uv - -#### Dimensions: - -- width: 81 mm -- length: 60 mm -- height: 50 mm - -#### Weight: - -- 250 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw06davpk.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw06davpk.mdx deleted file mode 100644 index 44ad6297d..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw06davpk.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: mcf-lw06davpk -hide_title: true -title: MCF-LW06DAVPK -description: Davis Vantage interface with PM -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.jpg -sidebar_label: MCF-LW06DAVPK -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lw06davpk ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LW06DAVPK - -Davis Vantage interface with PM - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lw06davk/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LWWS06DAVK_DAVKP.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer -- wind speed -- wind direction -- rainfall -- solar radiation -- uv -- dust - -#### Dimensions: - -- width: 200 mm -- length: 210 mm -- height: 310 mm - -#### Weight: - -- 2500 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12co2.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12co2.mdx deleted file mode 100644 index 1087812d4..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12co2.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: mcf-lw12co2 -hide_title: true -title: MCF-LW12CO2 -description: Indoor environmental VOC & LUX & CO2 -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12co2.jpg -sidebar_label: MCF-LW12CO2 -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lw12co2 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LW12CO2 - -Indoor environmental VOC & LUX & CO2 - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lw12co2/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LW12CO2.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer -- light -- bvoc -- co2 - -#### Dimensions: - -- width: 25 mm -- length: 120 mm -- height: 80 mm - -#### Weight: - -- 250 grams - -#### Battery: - -- type: pack -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12met.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12met.mdx deleted file mode 100644 index 41dd06481..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12met.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -id: mcf-lw12met -hide_title: true -title: MCF-LW12MET -description: Energy Metering with I/O -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12met.jpg -sidebar_label: MCF-LW12MET -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lw12met ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LW12MET - -Energy Metering with I/O - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lw12met/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LW12MET.pdf) - -### Specifications - -#### Sensors: - -- voltage -- current -- energy -- power -- time -- digital input - -#### Dimensions: - -- width: 58 mm -- length: 82 mm -- height: 25 mm - -#### Weight: - -- 200 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12plg.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12plg.mdx deleted file mode 100644 index 8cd6ee468..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12plg.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: mcf-lw12plg -hide_title: true -title: MCF-LW12PLG -description: Energy Meter plug -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12plg.jpg -sidebar_label: MCF-LW12PLG -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lw12plg ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LW12PLG - -Energy Meter plug - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lw12plg/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LW12PLG.pdf) - -### Specifications - -#### Sensors: - -- voltage -- current -- energy -- power -- time - -#### Dimensions: - -- width: 115 mm -- length: 66 mm -- height: 30 mm - -#### Weight: - -- 300 grams - -#### Battery: - -- replaceable: False - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12ter.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12ter.mdx deleted file mode 100644 index d1e9f488a..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12ter.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: mcf-lw12ter -hide_title: true -title: MCF-LW12TER -description: Indoor environmental -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12ter.jpg -sidebar_label: MCF-LW12TER -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lw12ter ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LW12TER - -Indoor environmental - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lw12ter/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LW12TER.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer - -#### Dimensions: - -- width: 25 mm -- length: 80 mm -- height: 80 mm - -#### Weight: - -- 170 grams - -#### Battery: - -- type: pack -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terpm.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terpm.mdx deleted file mode 100644 index 81cda5bb8..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terpm.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: mcf-lw12terpm -hide_title: true -title: MCF-LW12TERPM -description: Outdoor sensor PM1/2.5/10 -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terpm.jpg -sidebar_label: MCF-LW12TERPM -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lw12terpm ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LW12TERPM - -Outdoor sensor PM1/2.5/10 - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lw12terpm/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LW12TERPM.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer -- dust - -#### Dimensions: - -- width: 200 mm -- length: 210 mm -- height: 310 mm - -#### Weight: - -- 2500 grams - -#### Battery: - -- type: pack -- replaceable: False - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terwp.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terwp.mdx deleted file mode 100644 index 96db4556d..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terwp.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: mcf-lw12terwp -hide_title: true -title: MCF-LW12TERWP -description: outdoor environmental sensor -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terwp.jpg -sidebar_label: MCF-LW12TERWP -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lw12terwp ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LW12TERWP - -outdoor environmental sensor - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lw12terwp/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LW12TERWP.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer - -#### Dimensions: - -- width: 40 mm -- length: 150 mm -- height: 350 mm - -#### Weight: - -- 170 grams - -#### Battery: - -- type: pack -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12voc.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12voc.mdx deleted file mode 100644 index 690d1494a..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw12voc.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: mcf-lw12voc -hide_title: true -title: MCF-LW12VOC -description: Indoor environmental VOC & LUX -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12voc.jpg -sidebar_label: MCF-LW12VOC -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lw12voc ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LW12VOC - -Indoor environmental VOC & LUX - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lw12voc/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LW12VOC.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer -- light -- bvoc - -#### Dimensions: - -- width: 25 mm -- length: 80 mm -- height: 80 mm - -#### Weight: - -- 170 grams - -#### Battery: - -- type: pack -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw13io.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw13io.mdx deleted file mode 100644 index 504802ed0..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw13io.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: mcf-lw13io -hide_title: true -title: MCF-LW13IO -description: Wireless actuator -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lw13io.jpg -sidebar_label: MCF-LW13IO -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lw13io ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LW13IO - -Wireless actuator - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lw13io/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LW13IO.pdf) - -### Specifications - -#### Sensors: - -- digital input - -#### Dimensions: - -- width: 58 mm -- length: 44 mm -- height: 25 mm - -#### Weight: - -- 150 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw13mio.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw13mio.mdx deleted file mode 100644 index 1011b2cce..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lw13mio.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: mcf-lw13mio -hide_title: true -title: MCF-LW13MIO -description: Multi I/O module -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lw13mio.jpg -sidebar_label: MCF-LW13MIO -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lw13mio ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LW13MIO - -Multi I/O module - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lw13mio/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LW13MIO.pdf) - -### Specifications - -#### Sensors: - -- digital input - -#### Dimensions: - -- width: 110 mm -- length: 160 mm -- height: 62 mm - -#### Weight: - -- 350 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.mdx deleted file mode 100644 index 46cf2e847..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: mcf-lwws00 -hide_title: true -title: MCF-LWWS00 -description: Weather station -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.jpg -sidebar_label: MCF-LWWS00 -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lwws00 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LWWS00 - -Weather station - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lwws00/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LWWS00-01.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer -- wind speed -- wind direction -- rainfall -- solar radiation -- uv - -#### Weight: - -- 20000 grams - -#### Battery: - -- type: sealed -- replaceable: False - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws01.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws01.mdx deleted file mode 100644 index 4e8ac0040..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws01.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: mcf-lwws01 -hide_title: true -title: MCF-LWWS01 -description: Weather station with PM -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.jpg -sidebar_label: MCF-LWWS01 -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lwws01 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LWWS01 - -Weather station with PM - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lwws00/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LWWS00-01.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer -- wind speed -- wind direction -- rainfall -- solar radiation -- uv -- dust - -#### Weight: - -- 20000 grams - -#### Battery: - -- type: sealed -- replaceable: False - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws02.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws02.mdx deleted file mode 100644 index c45ebdfa8..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws02.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -id: mcf-lwws02 -hide_title: true -title: MCF-LWWS02 -description: Weather station -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.jpg -sidebar_label: MCF-LWWS02 -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lwws02 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LWWS02 - -Weather station - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lwws00/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LWWS00-01.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer -- wind speed -- wind direction -- rainfall -- uv - -#### Weight: - -- 20000 grams - -#### Battery: - -- type: sealed -- replaceable: False - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws03.mdx b/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws03.mdx deleted file mode 100644 index d74495c3a..000000000 --- a/docs/use-the-network/devices/ready-to-use/mcf88/mcf-lwws03.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: mcf-lwws03 -hide_title: true -title: MCF-LWWS03 -description: Weather station with PM -image: img/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.jpg -sidebar_label: MCF-LWWS03 -slug: /use-the-network/devices/ready-to-use/mcf88/mcf-lwws03 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MCF-LWWS03 - -Weather station with PM - - - -### Resources - -- [Product Page](https://www.mcf88.it/prodotto/mcf-lwws00/) -- [Datasheet](https://www.mcf88.it/wp-content/uploads/2020/07/MCF-LWWS00-01.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- barometer -- wind speed -- wind direction -- rainfall -- uv -- dust - -#### Weight: - -- 20000 grams - -#### Battery: - -- type: sealed -- replaceable: False - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mclimate/aqi-sensor.mdx b/docs/use-the-network/devices/ready-to-use/mclimate/aqi-sensor.mdx deleted file mode 100644 index f7fb2510d..000000000 --- a/docs/use-the-network/devices/ready-to-use/mclimate/aqi-sensor.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -id: aqi-sensor -hide_title: true -title: MClimate Air Quality Sensor & Notifier (AQI) -description: - MClimate AQI Sensor and Notifier LoRaWAN is an indoor Air Quality Index Sensor - and Notifier with 10+ years of battery life, configurable settings and - beautiful and discrete design. It is a 4-in-1 sensor with gas, humidity, - pressure and temperature measurement based on proven sensing principles by - Bosch. It measures AQI, CO2 (ppm), VOC (ppm), temperature, humidity and - pressure. It also has a configurable buzzer and LED to notify tenants if the - air quality Index is below a configurable threshold. -image: img/use-the-network/devices/ready-to-use/mclimate/aqi-sensor.jpg -sidebar_label: MClimate Air Quality Sensor & Notifier (AQI) -slug: /use-the-network/devices/ready-to-use/mclimate/aqi-sensor ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MClimate Air Quality Sensor & Notifier (AQI) - -MClimate AQI Sensor and Notifier LoRaWAN is an indoor Air Quality Index Sensor -and Notifier with 10+ years of battery life, configurable settings and beautiful -and discrete design. It is a 4-in-1 sensor with gas, humidity, pressure and -temperature measurement based on proven sensing principles by Bosch. It measures -AQI, CO2 (ppm), VOC (ppm), temperature, humidity and pressure. It also has a -configurable buzzer and LED to notify tenants if the air quality Index is below -a configurable threshold. - - - -### Resources - -- [Product Page](https://mclimate.bit.ai/docs/view/S14D8XaQJGaz6cF4) -- [Datasheet](https://d19bjv63x2j8ah.cloudfront.net/v2/22667/contents/Q4RlX1XZwpcn867d/MClimate_AQI_Sensor___Notifier-datasheet-lorawan-en.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- co2 -- barometer - -#### Dimensions: - -- width: 70 mm -- length: 70 mm -- height: 19 mm - -#### Weight: - -- 110 grams - -#### Battery: - -- type: AA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mclimate/flood-sensor.mdx b/docs/use-the-network/devices/ready-to-use/mclimate/flood-sensor.mdx deleted file mode 100644 index 3f500d726..000000000 --- a/docs/use-the-network/devices/ready-to-use/mclimate/flood-sensor.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: flood-sensor -hide_title: true -title: MClimate Flood Sensor -description: - MClimate Flood Sensor is a compact flood sensor suitable for residential and - commercial applications. If a flood is detected, data is immediately - transmitted. -image: img/use-the-network/devices/ready-to-use/mclimate/flood-sensor.jpg -sidebar_label: MClimate Flood Sensor -slug: /use-the-network/devices/ready-to-use/mclimate/flood-sensor ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MClimate Flood Sensor - -MClimate Flood Sensor is a compact flood sensor suitable for residential and -commercial applications. If a flood is detected, data is immediately -transmitted. - - - -### Resources - -- [Product Page](https://mclimate.bit.ai/docs/view/q4EOcRGOsCzVblyc) -- [Datasheet](https://d19bjv63x2j8ah.cloudfront.net/v2/22667/contents/aCgaVMEgTCt2DKjM/mclimate-flood-sensor-lorawan-datasheet-en.pdf) - -### Specifications - -#### Sensors: - -- temperature -- water - -#### Dimensions: - -- width: 70 mm -- length: 70 mm -- height: 19 mm - -#### Weight: - -- 33 grams - -#### Battery: - -- type: CR123A -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mclimate/ht-sensor.mdx b/docs/use-the-network/devices/ready-to-use/mclimate/ht-sensor.mdx deleted file mode 100644 index 1bffda74f..000000000 --- a/docs/use-the-network/devices/ready-to-use/mclimate/ht-sensor.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: ht-sensor -hide_title: true -title: MClimate Humidity and Temperature Sensor -description: - MClimate HT Sensor is an indoor temperature and humidity sensor with 10+ years - of battery life, configurable settings and beautiful and discreen design. -image: img/use-the-network/devices/ready-to-use/mclimate/ht-sensor.jpg -sidebar_label: MClimate Humidity and Temperature Sensor -slug: /use-the-network/devices/ready-to-use/mclimate/ht-sensor ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MClimate Humidity and Temperature Sensor - -MClimate HT Sensor is an indoor temperature and humidity sensor with 10+ years -of battery life, configurable settings and beautiful and discreen design. - - - -### Resources - -- [Product Page](https://mclimate.bit.ai/docs/view/fVqYnMSrbXBt3MZa) -- [Datasheet](https://d19bjv63x2j8ah.cloudfront.net/v2/22667/contents/UmkvtxIzRIUT2Td8/mclimate-ht-lorawan-datasheet-en.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity - -#### Dimensions: - -- width: 70 mm -- length: 70 mm -- height: 19 mm - -#### Weight: - -- 107 grams - -#### Battery: - -- type: AA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mclimate/t-valve.mdx b/docs/use-the-network/devices/ready-to-use/mclimate/t-valve.mdx deleted file mode 100644 index 56b6f9167..000000000 --- a/docs/use-the-network/devices/ready-to-use/mclimate/t-valve.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: t-valve -hide_title: true -title: MClimate T-Valve - Water valve -description: - MClimate T-Valve is a LoRaWAN water valve used in residential or commercial - buildings. 3/4" and 1" versions available. -image: img/use-the-network/devices/ready-to-use/mclimate/t-valve.jpg -sidebar_label: MClimate T-Valve - Water valve -slug: /use-the-network/devices/ready-to-use/mclimate/t-valve ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MClimate T-Valve - Water valve - -MClimate T-Valve is a LoRaWAN water valve used in residential or commercial -buildings. 3/4" and 1" versions available. - - - -### Resources - -- [Product Page](https://mclimate.bit.ai/docs/view/qiyURo9OxshxDj1i) -- [Datasheet](https://d19bjv63x2j8ah.cloudfront.net/v2/22667/contents/88AX301jrXL1awzI/mclimate-t-valve-lorawan-datasheet-en.pdf) - -### Specifications - -#### Sensors: - -- temperature -- water - -#### Dimensions: - -- width: 105 mm -- length: 117 mm -- height: 90.8 mm - -#### Weight: - -- 550 grams - -#### Battery: - -- type: LiSOCl2 ER26500 3.6V -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/mclimate/vicki.mdx b/docs/use-the-network/devices/ready-to-use/mclimate/vicki.mdx deleted file mode 100644 index 204669a4a..000000000 --- a/docs/use-the-network/devices/ready-to-use/mclimate/vicki.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: vicki -hide_title: true -title: MClimate Vicki - Smart Radiator Thermostat -description: - MClimate Vicki is a a smart thermostatic radiator valve (TRV). It controls - residential and commercial hot water radiators, measures temperature and - humidity and the user can adjust the target temperature by the LEDs screen and - rotating the exterior of the device. -image: img/use-the-network/devices/ready-to-use/mclimate/vicki.jpg -sidebar_label: MClimate Vicki - Smart Radiator Thermostat -slug: /use-the-network/devices/ready-to-use/mclimate/vicki ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## MClimate Vicki - Smart Radiator Thermostat - -MClimate Vicki is a a smart thermostatic radiator valve (TRV). It controls -residential and commercial hot water radiators, measures temperature and -humidity and the user can adjust the target temperature by the LEDs screen and -rotating the exterior of the device. - - - -### Resources - -- [Product Page](https://mclimate.bit.ai/docs/view/hynFRwdIvWYQg867) -- [Datasheet](https://d19bjv63x2j8ah.cloudfront.net/v2/22667/contents/kSUunNxnzQB8fLuq/MClimate_Vicki_LoRaWAN_-_Datasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity - -#### Dimensions: - -- width: 54 mm -- length: 78 mm -- height: 50 mm - -#### Weight: - -- 107 grams - -#### Battery: - -- type: AA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/milesight-iot/am107.mdx b/docs/use-the-network/devices/ready-to-use/milesight-iot/am107.mdx deleted file mode 100644 index 21b6edf37..000000000 --- a/docs/use-the-network/devices/ready-to-use/milesight-iot/am107.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: am107 -hide_title: true -title: AM107 -description: Ambience Monitoring Sensors -image: img/use-the-network/devices/ready-to-use/milesight-iot/am107.png -sidebar_label: AM107 -slug: /use-the-network/devices/ready-to-use/milesight-iot/am107 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## AM107 - -Ambience Monitoring Sensors - - - -### Resources - -- [Product Page](https://www.milesight-iot.com/lorawan/sensor/am100/) -- [Datasheet](https://resource.milesight-iot.com/milesight/document/am100-series-datasheet-en.pdf) -- [Reseller - iot.sales@milesight.com](https://www.milesight-iot.com/contact-us/) -- [Video](https://www.youtube.com/watch?v=lu90qeIkjC0&ab_channel=MilesightIoT) - -### Specifications - -#### Sensors: - -- battery -- temperature -- humidity -- co2 -- tvoc -- pressure -- pir -- light - -#### Dimensions: - -- width: 21.2 mm -- length: 105 mm -- height: 70.4 mm - -#### Battery: - -- type: AA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/milesight-iot/em300-th.mdx b/docs/use-the-network/devices/ready-to-use/milesight-iot/em300-th.mdx deleted file mode 100644 index 9fde10eab..000000000 --- a/docs/use-the-network/devices/ready-to-use/milesight-iot/em300-th.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: em300-th -hide_title: true -title: EM300-TH -description: Temperature & Humidity Sensor -image: img/use-the-network/devices/ready-to-use/milesight-iot/em300-th.png -sidebar_label: EM300-TH -slug: /use-the-network/devices/ready-to-use/milesight-iot/em300-th ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## EM300-TH - -Temperature & Humidity Sensor - - - -### Resources - -- [Product Page](https://www.milesight-iot.com/lorawan/sensor/em300-th/) -- [Datasheet](https://resource.milesight-iot.com/milesight/document/em300-th-datasheet-en.pdf) -- [Reseller - iot.sales@milesight.com](https://www.milesight-iot.com/contact-us/) - -### Specifications - -#### Sensors: - -- battery -- temperature -- humidity - -#### Dimensions: - -- width: 27 mm -- length: 88 mm -- height: 87 mm - -#### Battery: - -- type: ER18505 Li-SoCl2 battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/milesight-iot/em500-co2.mdx b/docs/use-the-network/devices/ready-to-use/milesight-iot/em500-co2.mdx deleted file mode 100644 index d4040510d..000000000 --- a/docs/use-the-network/devices/ready-to-use/milesight-iot/em500-co2.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: em500-co2 -hide_title: true -title: EM500-CO2 -description: Carbon Dioxide Sensor -image: img/use-the-network/devices/ready-to-use/milesight-iot/em500-co2.jpg -sidebar_label: EM500-CO2 -slug: /use-the-network/devices/ready-to-use/milesight-iot/em500-co2 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## EM500-CO2 - -Carbon Dioxide Sensor - - - -### Resources - -- [Product Page](https://www.milesight-iot.com/lorawan/sensor/am100/) -- [Datasheet](https://resource.milesight-iot.com/milesight/document/am100-series-datasheet-en.pdf) -- [Reseller - iot.sales@milesight.com](https://www.milesight-iot.com/contact-us/) - -### Specifications - -#### Sensors: - -- battery -- temperature -- humidity -- co2 -- pressure - -#### Dimensions: - -- width: 69.5 mm -- length: 147.9 mm -- height: 71 mm - -#### Battery: - -- type: 19000 mAh Li-SOCL2 battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/milesight-iot/em500-udl.mdx b/docs/use-the-network/devices/ready-to-use/milesight-iot/em500-udl.mdx deleted file mode 100644 index 4c9edf706..000000000 --- a/docs/use-the-network/devices/ready-to-use/milesight-iot/em500-udl.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -id: em500-udl -hide_title: true -title: EM500-UDL -description: Ultrasonic Distance Sensor -image: img/use-the-network/devices/ready-to-use/milesight-iot/em500-udl.jpg -sidebar_label: EM500-UDL -slug: /use-the-network/devices/ready-to-use/milesight-iot/em500-udl ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## EM500-UDL - -Ultrasonic Distance Sensor - - - -### Resources - -- [Product Page](https://www.milesight-iot.com/lorawan/sensor/em500-udl/) -- [Datasheet](https://resource.milesight-iot.com/milesight/document/em500-udl-datasheet-en.pdf) -- [Reseller - iot.sales@milesight.com](https://www.milesight-iot.com/contact-us/) - -### Specifications - -#### Sensors: - -- battery -- distance - -#### Dimensions: - -- width: 69.5 mm -- length: 156.1 mm -- height: 71 mm - -#### Battery: - -- type: 19000 mAh Li-SOCL2 -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/moko/lw001-bg.mdx b/docs/use-the-network/devices/ready-to-use/moko/lw001-bg.mdx deleted file mode 100644 index 5990be7b2..000000000 --- a/docs/use-the-network/devices/ready-to-use/moko/lw001-bg.mdx +++ /dev/null @@ -1,61 +0,0 @@ ---- -id: lw001-bg -hide_title: true -title: LW001-BG -description: - LW001-BG is a wireless smart, ultra-low power consumption, - indoor&outdoor(IP67) LoRaWAN Tracker. Ideal to optimize logistic process, - asset management, warehouse and inventory scenarios, outdoor tracking, theft - protection and much more. -image: img/use-the-network/devices/ready-to-use/moko/lw001-bg-1.png -sidebar_label: LW001-BG -slug: /use-the-network/devices/ready-to-use/moko/lw001-bg ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LW001-BG - -LW001-BG is a wireless smart, ultra-low power consumption, -indoor&outdoor(IP67) LoRaWAN Tracker. Ideal to optimize logistic process, -asset management, warehouse and inventory scenarios, outdoor tracking, theft -protection and much more. - - - -### Resources - -- [Product Page](https://www.mokosmart.com/) - -### Specifications - -#### Sensors: - -- accelerometer -- temperature -- humidity -- gps -- barometer -- wifi ssid -- battery -- light - -#### Dimensions: - -- width: 122 mm -- length: 72.4 mm -- height: 32.7 mm - -#### Battery: - -- type: special -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/moko/lw003-b.mdx b/docs/use-the-network/devices/ready-to-use/moko/lw003-b.mdx deleted file mode 100644 index 3fc054236..000000000 --- a/docs/use-the-network/devices/ready-to-use/moko/lw003-b.mdx +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: lw003-b -hide_title: true -title: LW003-B -description: - LW003-B is a BLE-LoRaWAN gateway integrating LoRa and Bluetooth wireless - communication, LW003-B can scan BLE Beacon data and send data to LoRaWAN-Based - gateway,and then upload to server, so as to realize environmental monitoring - and indoor positioning. -image: img/use-the-network/devices/ready-to-use/moko/lw003-b-1.png -sidebar_label: LW003-B -slug: /use-the-network/devices/ready-to-use/moko/lw003-b ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LW003-B - -LW003-B is a BLE-LoRaWAN gateway integrating LoRa and Bluetooth wireless -communication, LW003-B can scan BLE Beacon data and send data to LoRaWAN-Based -gateway,and then upload to server, so as to realize environmental monitoring and -indoor positioning. - - - -### Resources - -- [Product Page](https://www.mokosmart.com/lorawan-probe-lw003-b/) - -### Specifications - -#### Sensors: - -- battery -- button -- humidity -- light -- temperature -- time - -#### Dimensions: - -- width: 122.7 mm -- length: 109 mm -- height: 36 mm - -#### Weight: - -- 165 grams - -#### Battery: - -- type: lithium battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/moko/lw004.mdx b/docs/use-the-network/devices/ready-to-use/moko/lw004.mdx deleted file mode 100644 index ad871c752..000000000 --- a/docs/use-the-network/devices/ready-to-use/moko/lw004.mdx +++ /dev/null @@ -1,61 +0,0 @@ ---- -id: lw004 -hide_title: true -title: LW004 -description: - LW004 is a LoRaWAN-Based network IoT device specifically designed for contact - tracing purposes. It is compact, small in size and easy to use. It can be used - to track close contact,social safety distance reminder, employee attendance, - access control and identity identification. -image: img/use-the-network/devices/ready-to-use/moko/lw004.jpg -sidebar_label: LW004 -slug: /use-the-network/devices/ready-to-use/moko/lw004 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LW004 - -LW004 is a LoRaWAN-Based network IoT device specifically designed for contact -tracing purposes. It is compact, small in size and easy to use. It can be used -to track close contact,social safety distance reminder, employee attendance, -access control and identity identification. - - - -### Resources - -- [Product Page](https://www.mokosmart.com/lw004-lorawan-contact-tracing-wearables-button/) - -### Specifications - -#### Sensors: - -- accelerometer -- battery -- button -- gps -- light -- vibration - -#### Dimensions: - -- width: 73 mm -- length: 40 mm -- height: 17 mm - -#### Weight: - -- 48 grams - -#### Battery: - -- type: lithium battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/moko/lw005-mp.mdx b/docs/use-the-network/devices/ready-to-use/moko/lw005-mp.mdx deleted file mode 100644 index a36f75a80..000000000 --- a/docs/use-the-network/devices/ready-to-use/moko/lw005-mp.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: lw005-mp -hide_title: true -title: LW005 -description: - LW005 is a compact, multi-purposes, easy-to -use, wireless LoRaWAN power meter - for indoor use. It can remotely control the output switch and detect the - output power. -image: img/use-the-network/devices/ready-to-use/moko/lw005.jpg -sidebar_label: LW005 -slug: /use-the-network/devices/ready-to-use/moko/lw005-mp ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## LW005 - -LW005 is a compact, multi-purposes, easy-to -use, wireless LoRaWAN power meter -for indoor use. It can remotely control the output switch and detect the output -power. - - - -### Resources - -- [Product Page](https://www.mokosmart.com/) - -### Specifications - -#### Sensors: - -- current -- power -- voltage - -#### Dimensions: - -- width: 61 mm -- length: 104 mm -- height: 34 mm - -#### Weight: - -- 136 grams - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r311a.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r311a.mdx deleted file mode 100644 index 01d0c7737..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r311a.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: r311a -hide_title: true -title: Wireless Window Sensor -description: - When the window is opened, R311A sends an alarm message to the control center. - R311A utilizes the latest ultra-low power consumption technology and requires - no wiring. It requires just button batteries to support its operation. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r311a.jpg -sidebar_label: Wireless Window Sensor -slug: /use-the-network/devices/ready-to-use/netvox/r311a ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Window Sensor - -When the window is opened, R311A sends an alarm message to the control center. -R311A utilizes the latest ultra-low power consumption technology and requires no -wiring. It requires just button batteries to support its operation. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R311A) -- [Datasheet](http://www.netvox.com.tw/um/R311A/R311Adatasheet.pdf) - -### Specifications - -#### Dimensions: - -- width: 35 mm -- length: 57 mm -- height: 15 mm - -#### Weight: - -- 43.8 grams - -#### Battery: - -- type: 2 x 3.0V CR2450 button battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r311b.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r311b.mdx deleted file mode 100644 index ae38f7f0b..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r311b.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: r311b -hide_title: true -title: Wireless Light Sensor -description: - The R311B device has a built-in Wireless Light Sensor that can be used for - ambient light intensity detection. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r311b.jpg -sidebar_label: Wireless Light Sensor -slug: /use-the-network/devices/ready-to-use/netvox/r311b ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Light Sensor - -The R311B device has a built-in Wireless Light Sensor that can be used for -ambient light intensity detection. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R311B) -- [Datasheet](http://www.netvox.com.tw/um/R311B/R311Bdatasheet.pdf) - -### Specifications - -#### Sensors: - -- light - -#### Dimensions: - -- width: 35 mm -- length: 57 mm -- height: 15.2 mm - -#### Weight: - -- 45 grams - -#### Battery: - -- type: 2 x 3.0V CR2450 button batteries -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r311g.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r311g.mdx deleted file mode 100644 index 084a60ef6..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r311g.mdx +++ /dev/null @@ -1,61 +0,0 @@ ---- -id: r311g -hide_title: true -title: Wireless Light Sensor -description: - R311G built-in photosensitive sensor, can be used for external ambient light - intensity detection.R311G is the environmental illuminance automatic detector - and the reporter which can send out the environmental illumination report and - is a low-power, long range, wireless sensor that can accurately detect - environmental illuminance indoor. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r311g.jpg -sidebar_label: Wireless Light Sensor -slug: /use-the-network/devices/ready-to-use/netvox/r311g ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Light Sensor - -R311G built-in photosensitive sensor, can be used for external ambient light -intensity detection.R311G is the environmental illuminance automatic detector -and the reporter which can send out the environmental illumination report and is -a low-power, long range, wireless sensor that can accurately detect -environmental illuminance indoor. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R311G) -- [Datasheet](http://www.netvox.com.tw/um/R311G/R311Gdatasheet.pdf) - -### Specifications - -#### Sensors: - -- light - -#### Dimensions: - -- width: 35 mm -- length: 57 mm -- height: 15.2 mm - -#### Weight: - -- 32.3 grams - -#### Battery: - -- type: 2 x 3.0V CR2450 button batteries -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r311w.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r311w.mdx deleted file mode 100644 index 30b0d5c0a..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r311w.mdx +++ /dev/null @@ -1,61 +0,0 @@ ---- -id: r311w -hide_title: true -title: Wireless Water leak Sensor -description: - Netvox R311W is a water leak sensor based on LoRaWAN™ protocol (ClassA) - carrying leak detection and alarm function. When R311W detects a leak, it will - send an alarm message to the gateway. When the sensor detects no leak, it will - send a message that reports the status to the gateway. There are two water - leak sensors which allow users to monitor two spots. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r311w.jpg -sidebar_label: Wireless Water leak Sensor -slug: /use-the-network/devices/ready-to-use/netvox/r311w ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Water leak Sensor - -Netvox R311W is a water leak sensor based on LoRaWAN™ protocol (ClassA) carrying -leak detection and alarm function. When R311W detects a leak, it will send an -alarm message to the gateway. When the sensor detects no leak, it will send a -message that reports the status to the gateway. There are two water leak sensors -which allow users to monitor two spots. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R311W) -- [Datasheet](http://www.netvox.com.tw/um/R311W/R311Wdatasheet.pdf) - -### Specifications - -#### Sensors: - -- water - -#### Dimensions: - -- width: 35 mm -- length: 57 mm -- height: 15.2 mm - -#### Weight: - -- 48.9 grams - -#### Battery: - -- type: 2 x 3.0V CR2450 button batteries -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r312.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r312.mdx deleted file mode 100644 index 1650407f2..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r312.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: r312 -hide_title: true -title: Wireless Door Bell Button -description: - R312 is a wireless doorbell control device which can detect whether the - wireless doorbell is triggered and send the doorbell status to the gateway. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r312.jpg -sidebar_label: Wireless Door Bell Button -slug: /use-the-network/devices/ready-to-use/netvox/r312 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Door Bell Button - -R312 is a wireless doorbell control device which can detect whether the wireless -doorbell is triggered and send the doorbell status to the gateway. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R312) -- [Datasheet](http://www.netvox.com.tw/um/R312/R312datasheet.pdf) - -### Specifications - -#### Sensors: - -- button - -#### Dimensions: - -- width: 35 mm -- length: 57 mm -- height: 15.2 mm - -#### Weight: - -- 45 grams - -#### Battery: - -- type: 2 x 3.0V CR2450 button battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r312a.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r312a.mdx deleted file mode 100644 index 3ef566450..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r312a.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: r312a -hide_title: true -title: Wireless Emergency Button -description: - The R312A is an emergency button switch device that detects the closing or - opening signal of the emergency button switch and sends an alarm signal to the - gateway for processing. It uses the SX1276 wireless communication module. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r312a.jpg -sidebar_label: Wireless Emergency Button -slug: /use-the-network/devices/ready-to-use/netvox/r312a ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Emergency Button - -The R312A is an emergency button switch device that detects the closing or -opening signal of the emergency button switch and sends an alarm signal to the -gateway for processing. It uses the SX1276 wireless communication module. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R312A) -- [Datasheet](http://www.netvox.com.tw/um/R312A/R312Adatasheet.pdf) - -### Specifications - -#### Sensors: - -- button - -#### Dimensions: - -- width: 35 mm -- length: 57 mm -- height: 15.2 mm - -#### Weight: - -- 45 grams - -#### Battery: - -- type: 2 x 3.0V CR2450 button battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r711.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r711.mdx deleted file mode 100644 index e84e157ae..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r711.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: r711 -hide_title: true -title: Wireless Temperature and Humidity Sensor -description: - R711 is mainly used to detect the temperature and humidity of indoor air. It - transmits the collected data to other devices for display through the wireless - network communication module. The device conforms to the LoRa protocol - standard. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r711.jpg -sidebar_label: Wireless Temperature and Humidity Sensor -slug: /use-the-network/devices/ready-to-use/netvox/r711 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Temperature and Humidity Sensor - -R711 is mainly used to detect the temperature and humidity of indoor air. It -transmits the collected data to other devices for display through the wireless -network communication module. The device conforms to the LoRa protocol standard. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R711) -- [Datasheet](http://www.netvox.com.tw/um/R711/R711datasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity - -#### Dimensions: - -- width: 34.2 mm -- length: 108.5 mm -- height: 19 mm - -#### Weight: - -- 83.8 grams - -#### Battery: - -- type: 2 x 1.5V AA alkaline battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r718a.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r718a.mdx deleted file mode 100644 index 373db01c8..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r718a.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: r718a -hide_title: true -title: Temperature and Humidity Sensor for Low Temperature Environment -description: - R718A is capable to measure temperature and humidity at low temperature - environment. R718A can be used in domestic and commercial refrigerators to - store and transport food, medicines, flowers and other perishable goods, on - the walls or in logistics refrigerators. Suitable as a data logger. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r718a.jpg -sidebar_label: Temperature and Humidity Sensor for Low Temperature Environment -slug: /use-the-network/devices/ready-to-use/netvox/r718a ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Temperature and Humidity Sensor for Low Temperature Environment - -R718A is capable to measure temperature and humidity at low temperature -environment. R718A can be used in domestic and commercial refrigerators to store -and transport food, medicines, flowers and other perishable goods, on the walls -or in logistics refrigerators. Suitable as a data logger. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R718A) -- [Datasheet](http://www.netvox.com.tw/um/R718A/R718Adatasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity - -#### Dimensions: - -- width: 65 mm -- length: 112 mm -- height: 28 mm - -#### Weight: - -- 141 grams - -#### Battery: - -- type: ER14505 AA Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r718ab.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r718ab.mdx deleted file mode 100644 index 53e97798f..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r718ab.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: r718ab -hide_title: true -title: Wireless Temperature and Humidity Sensor -description: - R718AB is a wireless communication device that detects ambient air temperature - and humidity. R718AB can detect the temperature and humidity of the air and - transmit the detected data to data center through the wireless network. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r718ab.jpg -sidebar_label: Wireless Temperature and Humidity Sensor -slug: /use-the-network/devices/ready-to-use/netvox/r718ab ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Temperature and Humidity Sensor - -R718AB is a wireless communication device that detects ambient air temperature -and humidity. R718AB can detect the temperature and humidity of the air and -transmit the detected data to data center through the wireless network. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R718AB) -- [Datasheet](http://www.netvox.com.tw/um/R718AB/R718ABdatasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity - -#### Dimensions: - -- width: 65 mm -- length: 112 mm -- height: 28 mm - -#### Weight: - -- 141 grams - -#### Battery: - -- type: ER14505 AA Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r718b.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r718b.mdx deleted file mode 100644 index 0d825a96d..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r718b.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: r718b -hide_title: true -title: Wireless Resistance Temperature Detector -description: - R718B connects an external resistance temperature detector (PT1000) to - measures the temperature. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r718b.jpg -sidebar_label: Wireless Resistance Temperature Detector -slug: /use-the-network/devices/ready-to-use/netvox/r718b ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Resistance Temperature Detector - -R718B connects an external resistance temperature detector (PT1000) to measures -the temperature. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R718B) -- [Datasheet](http://www.netvox.com.tw/um/R718B/R718Bdatasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature - -#### Dimensions: - -- width: 88.19 mm -- length: 112 mm -- height: 32 mm - -#### Weight: - -- 141 grams - -#### Battery: - -- type: 2 x 3.6V ER14505 AA lithium battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r718ck.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r718ck.mdx deleted file mode 100644 index c4097ebc9..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r718ck.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: r718ck -hide_title: true -title: Wireless Thermocouple Sensor -description: - This equipment is used to detect temperature of the object and medium which - thermocouple is contacted. The detecting range of R718CK is -40 °C~ +375°C. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r718ck.jpg -sidebar_label: Wireless Thermocouple Sensor -slug: /use-the-network/devices/ready-to-use/netvox/r718ck ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Thermocouple Sensor - -This equipment is used to detect temperature of the object and medium which -thermocouple is contacted. The detecting range of R718CK is -40 °C~ +375°C. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R718CK) -- [Datasheet](http://www.netvox.com.tw/um/R718CK/R718CKdatasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature - -#### Dimensions: - -- width: 88.19 mm -- length: 112 mm -- height: 32 mm - -#### Battery: - -- type: 2 x 3.6V ER14505 AA lithium battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r718ct.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r718ct.mdx deleted file mode 100644 index 7244b8cd8..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r718ct.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: r718ct -hide_title: true -title: Wireless Thermocouple Sensor -description: - This equipment is used to detect temperature of the object and medium which - thermocouple is contacted. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r718ct.jpg -sidebar_label: Wireless Thermocouple Sensor -slug: /use-the-network/devices/ready-to-use/netvox/r718ct ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Thermocouple Sensor - -This equipment is used to detect temperature of the object and medium which -thermocouple is contacted. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R718CT) -- [Datasheet](http://www.netvox.com.tw/um/R718CT/R718CTdatasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature - -#### Dimensions: - -- width: 88.19 mm -- length: 112 mm -- height: 32 mm - -#### Battery: - -- type: 2 x 3.6V ER14505 AA lithium battery -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r718e.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r718e.mdx deleted file mode 100644 index 847cce836..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r718e.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: r718e -hide_title: true -title: Three-Axis Digital Accelerometer&NTC Thermistor -description: - It can detect the movement or vibration of the device, send a signal to the - gateway for processing, and externally connect one NTC thermistor to detect - the surface temperature of the measured object. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r718e.jpg -sidebar_label: Three-Axis Digital Accelerometer&NTC Thermistor -slug: /use-the-network/devices/ready-to-use/netvox/r718e ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Three-Axis Digital Accelerometer&NTC Thermistor - -It can detect the movement or vibration of the device, send a signal to the -gateway for processing, and externally connect one NTC thermistor to detect the -surface temperature of the measured object. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R718E) -- [Datasheet](http://www.netvox.com.tw/um/R718E/R718Edatasheet.pdf) - -### Specifications - -#### Sensors: - -- accelerometer -- velocity -- temperature - -#### Dimensions: - -- width: 88.19 mm -- length: 112 mm -- height: 32 mm - -#### Weight: - -- 141 grams - -#### Battery: - -- type: 2 x 3.6V ER14505 AA lithium batteries -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r718f.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r718f.mdx deleted file mode 100644 index 4f8eee0ba..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r718f.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: r718f -hide_title: true -title: Wireless Reed Switch Open/Close Detection Sensor -description: - R718F utilizes a reed switch to detect whether two objects are separated or - not. An example of R718F’s application is to detect the state of a door or - window for security purposes. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r718f.jpg -sidebar_label: Wireless Reed Switch Open/Close Detection Sensor -slug: /use-the-network/devices/ready-to-use/netvox/r718f ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Reed Switch Open/Close Detection Sensor - -R718F utilizes a reed switch to detect whether two objects are separated or not. -An example of R718F’s application is to detect the state of a door or window for -security purposes. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R718F) -- [Datasheet](http://www.netvox.com.tw/um/R718F/R718Fdatasheet.pdf) - -### Specifications - -#### Dimensions: - -- width: 65 mm -- length: 112 mm -- height: 32 mm - -#### Weight: - -- 141 grams - -#### Battery: - -- type: 2 x 3.6V ER14505 AA lithium batteries -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r718n1.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r718n1.mdx deleted file mode 100644 index 3410bf196..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r718n1.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: r718n1 -hide_title: true -title: Wireless 1-Phase Current Meter with 1 x 30A Solid Core CT -description: - R718N1 is powered by battery and obtains the load AC current value through the - current transformer. The device adopts the solid-core current transformer, - which can be conveniently connected to the measuring device. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r718n1.jpg -sidebar_label: Wireless 1-Phase Current Meter with 1 x 30A Solid Core CT -slug: /use-the-network/devices/ready-to-use/netvox/r718n1 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless 1-Phase Current Meter with 1 x 30A Solid Core CT - -R718N1 is powered by battery and obtains the load AC current value through the -current transformer. The device adopts the solid-core current transformer, which -can be conveniently connected to the measuring device. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R718N1) -- [Datasheet](http://www.netvox.com.tw/um/R718N1/R718N1datasheet.pdf) - -### Specifications - -#### Sensors: - -- current - -#### Dimensions: - -- width: 88.19 mm -- length: 112 mm -- height: 32 mm - -#### Weight: - -- 141 grams - -#### Battery: - -- type: 2 x 3.6V ER14505 lithium batteries -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r718n3.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r718n3.mdx deleted file mode 100644 index 02616ac66..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r718n3.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: r718n3 -hide_title: true -title: Wireless 3-Phase Current Meter With 3 x 50A Solid Core CT -description: - R718N3 is powered by battery and obtains the load AC current value through the - current transformer. The device adopts the solid core current transformer, - which can be conveniently connected to the measuring device. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r718n3.jpg -sidebar_label: Wireless 3-Phase Current Meter With 3 x 50A Solid Core CT -slug: /use-the-network/devices/ready-to-use/netvox/r718n3 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless 3-Phase Current Meter With 3 x 50A Solid Core CT - -R718N3 is powered by battery and obtains the load AC current value through the -current transformer. The device adopts the solid core current transformer, which -can be conveniently connected to the measuring device. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R718N3) -- [Datasheet](http://www.netvox.com.tw/um/R718N3/R718N3datasheet.pdf) - -### Specifications - -#### Sensors: - -- current - -#### Dimensions: - -- width: 88.19 mm -- length: 112 mm -- height: 32 mm - -#### Weight: - -- 141 grams - -#### Battery: - -- type: 2 x 3.6V ER14505 lithium batteries -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r718t.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r718t.mdx deleted file mode 100644 index b20ee1323..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r718t.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: r718t -hide_title: true -title: Wireless Push Button Interface -description: - The device is connected to an external push button device (2 lines are - connected to the 2 end of the push button) that can detect the signal when the - button is pushed. It uses SX1276 wireless communication module, and the - communication is fully compatible with LoRaWAN™ protocol (Class A). -image: img/use-the-network/devices/ready-to-use/netvox/photos/r718t.jpg -sidebar_label: Wireless Push Button Interface -slug: /use-the-network/devices/ready-to-use/netvox/r718t ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Push Button Interface - -The device is connected to an external push button device (2 lines are connected -to the 2 end of the push button) that can detect the signal when the button is -pushed. It uses SX1276 wireless communication module, and the communication is -fully compatible with LoRaWAN™ protocol (Class A). - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R718T) -- [Datasheet](http://www.netvox.com.tw/um/R718T/R718Tdatasheet.pdf) - -### Specifications - -#### Sensors: - -- digital input - -#### Dimensions: - -- width: 65 mm -- length: 112 mm -- height: 32 mm - -#### Weight: - -- 141 grams - -#### Battery: - -- type: 2 x 3.6V ER14505 AA lithium batteries -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r720a.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r720a.mdx deleted file mode 100644 index 0956cd831..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r720a.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: r720a -hide_title: true -title: Temperature and Humidity Sensor -description: - The R720A is a wireless communication device that detects ambient air - temperature and humidity. The R720A detects the temperature and humidity of - the air and transmits the detected data to other devices via a wireless - network using the SX1276 wireless communication module. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r720a.jpg -sidebar_label: Temperature and Humidity Sensor -slug: /use-the-network/devices/ready-to-use/netvox/r720a ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Temperature and Humidity Sensor - -The R720A is a wireless communication device that detects ambient air -temperature and humidity. The R720A detects the temperature and humidity of the -air and transmits the detected data to other devices via a wireless network -using the SX1276 wireless communication module. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R720A) -- [Datasheet](http://www.netvox.com.tw/um/R720A/R720Adatasheet.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity - -#### Dimensions: - -- width: 65 mm -- length: 88 mm -- height: 19 mm - -#### Weight: - -- 113 grams - -#### Battery: - -- type: ER14505 AA Lithium -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r72615.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r72615.mdx deleted file mode 100644 index 0a9d00f58..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r72615.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: r72615 -hide_title: true -title: Wireless Outdoor CO2/Temperature/Humidity Sensor with Solar Panel -description: - The R72615 is equipped with a temperature and humidity sensor that detects and - transmits ambient temperature and humidity data. It is a wireless - communication method that uses the SX1276 wireless communication module. The - R72615 has a CO2 sensor that detects the concentration of CO2 in the air. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r72615.jpg -sidebar_label: Wireless Outdoor CO2/Temperature/Humidity Sensor with Solar Panel -slug: /use-the-network/devices/ready-to-use/netvox/r72615 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Outdoor CO2/Temperature/Humidity Sensor with Solar Panel - -The R72615 is equipped with a temperature and humidity sensor that detects and -transmits ambient temperature and humidity data. It is a wireless communication -method that uses the SX1276 wireless communication module. The R72615 has a CO2 -sensor that detects the concentration of CO2 in the air. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R72615) -- [Datasheet](http://www.netvox.com.tw/um/R72615/R72615datasheet.pdf) - -### Specifications - -#### Sensors: - -- co2 -- temperature -- humidity - -#### Dimensions: - -- height: 340 mm - -#### Battery: - -- type: solar and rechargeable lithium batteries - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/r72615a.mdx b/docs/use-the-network/devices/ready-to-use/netvox/r72615a.mdx deleted file mode 100644 index 66910f8c7..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/r72615a.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: r72615a -hide_title: true -title: Wireless CO2/Temperature/Humidity Sensor -description: - R72615A has a temperature and humidity sensor that detects and transmits - ambient temperature and humidity data. It applies wireless communication - method that uses the SX1276 wireless communication module. The R72615A has a - CO2 sensor that detects the concentration of CO2 in the air. -image: img/use-the-network/devices/ready-to-use/netvox/photos/r72615a.jpg -sidebar_label: Wireless CO2/Temperature/Humidity Sensor -slug: /use-the-network/devices/ready-to-use/netvox/r72615a ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless CO2/Temperature/Humidity Sensor - -R72615A has a temperature and humidity sensor that detects and transmits ambient -temperature and humidity data. It applies wireless communication method that -uses the SX1276 wireless communication module. The R72615A has a CO2 sensor that -detects the concentration of CO2 in the air. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=R72615A) -- [Datasheet](http://www.netvox.com.tw/um/R72615A/R72615Adatasheet.pdf) - -### Specifications - -#### Sensors: - -- co2 -- temperature -- humidity - -#### Dimensions: - -- width: 89.05 mm -- length: 117 mm -- height: 82 mm - -#### Battery: - -- type: 8 ER14505 lithium batteries - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/ra0715.mdx b/docs/use-the-network/devices/ready-to-use/netvox/ra0715.mdx deleted file mode 100644 index a7867dc4c..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/ra0715.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: ra0715 -hide_title: true -title: Wireless CO2/Temperature/Humidity Sensor -description: - RA0715 is equipped with RA0715. It can monitor the ambient temperature and - humidity and send the data via wireless method that adopts SX1276 wireless - communication module. RA0715 is equipped with CO2 sensor that can detect the - concentration of CO2 in the air. -image: img/use-the-network/devices/ready-to-use/netvox/photos/ra0715.jpg -sidebar_label: Wireless CO2/Temperature/Humidity Sensor -slug: /use-the-network/devices/ready-to-use/netvox/ra0715 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless CO2/Temperature/Humidity Sensor - -RA0715 is equipped with RA0715. It can monitor the ambient temperature and -humidity and send the data via wireless method that adopts SX1276 wireless -communication module. RA0715 is equipped with CO2 sensor that can detect the -concentration of CO2 in the air. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=RA0715) -- [Datasheet](http://www.netvox.com.tw/um/RA0715/RA0715datasheet.pdf) - -### Specifications - -#### Sensors: - -- co2 -- temperature -- humidity - -#### Dimensions: - -- width: 86 mm -- length: 111 mm -- height: 41 mm - -#### Weight: - -- 141 grams - -#### Battery: - -- type: DC 12V adapters - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/ra0715y.mdx b/docs/use-the-network/devices/ready-to-use/netvox/ra0715y.mdx deleted file mode 100644 index 75df15c38..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/ra0715y.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -id: ra0715y -hide_title: true -title: Wireless Outdoor CO2/Temperature/Humidity Sensor -description: - The device is a LoRaWAN™ device compatible with LoRaWAN™ protocol (Class A). - RA0715Y Wireless Outdoor CO2/Temperature/Humidity Sensor -image: img/use-the-network/devices/ready-to-use/netvox/photos/ra0715y.jpg -sidebar_label: Wireless Outdoor CO2/Temperature/Humidity Sensor -slug: /use-the-network/devices/ready-to-use/netvox/ra0715y ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Outdoor CO2/Temperature/Humidity Sensor - -The device is a LoRaWAN™ device compatible with LoRaWAN™ protocol (Class A). -RA0715Y Wireless Outdoor CO2/Temperature/Humidity Sensor - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=RA0715Y) -- [Datasheet](http://www.netvox.com.tw/um/RA0715Y/RA0715Ydatasheet.pdf) - -### Specifications - -#### Sensors: - -- co2 -- temperature -- humidity - -#### Dimensions: - -- height: 180 mm - -#### Battery: - -- type: DC 12V adapters - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/rb02i.mdx b/docs/use-the-network/devices/ready-to-use/netvox/rb02i.mdx deleted file mode 100644 index e2abef846..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/rb02i.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: rb02i -hide_title: true -title: Wireless Emergency Push Button -description: - The RB02I product is a wireless control terminal device for smart homes and - high reliability. It features low standby power consumption and is fully - compliant with the LoRaWAN™ protocol standard. RB02I is an emergency alarm - triggering device, with a silicone waterproof cover. -image: img/use-the-network/devices/ready-to-use/netvox/photos/rb02i.jpg -sidebar_label: Wireless Emergency Push Button -slug: /use-the-network/devices/ready-to-use/netvox/rb02i ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Emergency Push Button - -The RB02I product is a wireless control terminal device for smart homes and high -reliability. It features low standby power consumption and is fully compliant -with the LoRaWAN™ protocol standard. RB02I is an emergency alarm triggering -device, with a silicone waterproof cover. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=RB02I) -- [Datasheet](http://www.netvox.com.tw/um/RB02I/RB02Idatasheet.pdf) - -### Specifications - -#### Sensors: - -- button - -#### Dimensions: - -- width: 82 mm -- length: 82 mm -- height: 15 mm - -#### Battery: - -- type: 2 sections AAA batteries -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/netvox/rb11e.mdx b/docs/use-the-network/devices/ready-to-use/netvox/rb11e.mdx deleted file mode 100644 index 984c39532..000000000 --- a/docs/use-the-network/devices/ready-to-use/netvox/rb11e.mdx +++ /dev/null @@ -1,61 +0,0 @@ ---- -id: rb11e -hide_title: true -title: Wireless Occupancy/Temperature/Light Sensor -description: - RB11E is a Wireless Occupancy/Light/Temperature Sensor for Netvox ClassA type - devices based on the LoRaWAN open protocol and is compatible with the LoRaWAN - protocol. It combines occupancy ,temperature, tamper switch and light sensors - that suitable for detecting human movement indoors, illuminance and - temperature. -image: img/use-the-network/devices/ready-to-use/netvox/photos/rb11e.jpg -sidebar_label: Wireless Occupancy/Temperature/Light Sensor -slug: /use-the-network/devices/ready-to-use/netvox/rb11e ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Wireless Occupancy/Temperature/Light Sensor - -RB11E is a Wireless Occupancy/Light/Temperature Sensor for Netvox ClassA type -devices based on the LoRaWAN open protocol and is compatible with the LoRaWAN -protocol. It combines occupancy ,temperature, tamper switch and light sensors -that suitable for detecting human movement indoors, illuminance and temperature. - - - -### Resources - -- [Product Page](http://www.netvox.com.tw/product.asp?pro=RB11E) -- [Datasheet](http://www.netvox.com.tw/um/RB11E/RB11Edatasheet.pdf) - -### Specifications - -#### Sensors: - -- light -- temperature - -#### Dimensions: - -- width: 78 mm -- length: 78.8 mm -- height: 82.2 mm - -#### Weight: - -- 125.8 grams - -#### Battery: - -- type: 2 x 3.6V ER14505 AA lithium batteries -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/nwave/nps310sm.mdx b/docs/use-the-network/devices/ready-to-use/nwave/nps310sm.mdx deleted file mode 100644 index 166985eef..000000000 --- a/docs/use-the-network/devices/ready-to-use/nwave/nps310sm.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: nps310sm -hide_title: true -title: Smart Parking Sensor -description: - The wireless vehicle detection sensor with high detection accuracy at 99.7%, - fast detection time at 3-5 seconds, low profile - 20mm, 10 years battery life - @20 parking sessions a day and vehicle counting capabilities. -image: img/use-the-network/devices/ready-to-use/nwave/nps310sm.png -sidebar_label: Smart Parking Sensor -slug: /use-the-network/devices/ready-to-use/nwave/nps310sm ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Smart Parking Sensor - -The wireless vehicle detection sensor with high detection accuracy at 99.7%, -fast detection time at 3-5 seconds, low profile - 20mm, 10 years battery life -@20 parking sessions a day and vehicle counting capabilities. - - - -### Resources - -- [Product Page](https://www.nwave.io/smart-parking-sensor/) - -### Specifications - -#### Sensors: - -- magnetometer -- temperature -- proximity - -#### Dimensions: - -- height: 20 mm - -#### Weight: - -- 460 grams - -#### Battery: - -- type: AA 13,500mAh Li-SOCI2 -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/origo/lorawan-watch.mdx b/docs/use-the-network/devices/ready-to-use/origo/lorawan-watch.mdx deleted file mode 100644 index 0be5fabc4..000000000 --- a/docs/use-the-network/devices/ready-to-use/origo/lorawan-watch.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: lorawan-watch -hide_title: true -sidebar_label: Lorawan Watch -title: Lorawan Watch ED20W -description: ED20W is a smart wristband with GPS/ LoRa®/Bluetooth functions. combined with motion sensors can achieve real-time positioning. With wearing detection, it can realize real-time collection of health data such as heart rate, number of steps and sleep. the detected data will be transmitted back to the server platform through the LoRaWAN base station. -slug: /use-the-network/devices/ready-to-use/origo/lorawan-watch ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Lorawan Watch ED20W - -Smart watch for Lone worker, Oil&Gas industrial, Minning, Energy and utilities, Real estate and construction, Manufacturing industrial, Transportation and logistics. - - - -### Resources - -- [ED20W LoRa GPS watch datasheet](http://www.origoelec.com/End-Devices/ED20W-datasheet.pdf) - -- [ED20W Payload](http://www.origoelec.com/End-Devices/ED20W-protocol-payload.pdf) - -### Features - -- Connectivity via LoRa -- Class type: Class A -- GNSS+Bluetooth (optional) positioning -- Tracking your daily activity:Heart rate, step and sleep monitor. -- SOS for cloud platform management - -### Specification - -- Modem: ISM Band LoRa® -- Frequency: EU868MHz,US915MHz,AS923MHz -- Class Type: Class A -- Positioning: Build in GNSS, Bluetooth (optional) and accelerometer -- Display: 240*240 TFT Display -- Rubber strap: 22mm standard size -- Buttons: Two function buttons -- Battery capacity: Polymer battery,400mAh, 3.8V -- Charging: Magnetic charging cable -- Enclosure: IP65 -- Electronic tags: Support RFID (NFC Tag and M1 card) (for payment, public transportation, access control, etc.) (not equipped by default) -- Health data: Heart rate, blood pressure, pedometer, sleep detection -- Alarm: SOS alarm,Low power alarm -- Operation temperature: 0~60℃ -- Operation humidity: 10%~90%,Non-condensing -- Dimensions: TYP. 48*52*14.5mm (W*L*H) -- Weight: 50g - diff --git a/docs/use-the-network/devices/ready-to-use/origo/smart-badges.mdx b/docs/use-the-network/devices/ready-to-use/origo/smart-badges.mdx deleted file mode 100644 index 8a419985c..000000000 --- a/docs/use-the-network/devices/ready-to-use/origo/smart-badges.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: smart-badges -hide_title: true -sidebar_label: Smart Badges -title: Smart Badges ED210 -description: ED210 is an intelligent GPS tracker based on LORAWAN network transmission. It supports GNSS outdoor positioning and Bluetooth 4.0 indoor positioning. The positioning accuracy is 10 meters outdoor and 3~5 meters indoor. Through the intelligent tracker, beacons, LoRaWAN gateway and platform, it can realize the real-time positioning of staff and visitors. Help enterprises and institutions achieve personnel management and safe production. -slug: /use-the-network/devices/ready-to-use/origo/smart-badges ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Smart Badges ED210 - -ED210 is an intelligent GPS tracker based on LORAWAN network transmission. It supports GNSS outdoor positioning and Bluetooth 4.0 indoor positioning. The positioning accuracy is 10 meters outdoor and 3~5 meters indoor. Through the intelligent tracker, beacons, LoRaWAN gateway and platform, it can realize the real-time positioning of staff and visitors. Help enterprises and institutions achieve personnel management and safe production. - - - -### Resources - -- [ED210 Smart Badges datasheet](http://www.origoelec.com/End-Devices/ED210-Smart-badge-datasheet.pdf) - -- [ED210 Payload](http://www.origoelec.com/End-Devices/ED210-Payload-LoRa-staff-badges.pdf) - -### Features - -- Indoor & Outdoor real-time positioning -- Build in NFC, RFID(Opt.) -- SOS in emergency: Press the positioning button to relocate your position and send to the platform -- External personnel management -- Support OEM for Bulk order - -### Specification - -- Communication: Build in LoRa modul -- Frequency: EU868MHz/US915MHz -- Communication Range: 1KM in dense urban, 3~5KM line-off-site -- Bluetooth: Building in Bluetooth -- Positioning: Outdoor GPS positioning and indoor Bluetooth positioning -- Positioning accuracy: 10 meters (outdoor) 3-5 meters (indoor) -- Gyro: Build in gyro , Supports power saving mode in non-motion state -- Battery: Rechargeable 900mah lithium battery -- Charging port: Type-C -- Buttons: 1-SOS button 2-Power button -- Enclosure: IP66 -- Battery life: More than 40hours(GNSS positioning interval 5mins) -- Dimensions: 86.5*55*8mm -- NFC: Support 1~15CM detect range(Optional) -- Time sync: Time synchronization with GPS -- LED indicator: Three color LED indicator -- Operation temperature: -20℃~60℃ -- Uplink frequency: customized -- Positioning time: Cold start 38S hot start 1S Recapture <1S -- Charging voltage: 5V - diff --git a/docs/use-the-network/devices/ready-to-use/ready-to-use.mdx b/docs/use-the-network/devices/ready-to-use/ready-to-use.mdx deleted file mode 100644 index 4e6ec3933..000000000 --- a/docs/use-the-network/devices/ready-to-use/ready-to-use.mdx +++ /dev/null @@ -1,172 +0,0 @@ ---- -id: ready-to-use -hide_title: true -sidebar_label: Manufacturers -slug: /use-the-network/devices/ready-to-use ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -
-
-
-
- -
-

Ready to Use Devices

-

Manufacturers

-
-
-
-
-
- - \ No newline at end of file diff --git a/docs/use-the-network/devices/ready-to-use/seeed-sensecap.mdx b/docs/use-the-network/devices/ready-to-use/seeed-sensecap.mdx deleted file mode 100644 index 99e1a2204..000000000 --- a/docs/use-the-network/devices/ready-to-use/seeed-sensecap.mdx +++ /dev/null @@ -1,247 +0,0 @@ ---- -id: seeed-sensecap -hide_title: true -sidebar_label: SEEED SenseCAP -slug: /use-the-network/devices/ready-to-use/SEEED-SenseCAP ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Seeed SenseCAP - -
- -
- -### Introduction - -The SEEED SenseCAPs are are a series of industrial IoT products primarily -centered around Smart Agriculture. They are based on the LoRaWAN protocol and -deployable worldwide with multiple ISM bands. SenseCAPs are encapsulated in IP66 -enclosures, making them applicable in outdoor remote sensing scenarios such as -Smart Farming, Smart City, and other IoT applications that need low-power, -long-distance, and long-term data collection. - -
- -
- -### Sensors - -| Sensors | Range | Accuracy | -| :----------------------------- | :------------------- | :------------------------------------------ | -| AirTemp&Humi Sensor | -40~90°\(0-100%RH\) | 土 0.3°C 土 2%RH | -| Soil Temp&Humi Sensor | -30~ 70°\(O~ 1 00%RH | 土 0.2°c 土 2%RH \(0%~50%\) | -| Air Pressure Sensor | 300-1100hPa | 士 1hPa \(950hPa~ 1 OSOhPa \(0\)° \(-40°c\) | -| CO2 Sensor | 400-10,000ppm | 士 30ppm+3% | -| Light Sensor | Max 188,000Lux | 0.045Lux/LSB | -| Wind Speed Sensor | 0-60m/s | 0.125m/s | -| Wind Direction Sensor | 8 Directions | 45° | -| Water PH Sensor | | | -| Light quantum Sensor | | | -| Electrical Conductivity Sensor | | | -| Dissolved Oxygen Sensor | | | -| Soil VWC&EC&Temp Sensor | | | -| Rainfall Recorder Sensor | | | - -
- The Sensor Probes can easily be interchanged between Sensor Node Controllers. -
- -### Internals - -
- - -
- -
Easily removed from enclosures.
- -
- -
- -
- Ready for field-deployment right out of the box. -
- -
- -
- -
- The main SenseCAP module contains the LoRaWAN radio, antenna, and batteries. -
- -### Set up new device with existing keys - -Copy down the "EUI" and the "KEY" from the label on your SenseCAP device: - -
- -
- -Understand that there is a bit of a naming issue here. The key names are mapped -as such: - -
EUI = DEVEUI = Device EUI
- -

KEY = DEVICECODE = Device Code

- -
- Is this super convoluted and frustrating? Yes. We did not make it this way. -
-

- Now, we need to get those two keys and insert them into the following URL: -

- -
- - https://sensecap.seeed.cc/makerapi/device/view_device_info?nodeEui= - DEVEUI&deviceCode= - DEVICECODE - -
- -In the above example, the URL would look like such: - -
DEVEUI (Device EUI): 2cf7f12121XXXXXX
- -

DEVICECODE (Device Code): 1826ed12XXXXXXXX

- -

- - https://sensecap.seeed.cc/makerapi/device/view_device_info?nodeEui= - 2cf7f12121XXXXXX&deviceCode= - 1826ed12XXXXXXXX - -

- -

-The SenseCAP sensor device's AppEUI and AppKey have been flashed into the device by SEEED. -We will use the HTTP API to retrieve the actual App EUI and App Key. -

-

-You can use a browser to issue an HTTP GET request. -

-We simply paste the URL we constructed above into a browser address bar, and it should return a JSON object in the following format containing the *actual* keys programmed onto the device: -
- - { - "code": "0", - "data": { - "nodeEui": "2cf7f12121XXXXXX", - "deviceCode": "1826ed12XXXXXXXX", - "lorawanInformation": { - "dev_eui": "2CF7F12121XXXXXX", - "app_eui": "8000000000XXXXXX", - "app_key": "3BF3D4C5744A057E0A1A61F4XXXXXXXX" - } - } - } - -
- -The last three keys in this object (dev_eui, app_eui, and app_key) will be used -to create this device in the -[Helium Console](https://console.helium.com/devices). - -
- -
- -You have now linked your new SenseCAP device to the Helium Console! - -We now simply have to turn it on. Carefully unscrew the cap on the SenseCAP -node, switch it to the "ON" position, and replace the cap. - -
- -
- -At this point, you may open up the new device within the Helium Console, click -the "Debug" icon on the right, and should see packets arriving in short order! - -
- -
- -### Programming the SenseCAP - -In some situations, you may want to change the keys provisioned on the device. -To reprogram the SenseCap, you will need a TTL/Serial cable. I added some 90 -degree headers on the base unit to make it easier to connect a molex connector, -but you may can make do with sliding some pins in there and holding them at an -angle to maintain contact. Only connect the Ground and the TX/RX lines; leave -the 3v3 pin disconnected. At this point, we can either connect to the device -directly using a serial terminal, or use the SenseCAP GUI utility \(for Windows -and Mac only ATM\) found -[here](https://github.com/Seeed-Solution/SenseCAP-Node-Configuration-Tool). - -
- -
- -Connect your cable, turn the unit on, and then tap the Reset button while -holding the Set button. This will put you into programming mode. Following that, -either jot down your Device EUI/App EUI/App Key from the right pane in the -utility and enter those into the Helium Console, or get the Helium keys from the -Console, enter them in this utility, and write them down to the node. - -
- -
- -Voila! Unplug your cable, hit the reset button, wait for the red LIVE led to -flash a few times, and you should see an activation come across your Helium -Console! At this point, carefully replace the sensor cap, and you should be good -to go! diff --git a/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-air-th.mdx b/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-air-th.mdx deleted file mode 100644 index ec4155612..000000000 --- a/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-air-th.mdx +++ /dev/null @@ -1,61 +0,0 @@ ---- -id: sensecap-air-th -hide_title: true -title: SenseCAP Wireless Air Temperature and Humidity Sensor - LoRaWAN -description: - It measures temperature and humidity in the atmosphere. It's designed with a - 2-in-1 sensor, a custom battery, and an industry-grade enclosure, optimized - for outdoor use cases that need reliable data collection for years. -image: img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-air-th-deployment.jpg -sidebar_label: SenseCAP Wireless Air Temperature and Humidity Sensor - LoRaWAN -slug: /use-the-network/devices/ready-to-use/seeed-studio/sensecap-air-th ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## SenseCAP Wireless Air Temperature and Humidity Sensor - LoRaWAN - -It measures temperature and humidity in the atmosphere. It's designed with a -2-in-1 sensor, a custom battery, and an industry-grade enclosure, optimized for -outdoor use cases that need reliable data collection for years. - - - -### Resources - -- [Product Page](https://www.seeedstudio.com/LoRaWAN-Soil-Moisture-and-Temperature-Sensor-EU868-p-4316.html) -- [Datasheet](https://files.seeedstudio.com/products/317990687/res/LoRaWAN%20Gateway%20and%20Wireless%20Sensor%20Catalog-V1.6%20NEW.pdf) -- [Reseller - Distrelec](https://www.distrelec.nl/en/sensecap-lorawan-wireless-air-temperature-and-humidity-sensor-ip66-868mhz-seeed-studio-114991726/p/30167647?q=sensecap&pos=4&origPos=4&origPageSize=50&track=true) -- [Reseller - Mouser](https://www.mouser.com/new/seeed-studio/seeed-sensecap-lora-air-temp-sensor/) -- [Reseller - Seeed](https://www.seeedstudio.com/LoRaWAN-Air-Temperature-and-Humidity-Sensor-EU868-p-4307.html) - -### Specifications - -#### Sensors: - -- humidity -- temperature - -#### Dimensions: - -- width: 56 mm -- length: 173 mm -- height: 56 mm - -#### Weight: - -- 236 grams - -#### Battery: - -- type: Lithium Thionyl Chloride (non-rechargeable) -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-co2.mdx b/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-co2.mdx deleted file mode 100644 index 05e3c10dc..000000000 --- a/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-co2.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: sensecap-co2 -hide_title: true -title: SenseCAP Wireless CO2 Sensor - LoRaWAN -description: - It measures levels of CO2 emission in the atmosphere, designed with an NDIR - CO2 sensor and a custom battery. It's dustproof, optimal for use cases that - need reliable data collection, even in dusted indoor environments such as - chicken farms. -image: img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-co2-deployment.jpg -sidebar_label: SenseCAP Wireless CO2 Sensor - LoRaWAN -slug: /use-the-network/devices/ready-to-use/seeed-studio/sensecap-co2 ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## SenseCAP Wireless CO2 Sensor - LoRaWAN - -It measures levels of CO2 emission in the atmosphere, designed with an NDIR CO2 -sensor and a custom battery. It's dustproof, optimal for use cases that need -reliable data collection, even in dusted indoor environments such as chicken -farms. - - - -### Resources - -- [Product Page](https://www.seeedstudio.com/LoRaWAN-CO2-Sensor-EU868-p-4311.html) -- [Datasheet](https://files.seeedstudio.com/products/317990687/res/LoRaWAN%20Gateway%20and%20Wireless%20Sensor%20Catalog-V1.6%20NEW.pdf) -- [Reseller - Distrelec](https://www.distrelec.nl/en/sensecap-lorawan-wireless-co2-sensor-ip66-868mhz-seeed-studio-114991728/p/30167649?q=sensecap&pos=2&origPos=2&origPageSize=50&track=true) -- [Reseller - Mouser](https://www.mouser.com/new/seeed-studio/seeed-sensecap-lora-co2-sensor/) -- [Reseller - Seeed](https://www.seeedstudio.com/LoRaWAN-CO2-Sensor-EU868-p-4311.html) - -### Specifications - -#### Sensors: - -- co2 - -#### Dimensions: - -- width: 56 mm -- length: 173 mm -- height: 56 mm - -#### Weight: - -- 319 grams - -#### Battery: - -- type: Lithium Thionyl Chloride (non-rechargeable) -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-light.mdx b/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-light.mdx deleted file mode 100644 index dbe7d9fa7..000000000 --- a/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-light.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: sensecap-light -hide_title: true -title: SenseCAP Wireless Light Intensity Sensor - LoRaWAN -description: - It measures the intensity of light in lux from 0 - 188000 lux. It is designed - with battery-powered and IP66 enclosure for outdoor use, optimized for use - cases that need reliable data collection over years. -image: img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-light-deployment.jpg -sidebar_label: SenseCAP Wireless Light Intensity Sensor - LoRaWAN -slug: /use-the-network/devices/ready-to-use/seeed-studio/sensecap-light ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## SenseCAP Wireless Light Intensity Sensor - LoRaWAN - -It measures the intensity of light in lux from 0 - 188000 lux. It is designed -with battery-powered and IP66 enclosure for outdoor use, optimized for use cases -that need reliable data collection over years. - - - -### Resources - -- [Product Page](https://www.seeedstudio.com/LoRaWAN-Light-Intensity-Sensor-EU868-p-4313.html) -- [Datasheet](https://files.seeedstudio.com/products/317990687/res/LoRaWAN%20Gateway%20and%20Wireless%20Sensor%20Catalog-V1.6%20NEW.pdf) -- [Reseller - Distrelec](https://www.distrelec.nl/en/sensecap-lorawan-wireless-light-intensity-sensor-ip66-868mhz-seeed-studio-114991727/p/30167648?q=sensecap&pos=3&origPos=3&origPageSize=50&track=true) -- [Reseller - Mouser](https://www.mouser.com/new/seeed-studio/seeed-sensecap-lora-light-intensity-sensor/) -- [Reseller - Seeed](https://www.seeedstudio.com/LoRaWAN-Light-Intensity-Sensor-EU868-p-4313.html) - -### Specifications - -#### Sensors: - -- light - -#### Dimensions: - -- width: 56 mm -- length: 173 mm -- height: 56 mm - -#### Weight: - -- 288 grams - -#### Battery: - -- type: Lithium Thionyl Chloride (non-rechargeable) -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-pressure.mdx b/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-pressure.mdx deleted file mode 100644 index c9c6102e2..000000000 --- a/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-pressure.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: sensecap-pressure -hide_title: true -title: SenseCAP Wireless Barometric Pressure Sensor - LoRaWAN -description: - It measures atmospheric pressure, featuring high-precision, stability, and - high EMC robustness. It’s designed with an air pressure sensor, a custom - battery, and an industry-grade enclosure, optimized for outdoor use cases that - need reliable data collection over years. -image: img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-pressure-deployment.jpg -sidebar_label: SenseCAP Wireless Barometric Pressure Sensor - LoRaWAN -slug: /use-the-network/devices/ready-to-use/seeed-studio/sensecap-pressure ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## SenseCAP Wireless Barometric Pressure Sensor - LoRaWAN - -It measures atmospheric pressure, featuring high-precision, stability, and high -EMC robustness. It’s designed with an air pressure sensor, a custom battery, and -an industry-grade enclosure, optimized for outdoor use cases that need reliable -data collection over years. - - - -### Resources - -- [Product Page](https://www.seeedstudio.com/LoRaWAN-Barometric-Pressure-Sensor-EU868-p-4309.html) -- [Datasheet](https://files.seeedstudio.com/products/317990687/res/LoRaWAN%20Gateway%20and%20Wireless%20Sensor%20Catalog-V1.6%20NEW.pdf) -- [Reseller - Distrelec](https://www.distrelec.nl/en/sensecap-lorawan-wireless-barometric-pressure-sensor-ip66-868mhz-seeed-studio-114991729/p/30167650?q=sensecap&pos=1&origPos=1&origPageSize=50&track=true) -- [Reseller - Mouser](https://www.mouser.com/new/seeed-studio/seeed-sensecap-lora-barometric-sensor/) -- [Reseller - Seeed](https://www.seeedstudio.com/LoRaWAN-Barometric-Pressure-Sensor-EU868-p-4309.html) - -### Specifications - -#### Sensors: - -- barometer - -#### Dimensions: - -- width: 56 mm -- length: 173 mm -- height: 56 mm - -#### Weight: - -- 237 grams - -#### Battery: - -- type: Lithium Thionyl Chloride (non-rechargeable) -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-soil-th.mdx b/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-soil-th.mdx deleted file mode 100644 index 6647e4846..000000000 --- a/docs/use-the-network/devices/ready-to-use/seeed-studio/sensecap-soil-th.mdx +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: sensecap-soil-th -hide_title: true -title: SenseCAP Wireless Soil Moisture and Temperature Sensor - LoRaWAN -description: - It measures soil volumetric water content (VWC) and temperature. It's designed - with a 2-in-1 sensor that integrates soil temperature and soil moisture, a - custom battery and an IP66 enclosure, optimized for outdoor use cases that - need reliable data collection over years. -image: img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-soil-th-deployment.jpg -sidebar_label: SenseCAP Wireless Soil Moisture and Temperature Sensor - LoRaWAN -slug: /use-the-network/devices/ready-to-use/seeed-studio/sensecap-soil-th ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## SenseCAP Wireless Soil Moisture and Temperature Sensor - LoRaWAN - -It measures soil volumetric water content (VWC) and temperature. It's designed -with a 2-in-1 sensor that integrates soil temperature and soil moisture, a -custom battery and an IP66 enclosure, optimized for outdoor use cases that need -reliable data collection over years. - - - -### Resources - -- [Product Page](https://www.seeedstudio.com/LoRaWAN-Soil-Moisture-and-Temperature-Sensor-EU868-p-4316.html) -- [Datasheet](https://files.seeedstudio.com/products/317990687/res/LoRaWAN%20Gateway%20and%20Wireless%20Sensor%20Catalog-V1.6%20NEW.pdf) -- [Reseller - Mouser](https://www.mouser.com/ProductDetail/Seeed-Studio/101990565/?qs=wnTfsH77Xs6z38MfPrPBUw%3D%3D) -- [Reseller - Distrelec](https://www.distrelec.nl/en/sensecap-lorawan-wireless-soil-moisture-and-temperature-sensor-ip66-868mhz-seeed-studio-101990564/p/30167645?q=sensecap&pos=6&origPos=6&origPageSize=50&track=true) -- [Reseller - Seeed](https://www.seeedstudio.com/LoRaWAN-Soil-Moisture-and-Temperature-Sensor-EU868-p-4316.html) - -### Specifications - -#### Sensors: - -- moisture -- temperature - -#### Dimensions: - -- width: 56 mm -- length: 173 mm -- height: 56 mm - -#### Weight: - -- 415 grams - -#### Battery: - -- type: Lithium Thionyl Chloride (non-rechargeable) -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/sensedge/senstick-pro.mdx b/docs/use-the-network/devices/ready-to-use/sensedge/senstick-pro.mdx deleted file mode 100644 index 03b24eb83..000000000 --- a/docs/use-the-network/devices/ready-to-use/sensedge/senstick-pro.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: senstick-pro -hide_title: true -title: Senstick Pro -description: Microclimate Sensor for Harsh Environment -image: img/use-the-network/devices/ready-to-use/sensedge/senstick-pro.jpg -sidebar_label: Senstick Pro -slug: /use-the-network/devices/ready-to-use/sensedge/senstick-pro ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Senstick Pro - -Microclimate Sensor for Harsh Environment - - - -### Resources - -- [Product Page](http://senstick.co) -- [Datasheet](http://senstick.co/downloads/Sensedge-SMC20-Datasheet.pdf) -- [Reseller - Concept13](https://www.concept13.co.uk/) -- [Reseller - Arcsgroup](https://thearcsgroup.com/) -- [Reseller - Sensational Systems](https://sensational.systems/) -- [Reseller - mydevices](https://mydevices.com/) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- pressure -- battery - -#### Dimensions: - -- width: 18 mm -- length: 210 mm -- height: 18 mm - -#### Weight: - -- 70 grams - -#### Battery: - -- type: AAA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/sensedge/senstick-pure.mdx b/docs/use-the-network/devices/ready-to-use/sensedge/senstick-pure.mdx deleted file mode 100644 index c72aa7ecd..000000000 --- a/docs/use-the-network/devices/ready-to-use/sensedge/senstick-pure.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: senstick-pure -hide_title: true -title: Senstick Pure -description: Indoor Air Quality Sensor -image: img/use-the-network/devices/ready-to-use/sensedge/senstick-pure.jpg -sidebar_label: Senstick Pure -slug: /use-the-network/devices/ready-to-use/sensedge/senstick-pure ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Senstick Pure - -Indoor Air Quality Sensor - - - -### Resources - -- [Product Page](http://senstick.co) -- [Datasheet](http://senstick.co/downloads/Sensedge-SIAQ30-Datasheet.pdf) -- [Reseller - Concept13](https://www.concept13.co.uk/) -- [Reseller - Arcsgroup](https://thearcsgroup.com/) -- [Reseller - Sensational Systems](https://sensational.systems/) -- [Reseller - mydevices](https://mydevices.com/) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- pressure -- tvoc - -#### Dimensions: - -- width: 18 mm -- length: 120 mm -- height: 18 mm - -#### Weight: - -- 50 grams - -#### Battery: - -- type: ER14505 -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/tektelic/t000489x-smart-room-base.mdx b/docs/use-the-network/devices/ready-to-use/tektelic/t000489x-smart-room-base.mdx deleted file mode 100644 index 9e91c1d49..000000000 --- a/docs/use-the-network/devices/ready-to-use/tektelic/t000489x-smart-room-base.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: t000489x-smart-room-base -hide_title: true -title: Kona All-in-One Smart Room Sensor - Base edition -description: - Multi-purpose LoRaWAN IoT sensor packed into a very small form factor -image: img/use-the-network/devices/ready-to-use/tektelic/smart-room-sensor.jpg -sidebar_label: Kona All-in-One Smart Room Sensor - Base edition -slug: /use-the-network/devices/ready-to-use/tektelic/t000489x-smart-room-base ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Kona All-in-One Smart Room Sensor - Base edition - -Multi-purpose LoRaWAN IoT sensor packed into a very small form factor - - - -### Resources - -- [Product Page](https://tektelic.com/catalog/smart-room-lorawan-sensor-base) -- [Datasheet](https://tektelic.com/public/uploads/Brochures/Smart%20Room%20Sensor.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- magnetometer -- accelerometer -- light -- moisture - -#### Dimensions: - -- width: 17 mm -- length: 42 mm -- height: 42 mm - -#### Weight: - -- 25 grams - -#### Battery: - -- type: CR2477B -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/tektelic/t00048xx-smart-room-pir.mdx b/docs/use-the-network/devices/ready-to-use/tektelic/t00048xx-smart-room-pir.mdx deleted file mode 100644 index 6a69e6adf..000000000 --- a/docs/use-the-network/devices/ready-to-use/tektelic/t00048xx-smart-room-pir.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: t00048xx-smart-room-pir -hide_title: true -title: Kona All-in-One Smart Room Sensor - PIR edition -description: - Multi-purpose LoRaWAN IoT sensor packed into a very small form factor -image: img/use-the-network/devices/ready-to-use/tektelic/smart-room-sensor.jpg -sidebar_label: Kona All-in-One Smart Room Sensor - PIR edition -slug: /use-the-network/devices/ready-to-use/tektelic/t00048xx-smart-room-pir ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Kona All-in-One Smart Room Sensor - PIR edition - -Multi-purpose LoRaWAN IoT sensor packed into a very small form factor - - - -### Resources - -- [Product Page](https://tektelic.com/catalog/smart-room-lorawan-sensor-pir) -- [Datasheet](https://tektelic.com/public/uploads/Brochures/Smart%20Room%20Sensor.pdf) - -### Specifications - -#### Sensors: - -- temperature -- humidity -- magnetometer -- accelerometer -- light -- pir - -#### Dimensions: - -- width: 17 mm -- length: 42 mm -- height: 42 mm - -#### Weight: - -- 25 grams - -#### Battery: - -- type: CR2477B -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/tekzitel/tekzipark.mdx b/docs/use-the-network/devices/ready-to-use/tekzitel/tekzipark.mdx deleted file mode 100644 index b85a38011..000000000 --- a/docs/use-the-network/devices/ready-to-use/tekzitel/tekzipark.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: tekzipark -hide_title: true -title: TEKZIPARK -description: - TEKZIPARK is a battery powered smart parking sensor to provide occupancy - status updates of parking spots wirelessly to your cloud environment. - TEKZIPARK uses radar technology to detect vehicle presence thereby providing a - high degree of certainty of vehicle presence/absence. -image: img/use-the-network/devices/ready-to-use/tekzitel/tekzipark.png -sidebar_label: TEKZIPARK -slug: /use-the-network/devices/ready-to-use/tekzitel/tekzipark ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## TEKZIPARK - -TEKZIPARK is a battery powered smart parking sensor to provide occupancy status -updates of parking spots wirelessly to your cloud environment. TEKZIPARK uses -radar technology to detect vehicle presence thereby providing a high degree of -certainty of vehicle presence/absence. - - - -### Resources - -- [Product Page](https://tekzitel.com/product/tekzipark-lorawan-surface/) -- [Datasheet](https://tekzitel.com/prodspecs/TEKZIPARK-Specification_Data_Sheet_1_0_lorawan.pdf) - -### Specifications - -#### Sensors: - -- radar -- magnetometer -- temperature -- battery - -#### Dimensions: - -- width: 219 mm -- length: 219 mm -- height: 30 mm - -#### Weight: - -- 350 grams - -#### Battery: - -- type: C -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/the-things-products/the-things-node.mdx b/docs/use-the-network/devices/ready-to-use/the-things-products/the-things-node.mdx deleted file mode 100644 index 6d21da033..000000000 --- a/docs/use-the-network/devices/ready-to-use/the-things-products/the-things-node.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -id: the-things-node -hide_title: true -title: The Things Node -description: - The Things Node is an ideal LoRaWAN device to start prototyping your ideas - without having to deal with breadboards, wires and sensors. -image: img/use-the-network/devices/ready-to-use/the-things-products/the-things-node.jpg -sidebar_label: The Things Node -slug: /use-the-network/devices/ready-to-use/the-things-products/the-things-node ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## The Things Node - -The Things Node is an ideal LoRaWAN device to start prototyping your ideas -without having to deal with breadboards, wires and sensors. - - - -### Specifications - -#### Sensors: - -- accelerometer -- battery -- button -- humidity -- light -- temperature - -#### Battery: - -- type: 3x AAA -- replaceable: True - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/the-things-products/the-things-uno.mdx b/docs/use-the-network/devices/ready-to-use/the-things-products/the-things-uno.mdx deleted file mode 100644 index 10137500d..000000000 --- a/docs/use-the-network/devices/ready-to-use/the-things-products/the-things-uno.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -id: the-things-uno -hide_title: true -title: The Things Uno -description: - The Things Uno is based on the Arduino Leonardo (not the Arduino Uno) with an - added Microchip LoRaWAN module. -image: img/use-the-network/devices/ready-to-use/the-things-products/the-things-uno.jpg -sidebar_label: The Things Uno -slug: /use-the-network/devices/ready-to-use/the-things-products/the-things-uno ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## The Things Uno - -The Things Uno is based on the Arduino Leonardo (not the Arduino Uno) with an -added Microchip LoRaWAN module. - - - -- [Reseller - Farnell](https://de.farnell.com/the-things-network/ttn-un-868/the-things-uno-eu/dp/2675815) -- [Video](https://www.youtube.com/watch?v=28Fh5OF8ev0) - -### Specifications - -#### Dimensions: - -- width: 53.3 mm -- length: 68.6 mm - ---- - -Content generated from -[LoRaWAN-devices](https://github.com/TheThingsNetwork/lorawan-devices) diff --git a/docs/use-the-network/devices/ready-to-use/victor/victor-trap-v4xx.mdx b/docs/use-the-network/devices/ready-to-use/victor/victor-trap-v4xx.mdx deleted file mode 100644 index 1afff09cb..000000000 --- a/docs/use-the-network/devices/ready-to-use/victor/victor-trap-v4xx.mdx +++ /dev/null @@ -1,154 +0,0 @@ ---- -id: victor-trap-v4xx -hide_title: true -sidebar_label: Victor Trap V450 & V460 -title: Victor Trap V450 & V460 -description: Victor Trap - Self Provisioning Guide -slug: /use-the-network/devices/ready-to-use/victor/victor-trap-v4xx ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Victor Trap V450 & V460 - -Self Provisioning Guide for Victor Connected Rodent Control Devices. - -The V450 is the "Electronic Mouse Trap", while the V460 is a significantly larger "Electronic Rat Trap". -The only difference is the longer & wider tunnel and rail spacing. ("Trap" is a euphemism here. It does electrocute the rodents that enter the tunnel.) -Both units share the same installation and operation. - - - -:::info - -If you need any help provisioning this sensor, please join the `#console` -channel on [the Helium Discord Server](https://discord.gg/helium). - -::: - -### Resources - -[Manual](https://www.vlinkhq.com/instructions/V450-V460-Vlink-User-Manual-US.pdf) - -[Brochure](https://www.vlinkhq.com/images/VLink_Brochure.pdf) - -### Add device in Console - -To start, you'll need to create a Helium Console account and add your device. - -**Your trap vendor should have provided a corresponding `DevEUI`, `AppEUI`, and `AppKey` for each delivered device.** -Regrettably, these important values are not included anywhere in the box, packaging, or unit labeling. -If you did not receive these key values, you must contact the seller and obtain them before proceeding. - -Once you have these three values, follow our -[quick start for instructions](https://docs.helium.com/use-the-network/console/quickstart). - -Add a Label for your device, so that one shared configuration can be used by any additional devices you install. - -### Victor VLINK Portal -Victor has not published the a Payload decoder or data documentation for these traps, so you must use the hosted monitoring solution at Woodstream's victorhq.com. - -:::info - -You will need an approved login at victorhq.com. -In some cases, the device seller may have worked with Woodstream to create an account for you at a pre-arranged email address, or you might have to create one and wait for approval to use it. -There is no way to complete this step yourself, as each new account needs manual approval. - -::: - -Go to https://vlink.victorpest.com/ and select "Sign In" in the upper-right. -**Do not** sign in at "Registered Customers", but use the Admin Portal Login instead. -Once your login is successful, you must create a "Site" regardless of how solo simple your trap installation might be. -Create a Site, including a full floorplan with a Building, Floor, and Room. You can not add a Trap until you have these defined. - -### Integration Configuration for VLINK - -Once you have added your device to Console, and a login and Site layout on VLINK Portal, you will add an Integration to the Helium console to send data from your device to VLINK. - -#### Create HTTP Integration - -For your first trap, create a new HTTP integration in Console. -Navigate to the Integrations page using the left navigation and then select the HTTP integration. - - - -Next we'll fill in the details, see instructions and image below. - -1. Enter the VLINK Endpoint URL: - `https://ibgsq3pdbl.execute-api.us-west-2.amazonaws.com/default/console-to-victormouse-translator` -2. Enter the HTTP Header - Key: `x-api-key` and Value: - `peKuqRvLce7CuqUE0EkR1aE9bt0Hy3nJnYSh7yM3` -3. Enter the name for this Integration: _VLINK Integration_ -4. Finally, click _Add Integration_ to complete. - - - -#### Create a Flow to connect trap Devices to the Integration. - -On the Helium Console, select Flows. Add a Node using the Label you assigned your Device. -Add a node for the _VLINK Integration_ and draw a connecting line from the Label to the Integration. -The solid line will change to a dotted line to indicate data is flowing. - -### Add Device to VLINK Platform - -You are now ready to add your device to VLINK, using the App or VLINK Portal interface. -For this step, you will use a (non-Helium) serial-number provided by Victor and shown on the QR Sticker inside the trap. -This is likely to be a 15-character identifier that starts with `LM`, entered manually or by QR code. - -The App will guide the onboarding process and provide instruction for when to turn the device on. Pause there to set up Console observation. - -#### Power up the device - -Install the (included) Lithium AA Batteries and close the bottom panel with the included screws, fully sealing the weatherproofing gasket. -Before powering on the device, open the Helium Console, select the Device, and open the Debug panel or scroll down to the recent Packet list to observe activity. - -Power on the unit by pressing the power button. -You should see a few LED blinks from the middle indicator near the power button, and also see initial data packets in the Console Device listing. - -If you do not see any Join or Uplink packets, pause here and ensure the unit is correctly added in Console. Double-check each of the three key values. -Once you see packets arriving from your unit, you are ready to continue with registration and naming, add it to a Site/Building/Floor/Room in the Portal, bait the trap and wait for victory over rodents. - -### FAQ - -#### What does ErrorCode in the Event Log mean? - -- ErrorCode: 0 = Lid Closed -- ErrorCode: 1 = Lid is Open - -#### What sequence of messages should I expect (in Console)? - -1. Series of 10-15 messages - These include network join, power up status, other - status messages -2. Then 5 messages 10 minutes apart -3. Then a status message every 23 hours - -These messages are sent with Acknowledgement requested, so you will see both `Uplink` and `Acknowledge` packets. - -#### What sequence of messages should I expect in the VLINK dashboard? - -In the `Activity Log` you will see "Trap Powered Up" and a series of "Trap Status" logs. - -#### What are the button presses? - -If unit is off: - -- Pressing the button will turn it on and initialize the unit - -If unit is on: - -- 1 quick button press will send a status message -- 1 Long button press will turn the unit off - -Note that there is only one button (Power) and the adjacent indicator is a Blue LED that flashes on network activity. It is not a button. \ No newline at end of file diff --git a/docs/use-the-network/policies/policies.mdx b/docs/use-the-network/policies/policies.mdx deleted file mode 100644 index dbd213683..000000000 --- a/docs/use-the-network/policies/policies.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: policies -sidebar_label: Policies and Terms -slug: /use-the-network/policies ---- - -# Policies and Terms - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -## Privacy Policy - -Privacy Policy for usage [here](/use-the-network/policies/privacy). - -## Terms of Service - -Terms of Service for usage [here](/use-the-network/policies/terms). diff --git a/docs/use-the-network/policies/privacy.mdx b/docs/use-the-network/policies/privacy.mdx deleted file mode 100644 index 1f4dc8cf1..000000000 --- a/docs/use-the-network/policies/privacy.mdx +++ /dev/null @@ -1,96 +0,0 @@ ---- -id: privacy -sidebar_label: Privacy Policy -slug: /use-the-network/policies/privacy ---- - -# Privacy Policy - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -This Privacy Policy governs the manner in which Helium Inc. ("Helium") collect, use, maintain and disclose information collected from users (each, a "User" or "you") on the www.helium.com website and all products and services offered by Helium ("Site"). - -By using the Site or otherwise providing information to Helium, you agree to our Privacy Policy. If you do not agree with this policy or its terms, please do not visit or use our Site. The Helium Terms and Conditions are incorporated within the terms of this Privacy Policy. Please make sure you read and agree to them before using our Site. - -Our Privacy Policy does not apply to products or services offered by other companies, individuals or business partners, or to information that you provide or that is collected by third parties using our technologies. These third parties may have their own privacy policies, which we encourage you to read before providing information to them. - -## This policy describes - -What personally identifiable information we collect from you, how it is used and with whom it may be shared. -The security procedures in place to protect the misuse of your information. -What choices we offer, including how to request access to, update or delete your personal information. - -## Personal Identification Information - -We may collect personal identification information from Users in a variety of ways, including, but not limited to, when Users visit our Site, register on the Site, or place an order. - -## Information You Give Us - -We will collect the personal information that you provide us. For example, we will ask you to provide personal information such as your name, address, email address, telephone number, and credit or debit card information as part of normal business transactions. Users may provide Helium information in the following scenarios: -- _Registration_ - In order to use certain parts of the Site, you must first register. The registration form requires Users to give certain information (such as name and email address). At your option, you also may provide demographic information (such as your gender or age) about yourself, but it is not required. -- _Orders_ - To purchase products or items from us, you must provide contact information (like name and shipping address) and financial information (like credit card number and expiration date). -- _Surveys & other communications_ - From time-to-time our Site may request information. Participation in these is completely voluntary, and you may choose whether or not to participate and therefore disclose this information. Information requested may include contact information (such as name and shipping address) and demographic information (such as zip code, age level). Contact information may be used to market to you about third party products and services. Your information also may be provided to third parties. Information may also be used for purposes of monitoring or improving the use and satisfaction of the Site, as well as for public posting and product reviews by other users. - -## Information we get from your use of our website or services - -When you browse or use our Site, we and our third party service providers collect information about the services you use, other websites you've visited and personal preferences. We also may collect your personal location while using our Site. This information includes: device-specific information (such as your operating system, mobile phone network, mobile device ID, and other device-specific unique device identifiers such as your computer's internet protocol (IP) address), user information, specific geographical location and browsing and interaction habits. Our Site may use "cookies" or similar technologies to enhance User experience. A cookie is a small file placed on your device or computer. It may be possible to refuse to accept cookies by activating the appropriate setting on your browser or mobile device. However, if you select this setting, you may be unable to access certain parts of our Site. We use these technologies to collect and store information about you when you interact with services or products that we offer. - -## How we use and share collected information - -Helium collects information to provide our services to you in the performance of a contract with you, or for our legitimate interests in better understanding our customer’s interactions and to create better products and services. We also share personal information we collect from the site to third parties that assist us in supporting us in providing our services, in understanding how you use our Site, and to provide advertising to us and on our behalf. These third parties are obligated to protect the information they process on our behalf in accordance with our policies and applicable law, and include: FullStory, Intercom, as well as the Google Analytics Advertising Feature. Specifically, Helium collects and uses Users' personal information for the following purposes: -- _To improve customer service_ - Your information helps us to more effectively respond to your customer service requests and support needs. We and our service providers, such as Intercom, assist us in processing your request including through our chat box feature, which we offer for your use and convenience. -- _To improve our Site_ - We continually strive to improve our Site offerings based on the information and feedback we receive from you. For example, we and our service providers, including FullStory, to provide faster and better support to your customers and aid our engineering team in solving bugs and improving the user experience. -- _To process transactions_ - We will use the information you provide to process your order. We do not share this information with outside parties except to the extent necessary to provide the service. -- _To send periodic emails_ - Your email address will be used to send you information and updates pertaining to your order. It also may be used to respond to your inquiries. If you decide to opt-in to our mailing list, you will receive emails that may include company news, updates, related product or service information, etc. If at any time you would like to unsubscribe from receiving future emails, we include detailed unsubscribe instructions at the bottom of each email or you may contact us via our Site. -- _Protect our rights or comply with legal process_ - We may disclose your personal information to enforce our rights arising from any contracts entered into between you and Helium; to comply with any court order, legal process, or respond to any governmental or regulatory request; or to protect Helium's rights or property or the safety of Helium, our customers, employees, or others. -- _Sale or merger_ - We also may disclose your personal information to a buyer or other successor in the event of a merger, acquisition, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of Helium’s assets. -- _To market other products of Services to You_ - We may use your personal information in association with third party vendors, marketing firms or other companies to market or sell other non Helium products or services. For example, through Google Ads and Google Analytics, we create remarketing audiences based on specific user behavior, demographic information and interest data, and share those list with Adwords. We also use demographic and interest data in analytics reports to create automated profiles for marketing purposes. We create segments based on demographic and interest data. We and our third party vendors, including Google, will use this information to show you ads on sites across the Internet. We may also use cookies to serve ads based on your past visits to our website. - -We retain the information we collect for as long as we needed for the above mentioned legitimate business purposes. - -## Your Cookie Preferences and Do Not Track Signals - -- Some browsers may offer a "Do Not Track" feature. This Site does not currently respond to "Do Not Track" signals. -- You can opt out of Google’s use of cookies by visiting Google’s Ad’s Settings. You may also opt-out of certain third party vendor’s use of cookies by visiting the Network Advertising Initiative’s opt-out page. - -## Your Rights: Accessing, Updating or Deleting your personal information - -You may log in to Helium to review and update your registration information. You may also delete your account at any time. Most data requests on your registration page will be updated automatically. Otherwise, we will make commercially reasonable efforts to provide you with reasonable access to your personal or other account information we maintain within 30 days of your access request. If we cannot honor your request within 30 days, we will let you know and provide you with an explanation. As specified above, you also have the right to opt-out of the use of cookies for marketing purposes by selecting your preferences through the Ad Settings or NAI opt-out pages at the links above. -Also, California law permits Users who are California residents to request certain information regarding our disclosure of personal information to third parties for their direct marketing purposes. To make such a request, please send an e-mail to the contact information below with "California Shine the Light Privacy Request" in the subject line and your full name, email address, postal address and specific services you have used in the body of your email. - -## How we protect your information - -We adopt data collection, storage and processing technical and organizational measures to secure and protect against unauthorized access, alteration, disclosure or destruction of your personal information, username, password, transaction information and data stored on our Site. -While we use security measures to protect sensitive and personal information transmitted online, please be aware that no security measures are perfect or impenetrable. - -## Children's information - -Our Site is not directed to children under the age of 13, and our Terms and Conditions prohibit children under 13 from using our Site. We do not knowingly collect any information from children under 13. - -## Changes to this privacy policy - -Helium has the discretion to update this privacy policy at any time. When we do, we revise the updated date at the top of this page. We encourage Users to frequently check this page for any changes to stay informed about how we are helping to protect the personal information we collect. You acknowledge and agree that it is your responsibility to review this Privacy Policy periodically and become aware of modifications. - -## U.S. Website - -Helium operates in the United States of America, under U.S. law. Any information you choose to send to this Site or Helium will be transferred to Helium in the U.S., and its service providers, subject to the laws of the United States. Some jurisdictions, such as the European Union, do not consider the U.S. legal system to offer protections that are "adequate" in their judgment. If you do not wish your information to subject to U.S. law, please do not send it to Helium. -Helium does not intend to offer its product or Services in any jurisdiction where the offering of such products or Services would be contrary to applicable local law, and any such offer of products or Services is void if illegal under applicable law. - -## Your acceptance of these terms - -By using this Site, you signify your acceptance of this Privacy Policy and our Terms and Conditions. If you do not agree to the Privacy Policy or our Terms and Conditions, please do not use our Site. Your continued use of the Site following the posting of changes to this Privacy Policy will be deemed your acceptance of those changes. - -## Contacting us - -If you have any questions or concerns about this Privacy Policy, the practices of this Site, or your dealings with this Site, please contact our privacy and data protection office us at: -Helium -51 Federal St #100 -San Francisco -CA 94107 - -dpo@helium.com - -We welcome your questions, comments, and feedback, and will take steps to respond to you as soon as reasonably possible. If you have an unresolved privacy or personal information collection, use , or disclosure concern that we have not satisfactorily addressed, you also have the right to contact and lodge a complaint with a data protection supervisory authority. - -Last Revised: 05/09/2018 - diff --git a/docs/use-the-network/policies/terms.mdx b/docs/use-the-network/policies/terms.mdx deleted file mode 100644 index f102684c6..000000000 --- a/docs/use-the-network/policies/terms.mdx +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: terms -sidebar_label: Terms of Service -slug: /use-the-network/policies/terms ---- - -# Terms of Service - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -Helium, Inc ("Helium," "we," "us," or "our") welcomes and thanks you for using our service (the "Service") made available through our website (the "Website"). -We provide access to and use of our Service subject to the following terms of service (the "Terms of Service"), which are effective as of the date stated above. By using the Service, you acknowledge that you have read, understood, and agree to be legally bound by the terms and conditions of these Terms of Service and the terms and conditions of our Privacy Policy, which is hereby incorporated by reference. Please take the time to review our Privacy Policy. If you do not agree to any terms in these Terms of Service or the Privacy Policy, then please do not use our Service. -We may change these Terms of Service from time to time, and will post any changes on the Website or notify you via email, at our option, as soon as such changes are in effect. If you are using the Service on a free trial basis, then by continuing to use the Service after we make any such changes to the Terms of Service, you are deemed to have accepted such changes. If you have purchased a Service subscription, then the changes will not go into effect until your Service subscription renews. Please refer back to these Terms of Service on a regular basis. - -## Access and Use - -Subject to the terms and conditions of this Agreement, Helium will provide access to and use of the Service to you or the entity which you have authority to bind to this Agreement ("Subscriber"). We will also provide access to and use of the Service to any employee of Subscriber or other individual authorized by Subscriber (each, an "Authorized User"). Subscriber acknowledges that each Authorized User must agree to these Terms of Service and the Privacy Policy prior to use and that Subscriber shall be responsible for ensuring compliance by each Authorized User with these Terms of Service and for any breach of these Terms of Service by any Authorized User. -Subscriber is solely responsible for any data or content uploaded or stored on the Service by Subscriber or any Authorized User ("Subscriber Data"). In no event shall Helium be responsible for the use or misuse of any Subscriber Data by Subscriber or any Authorized User or other third party. Subscriber warrants and represents that it either owns or has the right to provide all Subscriber Data. Subscriber hereby grants Helium a non-exclusive, transferable, royalty-free license to use the Subscriber Data to provide the Service and as otherwise described in herein or in our Privacy Policy. As stated in the Privacy Policy, we take reasonable steps to protect the Subscriber Data from loss, misuse, and unauthorized access, disclosure, alteration, or destruction. For the avoidance of doubt, in no event will we share the project information that you upload into the Service with third parties for marketing purposes. -All right, title, and interest in and to the Service, the Website, and any information, data, software, graphics, and interactive features contained therein, including all modifications, improvements, adaptations, enhancements, or translations made thereto, and all proprietary rights in any of the foregoing (collectively, "Helium Property"), shall be and remain the sole and exclusive property of Helium. -Subscriber will not, and will not permit any Authorized User or other third party to: (i) allow anyone other than an Authorized User to access or use the Service; (ii) use the Service in any way that is not expressly permitted by this Agreement, including, without limitation, reverse engineering, modifying, copying, distributing, or sublicensing the Service, or introducing into the Service any software, virus, or code; or (iii) use the Service in violation of any applicable law or regulation. - -## Registration -Prior to using the Service, Subscriber will be required to register for an account. During the registration process, Subscriber will select logon credentials for each Authorized User. Logon credentials can only be used by the Authorized User to whom they are assigned and cannot be shared among Authorized Users or with third parties. Subscriber is solely responsible for the confidentiality and use of all logon credentials for its account and those assigned to Authorized Users, as well as for any use or misuse of the Service using Subscriber's or any Authorized User's logon credentials. Subscriber shall notify us immediately if it becomes aware of any loss, theft or unauthorized use of any logon credentials, and we reserve the right to delete or change them at any time and for any reason. - -## Fees and Payment - -The payment model is a pay-per-usage model and additional service costs may be bundled into the price of usage. -Regardless of the service level, users pay based on traffic and depending on the services level or the offering a markup may be applied to the base packet transfer costs defined by the blockchain. - -Besides the hosting of backend infrastructure, these services could include a front-end interface designed for users to manage the offering, a dashboard to monitor traffic, user permissions, and the ability to directly pay for Data Credits which are required to transfer packets on the network. -If a credit card is used you must provide accurate information regarding your credit card or other payment instrument, and you must promptly update your payment information if such information changes. You hereby authorize Helium’s payment processor to periodically bill your payment instrument in advance, in accordance with the payment plan you have selected. If you wish to dispute any charges, you must provide notice to Helium of such dispute within sixty (60) days of payment of the disputed charge. All amounts paid are non-refundable. - -We reserve the right to change our prices at any point. If we do change prices, we will provide notice to you through the Website or via email, at our option, at least thirty (30) days before such change is to take effect. Your continued use of the Service after the price change constitutes your agreement to pay the changed amount. -If billing via invoice is an option all amounts due must be paid by the date specified in the invoice or access and use of the Service may be terminated. Unpaid invoices are subject to a finance charge of 1.5% per month on any outstanding balance, or the maximum permitted by law, whichever is lower, plus all expenses of collection. You shall be responsible for all taxes associated with the Service other than U.S. taxes based on Helium's net income. - -## Data Credits - -Data Credits can only be used for connectivity of devices. They can be thought of similar to mobile minutes for a pre-paid cell phone only instead of voice data, it’s packet data from sensors. -Like mobile minutes, Data Credits are non-transferrable by design. - -Data Credits have a core fixed price defined by the blockchain: one (1) data credit costs $0.00001. Data Credits are not currency, cannot be monetized, resold, or converted into anything. - -## Publicity - -Each Subscriber is permitted to identify itself as a Subscriber of the Services for promotional and marketing purposes. Subscriber grants Helium a non-exclusive, non-transferrable, non-sublicensable, and royalty-free license to use and reproduce Subscriber’s name, logos, and trademarks for promotional and marketing purposes including on Helium's customer lists, advertising, and website. Subscriber may opt out of the provisions in this Section by emailing a request to support@helium.com. - -## Term and Termination - -Helium may suspend or terminate your access to and use of the Service, in whole or in part, at any time and for any reason; provided, however, that if you have purchased a subscription for the Service, Helium’s right to suspend or terminate your access to and use of the Service will be limited to cases where you have failed to pay the applicable subscription fees or have otherwise breached these Terms of Service, and have not cured such payment failure or other breach within 10 business days of receiving written notice of such payment failure or other breach from Helium (and provided, further that Helium may suspend your access to and use of the Service immediately without notice in the event that Helium reasonably determines that your account may cause potential harm to Helium or third parties). You may terminate your account at any time upon notice to us; provided, however, that if you have purchased a subscription for the Service, your right to terminate your account before paying the full amount of fees for the subscription period that you have committed to will be limited to cases where Helium has breached these Terms of Service, and has not cured such breach within 10 business days of receiving written notice of such breach from you. In the event of suspension or termination (other than cases where Helium locks your account due to fraudulent activities or other potential harm to Helium or third parties), Helium will provide you with access to your Subscriber Data for at least 30 days following such termination. It is your responsibility to keep backup copies of the Subscriber Data. -Helium may terminate this agreement upon written notice if Helium determines, in its sole and absolute discretion, that Customer has engaged in or permitted behavior that Helium considers to be immoral, racist, or discriminatory on the basis of race, ethnicity, national origin, caste, sexual orientation, gender, gender identity, religious affiliation, age, disability, or serious disease. - -## DISCLAIMERS; LIMITED WARRANTY - -THE PRODUCTS, THE SERVICE, ANY OTHER DELIVERABLES AND HELIUM CONTENT ARE PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED REPRESENTATIONS OR WARRANTIES REGARDING ACCURACY, OPERABILITY, USE, TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, AND EACH PARTY HEREBY DISCLAIMS ALL REPRESENTATIONS AND WARRANTIES OF ANY KIND REGARDING THE PRODUCTS, SERVICES, DELIVERABLES AND HELIUM CONTENT, EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT OR THAT THEIR USE WILL PRODUCE ANY RESULTS, FINANCIAL OR OTHERWISE. - -## LIMITATION OF LIABILITY - HELIUM SHALL NOT BE LIABLE TO CUSTOMER OR ANY THIRD PARTY FOR SPECIAL, PUNITIVE, EXEMPLARY OR CONSEQUENTIAL DAMAGES OR LOST PROFITS (HOWEVER ARISING, INCLUDING NEGLIGENCE) ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, EVEN IF HELIUM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, AND FOR DAMAGES ARISING OUT OR IN CONNECTION WITH THIS AGREEMENT IN THE AGGREGATE IN EXCESS OF THE FEES PAID OR PAYABLE BY CUSTOMER PURSUANT TO THIS AGREEMENT. - -## Indemnification -Subscriber will defend, indemnify, and hold harmless Helium and its officers, directors, managers, and employees from any and all liabilities, costs, and expenses (including, without limitation, reasonable attorneys' fees) in connection with any third-party claim that any of the Subscriber Data: (i) infringes or misappropriates any third-party intellectual property rights, privacy or publicity rights, or any other rights; or (ii) violates any applicable laws, rules, or regulations. Helium shall promptly notify Subscriber of the claim, provided, however, that failure to provide such notice shall not relieve Subscriber of its indemnity obligations unless it is materially prejudiced thereby. Subscriber shall have control over the defense of the claim, provided that (i) Subscriber does not make any admission of liability on behalf of Helium or agree to any settlement that imposes a financial burden on Helium without Helium's prior written consent; and (ii) Helium shall have the right to participate in the defense of any such claim, at its own cost, with counsel of its choice. - -## General Provisions -This Agreement is governed by the laws of the State of California, without regard to conflict of law rules. The UN Convention on Contracts for the International Sale of Goods will not apply to this Agreement. The parties shall bring any disputes arising out of or related to this Agreement exclusively in a court located in San Francisco County, California and each party hereby submits to the personal jurisdiction of such courts. Each party is an independent contractor and neither party's personnel are employees or agents of the other party for any purpose whatsoever. Nothing hereunder will constitute, create, give effect to or otherwise recognize a joint venture, partnership or business entity of any kind, nor will anything hereunder constitute either party as the agent or representative of the other. Headings are for convenience. No presumption is to operate in either party's favor as a result of who drafted this Agreement. For purposes of this Agreement, the words "include," "includes" and "including" are deemed to be followed by the words "without limitation," and the word "or" is not exclusive. This Agreement supersedes all prior discussions and writings regarding (and constitutes the entire agreement between the parties with respect to) the subject matter of this Agreement. This Agreement is effective upon Customer's purchase of the Product. The parties may only amend this Agreement in writing. If any provision of this Agreement is for any reason held to be invalid, illegal, or unenforceable under applicable law in any respect, then such invalidity, illegality, or unenforceability will not affect the other provisions of this Agreement, this Agreement will be construed as if such invalid, illegal, or unenforceable provision were excluded from this Agreement, and the court in its discretion may substitute for the excluded provision an enforceable provision which in economic substance reasonably approximates the excluded provision. \ No newline at end of file diff --git a/docs/use-the-network/run-a-network-server/buy-an-oui/buy-an-oui.mdx b/docs/use-the-network/run-a-network-server/buy-an-oui/buy-an-oui.mdx deleted file mode 100644 index 69325c585..000000000 --- a/docs/use-the-network/run-a-network-server/buy-an-oui/buy-an-oui.mdx +++ /dev/null @@ -1,61 +0,0 @@ ---- -id: buy-an-oui -sidebar_label: Buy an OUI -slug: /use-the-network/buy-an-oui ---- - -# What is an OUI? - -Each LoRaWAN Network Server (LNS) on the Helium Network acquires an -Organizationally Unique Identifier (OUI). This registers the LNS with the -blockchain and allocates two very important routing objects owned and maintained -by the OUI operator: - -- up to five **filters**, describing the sets (AppEUI, DevEUI) expected by the - LNS -- one or more **slabs** of DevAddrs, reserving an address space for the OUI's - devices on the Helium Network - -A device, defined by (AppEui, DevEui), can be allocated any of the DevAddrs -owned by the OUI. It is even possible to multiplex many devices on the same -DevAddr at the same time, using the Message Integrity Check (MIC) to -disambiguate. - -# OUI Cost - -The OUI is purchased with [data credits (DC)](/blockchain/transaction-fees). -Costs are subject to change, but currently the OUI itself costs $100 worth of -DCs and each DevAddr cost an additional $100 in DC. - -DevAddr are sold in sequential blocks between 8 and 65,536 and any power of two. -You must purchase a slab when purchasing an OUI, therefore, the minimum cost for -an OUI is $800 for eight DevAddr's and $100 for the OUI itself. - -[The OUI purchase transaction itself](https://github.com/helium/proto/blob/master/src/blockchain_txn_oui_v1.proto) -incurs a fee based as does any other blockchain transaction; generally this will -be $0.35-1.00 worth of DCs based on how the fields get filled and change the -transaction size. - -# Purchase Transaction - -You need [the Helium wallet](https://github.com/helium/helium-wallet-rs) to go -any further. You'll want to -[create a wallet](https://github.com/helium/helium-wallet-rs#create-a-wallet) -and to have at least $900 in HNT (base on current HNT Oracle pricing). - -## Purchase the OUI - -Submit a "create OUI" transaction: - -```bash -./helium-wallet oui create --subnet-size 8 --filter wVwCiewtCpEKAAAAAAAAAAAAcCK3fwAAAAAAAAAAAABI7IQOAHAAAAAAAAAAAAAAAQAAADBlAAAAAAAAAAAAADEAAAA2AAAAOgAAAA -``` - -The filter is a dummy filter to initialize the OUI. When you get Console -running, it will automatically maintain it. You can once again track the -transaction with the endpoint above. When it is complete, you should also see your OUI as the most recently purchased and [on the list here](https://api.helium.io/v1/ouis). - -Congratulations! You are the proud owner of a Helium Network OUI. OUIs are -numbered sequentially, so the lower you are, the earlier you were on the -Network!. - diff --git a/docs/use-the-network/run-a-network-server/deploy-console/deploy-console.mdx b/docs/use-the-network/run-a-network-server/deploy-console/deploy-console.mdx deleted file mode 100644 index 036aaeb03..000000000 --- a/docs/use-the-network/run-a-network-server/deploy-console/deploy-console.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: deploy-console -hide_title: true -sidebar_label: Deploy Console -slug: /use-the-network/deploy-console ---- - -# Deploying Console - -Getting [Console](https://github.com/helium/console) deployed is very similar to -[running Console](/use-the-network/run-console). Go ahead and follow that guide up to **Run it!**. - -## Encryption - -Auth0 requires being run over https. You can get a certificate on your server -through [Let's Encrypt](https://letsencrypt.org/getting-started/) by following -(this certbot guide)[https://certbot.eff.org/instructions]. - -"My HTTP website is running 'Web Hosting Product' on 'Ubuntu 18.04 LTS -(bionic)'" Was used when writing this guide. Follow the steps, and note where -your certificates are placed, they'll be used later in nginx. - -## Docker - -Grab the server docker-compose file -``` -cp templates/docker-compose-server.yaml docker-compose.yaml -``` - -This docker-compose offers an nginx container to proxy traffic through. - -Edit your `docker-compose.yaml` and update `socket_check_origin` to match your -host name. - -If letsencrypt put your certificate in a place other than `/etc/letsencrypt/`, -be sure to update the `volumes` for the nginx container in -`docker-compose.yaml`. - -## Nginx - -Copy the nxinx config -``` -cp templates/nginx-default.conf nginx.conf -``` - -Edit `nginx.conf` and fill in your certificates name. - -## Run It! - -`docker-compose up` builds Console and launches it with three other containers: -Router, Postgres, and Nginx. You might see `helium_router` crash a few times as it waits -for `helium_console` to start up and allow the socket connection between the -two. - -If you go to your host name, you should have an auth0 login available to you. -Just as a heads up, all of your important data is in the `data` in this -`console` directory. diff --git a/docs/use-the-network/run-a-network-server/run-a-network-server.mdx b/docs/use-the-network/run-a-network-server/run-a-network-server.mdx deleted file mode 100644 index f6ded56fd..000000000 --- a/docs/use-the-network/run-a-network-server/run-a-network-server.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -id: run-a-network-server -sidebar_label: Run a Network Server -slug: /use-the-network/run-a-network-server ---- - -# Run a Network Server - -The Helium Network is unique in that it provides public wireless infrastructure -for privately operated LoRaWAN Network Servers. Details about how Helium -blockchain primitives interoperate with LoRaWAN routing can be read about -[here](/lorawan-on-helium). - -In this section, we will provide a step-by-step guide on actually getting a -LoRaWAN Network Server (LNS) based on Helium's open-source Console up and -running. - -- [buy an OUI](/use-the-network/buy-an-oui) -- [run Console](/use-the-network/run-console) -- [deploy Console](/use-the-network/deploy-console) - -Before pursuing this configuration though, it is worth considering. - -**Do I need to own my own OUI and operate my own Console?** - -- If you are developing a few prototype devices, it might not be time to operate - a network server. Helium hosts and operates - [Console](/use-the-network/console) where you can easily manage devices for an - organization without dealing with OUI management; you only pay for packets and - new accounts start with a free 10,000 DC. - -- An OUI costs $900 in Data Credits at a minimum ($100 for the OUI and $800 for - the smallest address slab), so if that cost is prohibitive, use Helium's - Console. diff --git a/docs/use-the-network/run-a-network-server/run-console/run-console.mdx b/docs/use-the-network/run-a-network-server/run-console/run-console.mdx deleted file mode 100644 index c3cd8e2e2..000000000 --- a/docs/use-the-network/run-a-network-server/run-console/run-console.mdx +++ /dev/null @@ -1,284 +0,0 @@ ---- -id: run-console -sidebar_label: Run Console -slug: /use-the-network/run-console ---- - -# What is Console? - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -[Console](https://github.com/helium/console) is a project developed by Helium. -It provides a web browser front-end for users to manage organizations and -devices and a Helium Blockchain-compatible LoRaWAN Network Server (LNS) called -[Router](https://github.com/helium/routerv3). - -We are working on integrations with third-party LNS's such as Chirpstack, but at -this time, this is the only "plug-and-play" solution for operating an OUI. That -being said, the Router code is open-source and custom LNS implementations may be -derived by anyone already since OUI operation on the Helium Network is entirely -permissionless. - -## Requirements - -Before we begin, you should have the following: - -- [purchased an OUI](/use-the-network/buy-an-oui) and noted its number -- installed Docker and docker-compose -- you have some spare HNT to burn ($10-100 worth), for funding your OUI address -- an Auth0 account for user account management -- at least an AWS t2.xlarge (or equivalent), especially if running both Console and its backend (Router) on one server - -Optionally, you should also: - -- have a fully sync'ed Miner or ETL instance to extract a snapshot from. To - learn how to setup a Miner, - [please read here](/mine-hnt/build-a-packet-forwarder#run-the-miner). -- be able to configure ports on a firewall - -## Console Setup - -### Clone the console repo - -```bash -git clone https://github.com/helium/console.git -``` - -### Customize Console environment - -``` -cp templates/.env .env -``` - -Then edit `.env`. Here's an example of what it should look like: - -``` -SECRET_KEY_BASE=Rrb2Tz4/HOGtez3X81/5uGsdfxiwwbIesjiQBNkIcwafpXTHJoAPEHQk0Yhw4Nuc -CLOAK_SECRET_KEY=eAqx+rwji6pioOyanpzfxQH8cCS/M3vQjdQ5LeDcSqQ= -GUARDIAN_SECRET_KEY=Rrb2Tz4/FOGtez3X81/5uGsdfxiwwbIesjiQBNkIcwafpXTHJoAPEHQk0Yhw4Nuc -ROUTER_SECRETS=1524243720:Rrb2Tz4/HOGtez4X81/5uGsffxiwwbIesjiQBNkIcwafpXTHJoAPEHQk0Yhw4Nuc -OUI=4 -SELF_HOSTED=true -ENV_DOMAIN=localhost:4000 -AUTH_0_CLIENT_ID=NyfDZUfyT2thF7G56oazCsdGxO8GRZD6 -AUTH_0_DOMAIN=router-dev.us.auth0.com -AUTH0_BASE_URL=https://router-dev.us.auth0.com -DATABASE_DB=console -DATABASE_HOST=postgres -DATABASE_USER=postgres -DATABASE_PASSWORD=postgres -``` - -The auth0 fields are taken from -[your auth0 dashboard](https://manage.auth0.com/dashboard) where you create an -app for Console: - - - -You'll want to extract the appropriate credentials: - - - -While we are on the Auth0 dashboard, let's add some URIs that we will need for -later: - - - -### Customize Router environment - -We will do something similar for `.env-router`: - -```bash -cp templates/.env-router .env-router -``` - -Then edit `.env-router`. Here's an example of what it should look like: - -``` -# Default Helium's seed nodes -ROUTER_SEED_NODES=/ip4/35.166.211.46/tcp/2154,/ip4/44.236.95.167/tcp/2154 - -# OUI used by router (https://docs.helium.com/blockchain/packet-purchasing) -ROUTER_OUI=4 - -# Default devaddr if we fail to allocate one -ROUTER_DEFAULT_DEVADDR=AAQASA== - -# State Channel Open amount -ROUTER_SC_OPEN_DC_AMOUNT=2000 - -# State Channel block expiration -ROUTER_SC_EXPIRATION_INTERVAL=45 - -# Console's connection info (see https://github.com/helium/console) -ROUTER_CONSOLE_ENDPOINT=http://console:4000 -ROUTER_CONSOLE_WS_ENDPOINT=ws://console:4000/socket/router/websocket -ROUTER_CONSOLE_SECRET=1524243720:Rrb2Tz4/HOGtez4X81/5uGsffxiwwbIesjiQBNkIcwafpXTHJoAPEHQk0Yhw4Nuc - -# Max time to wait for uplinks in ms -ROUTER_FRAME_TIMEOUT=300 - -# Turn on/off xor filter worker (anything else than true is off) -ROUTER_XOR_FILTER_WORKER=true -``` - -The key point is that `ROUTER_CONSOLE_SECRET` from this file matches -`ROUTER_SECRETS` from `.env`. You can ignore these other fields for now, but we -can revisit them later. - -### Run it! - -Copy the local docker-compose file -```bash -cp templates/docker-compose-local.yaml docker-compose.yaml -``` - -`docker-compose up` builds Console and launches it with two other containers: -Router and Postgres. You might see `helium_router` crash a few times as it waits -for `helium_console` to start up and allow the socket connection between the -two. - -If you go to `localhost:4000`, you should have an auth0 login available to you. -Just as a heads up, all of your important data is in the `data` in this -`console` directory. - -This is a good time to open up port `2154` for incoming TCP connections. Things -may still work without that but performance will be degraded. - -### Load a snapshot - -Optionally, you can load a snapshot so that your Console is immediately ready -for action. Technically, the Router component of Console is what keeps up with -the blockchain. You can check its current height - -```bash -docker exec helium_router router info height -``` - -You are likely quite a ways from the tip of the blockchain, but you can load a -snapshot from an active miner (or ETL instance or blockchain-node). Details -about how to do this are [here](/mine-hnt/build-a-packet-forwarder#snapshots). - -Simply replace `miner` with `docker exec helium_router router` for most of the -commands to work. - -### Create Data Credits - -At this point, we have the software running and we have an OUI, but the -router does not have any DC to buy messages from the network. We need to burn -some HNT to DC for the router. - -The cost for rurning a router is complex. See community member disk91.com's -[guide](https://www.disk91.com/2021/technology/lora/what-is-the-real-cost-of-helium-communication/) -and calculate how much you need for your planned usage. One million DC ($10) -can be a good number to start with. - -The easiest way to calculate how many HNT to burn to get the number of DC you -need is to go to https://console.helium.com/datacredits and click on -`Purchase Data Credits`. Enter the amount of DC you need and click on -`Burn HNT to DC`. Helium Console shows how to burn the selected amount to the -Helium Console itself. We won't do that. Just note the amount (for example -`0.49043649`). - -Let's get the address of the OUI/router. - -```bash -$ docker exec helium_router router peer addr -/p2p/11xHXS5AgLyjYRCJ4ctcWcsMRULS8jro9Pb1GPaTG1neGk1dNcf -``` - -The string after the second slash, -`11xHXS5AgLyjYRCJ4ctcWcsMRULS8jro9Pb1GPaTG1neGk1dNcf`, is the libp2p address and -this is where we need to burn the DC. -Now return to your command line wallet and burn the HNT amount **with the -libp2p address of your OUI/router as payee**. Example: - -```bash -helium-wallet burn --amount 0.49043649 --payee 11xHXS5AgLyjYRCJ4ctcWcsMRULS8jro9Pb1GPaTG1neGk1dNcf --commit -``` - -Once this transaction clears, we'll be ready for the next step. - -### OUI Update - -At this point, we have the software running and we have an OUI, but the -blockchain does not know that the address of Router is associated with the OUI. -Use the same libp2p address used in the previous step. - -```bash -/p2p/11xHXS5AgLyjYRCJ4ctcWcsMRULS8jro9Pb1GPaTG1neGk1dNcf -``` - -Note run the following command with the same wallet used to purchase the OUI. - -```bash -$ helium-wallet oui update routers --oui 4 --nonce 1 --address 11xHXS5AgLyjYRCJ4ctcWcsMRULS8jro9Pb1GPaTG1neGk1dNcf --commit -``` - -Once this transaction clears, the network will know about the association. It -may take a few minutes, but once the transaction clears, your OUI will be able -to open and close state channels and update your device table on the blockchain. - -Monitor the account in explorer to verify that Router is doing this -appropriately. eg: -`https://explorer.helium.com/accounts/11xHXS5AgLyjYRCJ4ctcWcsMRULS8jro9Pb1GPaTG1neGk1dNcf` - -### Create Data Credits - -Many fees benefit from -[implicit burn](/blockchain/transaction-fees#transaction-fees-and-implicit-burn), -including when paying for OUIs and DevAddr's (done previously when you -[purchased an OUI](/use-the-network/buy-an-oui), but your router needs a DC balance -to run. - -The cost for rurning a router is complex. See community member disk91.com's -[guide](https://www.disk91.com/2021/technology/lora/what-is-the-real-cost-of-helium-communication/) -and calculate how much you need for your planned usage. - -One million DC ($10) can be a good number to start with. The easiest way to calculate how many HNT to burn to get the number of DC you need is to go to https://console.helium.com/datacredits and click on `Purchase Data Credits`. Enter the amount of DC you need and click on `Burn HNT to DC`. Helium Console shows how to burn the selected amount to the Helium Console itself. We won't do that. Just note the amount (for example `0.49043649`). - -Now return to your command line wallet and burn the HNT amount **with the libp2p address of your router as payee**. Example: - -```bash -helium-wallet burn --amount 0.49043649 --payee 11xHXS5AgLyjYRCJ4ctcWcsMRULS8jro9Pb1GPaTG1neGk1dNcf --commit -``` - -### Test a Device - -Login to your local Console instance (localhost:4000) and create an organization -and a device. If you ever need help with Console as a user, -[much documentation exists here](/use-the-network/console). - -Once you've created the device on console, go to a terminal window on server -running Console and execute the following command to tell Router to update the -`xor filter` on the blockchain: - -```bash -docker exec helium_router router device xor --commit -``` - -Give the transaction some time to process (you can track it on explorer). Once -it has been processed, you can try joining the device. If you see a successful -Join Request, then you are successfully running your private LoRaWAN Network -Server. - -Congratulations! - -### Backing up your `swarm_key` - -Extract the router's swarm key and store it somewhere safe. The swarm key can be extracted by running `base64 ~/console/data/router/blockchain/swarm_key` and saved in your favorite password manager. An alternative is to copy the file somewhere safe. - -#### A Note on the Purpose of a `swarm_key` -The `swarm_key` equates to your validator's unique identity on the Helium blockchain. Backing up the `swarm_key` enables you to maintain your router's identity in the event that your node becomes compromised in some way, or needs to be rebuilt on another server for any reason. diff --git a/docs/use-the-network/setup-a-packet-forwarder.mdx b/docs/use-the-network/setup-a-packet-forwarder.mdx deleted file mode 100644 index a35ff113a..000000000 --- a/docs/use-the-network/setup-a-packet-forwarder.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -id: setup-a-packet-forwarder -sidebar_label: Build a Packet Forwarder -slug: /use-the-network/setup-a-packet-forwarder ---- - -# Build a Packet Forwarder - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -:::warning - -The ability to earn from [Proof of Coverage](https://docs.helium.com/blockchain/proof-of-coverage) -with anything other than an [Full Hotspot](/mine-hnt/full-hotspots) is not -supported. - -Building your own packet forwarder enables data transfer rewards _only_, -**if and only if** you complete the setup process [here](/mine-hnt/data-only-hotspots). - -::: - -## Packet Forwarder Architecture - - - -To be a Helium Miner, there are three principle components to know about - -- **Packet Forwarder**: this is a utility that interacts with the radio - front-end and sends and receives raw radio packets with the Helium Miner -- **Light Hotspot Client**: the Helium Blockchain comes into the picture here; - light hotspot client is responsible for routing packets to the appropriate - Router (see our Routing article) entering into microtransactions brokered - via gRPC -- **Router**: a Helium compatible LoRaWAN Network Server, basically; this - component is interested in receiving the packets relating to its devices and - handles downlink responses when appropriate - -Any device that can run an 8 channel LoRa front-end (such as SX1301 or -SX1302) can be used to participate in the Helium Network. The Light Hotspot -Client is designed to send and receive packets using the Semtech Gateways -Messaging Protocol (GWMP), making it compatible with almost every LoRaWAN -Gateway on the Market. - -Many off-the-shelf LoRaWAN gateways work very well and using one of them gives -you one less thing to worry about as the Packet Forwarder is setup and ready to -go. - -This guide, however, is for those that want a more hands-on experience. We will -essentially be assembling a LoRaWAN gateway with discrete parts, loading up an -open-source Linux distribution, compiling the packet forwarder, and running it -all ourselves. In short, we'll be learning gateways that hard way! - -
- - This guide is experimental and for advanced users only, and you may run in - to various issues trying to get this working. - -
- -### Example Custom Hardware - -If you don’t have your own hardware yet, we recommend using a Raspberry Pi 4B -running the latest -[64-bit RaspiOS](https://downloads.raspberrypi.org/raspios_arm64/images/) image. - -We recommend this configuration in particular if you are interested in running -the Miner on the gateway itself; it's easy to run -[our Docker image from Quay](https://quay.io/repository/team-helium/miner) on a -64-bit ARM system. If you choose to run the Miner elsewhere, it's possible to -downgrade all the way to a Pi0, for example, since you will only be running the -packet forwarder on the gateway. - -RAK Wireless sells multiple "Pi Hats" that provide the 8-channel front-end: - -- [the RAK2245 (SX1301)](https://store.rakwireless.com/products/rak2245-pi-hat?variant=22914482733156) -- [the RAK2287 (SX1302)](https://store.rakwireless.com/collections/wislink-lpwan/products/rak2287-lpwan-gateway-concentrator-module?variant=34533841535134) - -Or you can check out their -[WisGate Developer](https://store.rakwireless.com/collections/wisgate-developer) -line where they provide bundles: - -- the D3/D3+/D4/D4+/D4P are all based off of the RAK2245 -- the D4H is based off of the RAK2245 - -Ultimately, which configuration works for you depends on your situation, but all -of them will work with this guide with little adjustment. - -### Preparing the SD Card - -You can create an SD card from this image by looking for the recently inserted -SD card in your system - -``` -$ ls -al /dev | grep sd -``` - -Generally, the timestamp is enough to indicate which device is the SD card. Next -write the image to the SD card. For example: - -``` -dd if=~/2020-08-20-raspios-buster-arm64.img of=/dev/sdX bs=1M -``` - -Use the command `sync` to make sure the filesystem is written before trying to -remove the SD card. Once the `sync` command returns, you can eject and remove -the SD card from your system. - -## Preparing RaspiOS - -With a keyboard, mouse, and monitor plugged in, power on the Raspberry Pi. -Proceed through the guided RaspiOS setup where you will update your password, -configure your WiFi, etc. - -Enable SPI and I2C using the raspi-config tool: `sudo raspi-config` - -Select `Interface Options`, and enable `I2C` and `SPI` from within the menu -system. This is also a good time to enable SSH if you want it. - -## Installing the Semtech Packet Forwarder - -Depending on which SX130x radio you are running, you will want to select the -appropriate packet forwarder application. - -#### Packet Forwarder SX1302 - -Pull down Helium's fork of the SX1302 packet forwarder: - -`git clone https://github.com/helium/sx1302_hal.git` - -Go into the directory and build: - -``` -$ cd sx1302_hal -$ make -``` - -Next, go into the the packet_forwarder directory, where we will create a link to -the reset script: - -``` -$ cd packet_forwarder -$ ln -s ../tools/reset_lgw.sh reset_lgw.sh -``` - -We will also create a link to the appropriate regional configuration. For -example: - -``` -ln -s global_conf.json.sx1250.US915 global_conf.json -``` - -We are now ready to test the start-up. From `~/sx1302_hal/packet_forwarder` try: - -``` -./lora_pkt_fwd -``` - -If you get the following output, you are good to go: - -``` -INFO: [main] concentrator started, packet can now be received -INFO: concentrator EUI: 0x???????????????? -``` - -You are now ready to setup the [light hotspot client](/use-the-network/light-hotspots). \ No newline at end of file diff --git a/docs/use-the-network/use-the-network.mdx b/docs/use-the-network/use-the-network.mdx deleted file mode 100644 index 2cc86a1ae..000000000 --- a/docs/use-the-network/use-the-network.mdx +++ /dev/null @@ -1,91 +0,0 @@ ---- -id: use-the-network -hide_title: true -sidebar_label: Introduction -slug: /use-the-network -hide_table_of_contents: true - ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - -
-
-
-
- -
-

Use the Helium Network

-

Thousands of developers and companies rely on the Helium Network for connectivity. Ready to join them? Here's where to start.

- -
-
-
-
-
- - - -
- -:::info -[Helium Discord](https://discord.gg/helium) is the best place to get real-time support from the community. And the `#console` and `#sensor-dev` -channels are the two most relevant for developers using the Network. -::: - -
- - -
-
-
- -

Devices

-

Purchase and customize Helium-enabled devices or prototype and build your own.

-
Quick Links
- Devices - -
-
- -

Helium Console

-

The Helium Console is a web-based device management tool that allows developers to register, authenticate, and manage their devices on the Helium network.

- Create Console Account -
Quick Links
- Console Resources - Console Quickstart - Adding Devices - Labels - Integrations - Console API - -
-
- -

Community Projects

-

We love seeing community projects that utilise the network in clever new ways.

- Learn More -
Quick Links
- Agriculture - Dashboards - Environmental -
-
- -

Coverage Mapping

-

Mappers is a community-led effort to actively survey the signal intensity of the Helium Network, using configured-trackers.

- See the Map -
Quick Links
- Intro to Coverage Mappers - Mappers Quickstart - Mappers API - Adeunis Mapper -
-
-
- diff --git a/docs/wallets/app-wallet/app-wallet.mdx b/docs/wallets/app-wallet/app-wallet.mdx deleted file mode 100644 index add78e080..000000000 --- a/docs/wallets/app-wallet/app-wallet.mdx +++ /dev/null @@ -1,69 +0,0 @@ ---- -id: app-wallet -title: Helium App Wallet -sidebar_label: Helium App Wallet -slug: /wallets/app-wallet ---- - -# Helium App Wallet Overview - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -The Helium app (available for -[iOS](https://apps.apple.com/us/app/helium-hotspot/id1450463605) and -[Android](https://play.google.com/store/apps/details?id=com.helium.wallet)) -includes everything you need to on-board and maintain your Hotspot and view its -activity. With the app, which also is your Helium wallet, you're able to do -things like: - -- Send and receive HNT and create Data Credits -- Add your Hotspot to the network and set your location -- Configure your Wi-Fi -- View your Hotspot's activity -- See where other Hotspots are located -- Run Discovery Mode - -[Check out the latest app release notes](https://engineering.helium.com/) - -## Guides - -- [Twelve Words Seed Phrase](/wallets/app-wallet/twelve-words) -- [Transfer Hotspot](/wallets/app-wallet/transfer-hotspot) -- [RAK Hotspot Setup](/wallets/app-wallet/rak-hotspot-setup) -- [Understanding Hexagons](/wallets/app-wallet/hexagons) -- [Discovery Mode](/wallets/app-wallet/discovery-mode) -- [Transaction Failures](/wallets/app-wallet/transaction-failures) -- [Fleet Mode](/wallets/app-wallet/fleet-mode) -- [Deep Links and QR Codes](/wallets/app-wallet/deep-links-and-qr-codes) - -## Hotspot Tab - -The Hotspot tab shows your hotspot(s). There's a location map, the Hotspots -Settings section (gear icon), as well as a general health status (Online or -Needs Attention). The settings provide access to updating the location and WiFi -network, as well as running the Hotspots diagnostic report if needed. - - - -## Account Tab - -The Account tab shows your wallet and account balance, Notifications, the Send -and Receive options, and recent transactions. - - - -## Notifications Tab - -This sections gives you a timeline view of all notifications relevant to your -hotspots and wallet transcations. - - - -## Settings Tab - -In this section, you can configure your apps PIN settings, set the app Language, -reveal the 12 security words (your private key) for your wallet, and view your -current app version. There are also access to some help articles and the -community Discord channel. - - diff --git a/docs/wallets/app-wallet/deep-links-and-qr-codes.mdx b/docs/wallets/app-wallet/deep-links-and-qr-codes.mdx deleted file mode 100644 index 8373268de..000000000 --- a/docs/wallets/app-wallet/deep-links-and-qr-codes.mdx +++ /dev/null @@ -1,104 +0,0 @@ ---- -id: deep-links-and-qr-codes -title: Deep Links and QR Codes -sidebar_label: Deep Links and QR Codes -slug: /wallets/app-wallet/deep-links-and-qr-codes ---- - -# Deep Links and External QR Codes (e.g. System Camera) - -To generate a QR code to scan, find a service to generate a QR code using the url's below. -This is an example site: `https://www.qr-code-generator.com` - -### View Hotspot - -`helium://hotspot/:address` - -### Add Gateway - -`helium://add_gateway/:base64url_encoded_txn` - -Users can read more on how to generate an `add_gateway` transaction from the [Makers Guide > Hotspot Integration](https://docs.helium.com/mine-hnt/full-hotspots/become-a-maker/hotspot-integration-testing/#generate-an-add-hotspot-transaction). - -### Assert Location - -// TODO: Not yet implemented - -# Internal QR Scanner - -To generate a QR code to scan, find a service to generate a QR code using the json data below. -This is an example site: `https://www.qr-code-generator.com` - -### Burn HNT - -Generated from console - -```json -{ - "type": "dc_burn", - "address": ":address", - "amount": "1.00", - "memo": "n0XU06JdNNs=" -} -``` - -### Payment - -Single Payee without memo - -```json -{ - "type": "payment", - "address": ":address", - "amount": 1 -} -``` - -Single Payee with memo - -```json -{ - "type": "payment", - "address": ":address", - "amount": 1, - "memo": "n0XU06JdNNs=" -} -``` - -Multiple Payee without memo - -```json -{ - "type": "payment", - "payees": { - ":address1": 10.2, - ":address2": 1.2 - } -} -``` - -Multiple Payee with memo - -```json -{ - "type": "payment", - "payees": { - ":address1": { - "amount": 10.2, - "memo": "n0XU06JdNNs=" - }, - ":address2": { - "amount": 1.2, - "memo": "n0XU06JdNNs=" - } - } -} -``` - -### Wallet address QR code - -Create a qr code with a valid wallet address - -``` -12ORy9GjFASqWWxHmUq4tNXcjvr5Xfno8qimGMrNReMsSaM9T8f -``` diff --git a/docs/wallets/app-wallet/discovery-mode.mdx b/docs/wallets/app-wallet/discovery-mode.mdx deleted file mode 100644 index fa9dbe44a..000000000 --- a/docs/wallets/app-wallet/discovery-mode.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -id: discovery -title: Discovery Mode Guide -sidebar_label: Discovery Mode Guide -slug: /wallets/app-wallet/discovery-mode ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - -# Discovery Mode - -Discovery Mode is one of the tools available for Hotspot owners to understand their Hotspot coverage and optimize their Hotspot setup. - -Read our [announcement blog](https://blog.helium.com/uncover-your-hotspots-potential-discovery-mode-a14003ec23d). - -## How does Discovery Mode work? - -Discovery Mode is a marriage between several core components on the Helium network: Helium App, Router, Console, and the Miner. Hotspots, when in Discovery Mode, acts like a device on the Helium network, sending data just like any sensor would. - -:::note - -Hotspots that hear Discovery Mode packets are able to confirm directly with Router, even if they're relayed. This is different than how receipts work with Proof-of-Coverage. More on that later. - -::: - -### Helium App -The Helium App's role in Discovery Mode is initiating the initial request and displaying the results. It primarily talks to the API to retrieve Discovery Mode responses, but also requests the initial Discovery Mode session. - -### Router -Router's role is to wait and listen from a Discovery Mode request from the API. Once it hears a request to initiate Discovery Mode, it tells the Miner on the Hotspot to get ready and send Discovery Mode packets. -Router also creates an object in Console, known as a device. - -### Console -Once a Hotspot device is created in console, an integration is automatically associated with the device, where responses to Discovery Mode packets are stored. The packet data is stored in a database that only the API has access to. - -:::note - -Data Credits are used to send device data on the Helium network. For a limited time, Helium will cover the cost to send Discovery Mode packets. - -::: - -### Miner -After receiving a request from Router, the miner on Hotspots is instructed to start sending packets. These packets are similar in size to Proof-of-Coverage packets. -Miner is instructed to send 10 Discovery Mode packets. - -:::note - -Discovery Mode sends 10x more packets than a normal Beacon for Proof-of-Coverage. It is normal to see more Hotspots respond to Discovery Mode than Beacons. Also keep in mind that Relayed Hotspots do not affect acknowledging Discovery Mode packets, but do affect witnessing Beacons. - -::: - -## Discovery Mode Architecture Diagram - -Putting it all together: - - - -# Running Discovery Mode -To start Discovery Mode for your Hotspot, go to the Hotspot and tap the **Settings** icon. - -Then tap Discovery Mode. - - - - -:::tip - -Make sure your Hotspot is not relayed. Hotspots that are relayed may not receive instructions from Router in a timely manner, preventing it from starting a session. - -::: - -Once Discovery Mode starts, the Hotspot sends out 10 packets and takes about a minute to send all 10. - -Responders that hear a Discovery Mode packet will be highlighted in a yellow hexagon. Tapping on the yellow hexagon will bring up the name of the Hotspot that responded. - - - -Discovery Mode runs for 5 minutes. You may close the app and do something else during this time. - -*Why 5 minutes?* - -Router sometimes receives late packets from Hotspots. By extending session lengths to 5 minutes, we can capture and display all the Hotspots that heard a Discovery Mode packet, even if they're late. - -# FAQ -**Q. Is Discovery Mode a good representation of what a Hotspot can mine?** - -A. Discovery Mode is a tool meant to understand coverage and to compare if one setup or configuration is better than another. - -Discovery Mode ignores all the rules and logic of Proof-of-Coverage, so if you have lots of Hotspots nearby (within 300 meters), you may see them as valid responders in Discovery Mode, but they may be invalid witnesses for Proof-of-Coverage purposes. - -[Discovery Mode also ignores the issue with Relayed Hotspots](https://docs.helium.com/troubleshooting/understanding-witnesses/#relayed-hotspot-as-a-witness). Any Hotspots that witness a beacon but is relayed, is unlikely to appear as a valid witness but may appear as a responder in Discovery Mode. - -**Q. How should I use Discovery Mode?** - -A. Use Discovery Mode to compare different antennas, different locations, elevations, inside, or outside. - -**Q. Do I need to set a location before running Discovery Mode?** - -A. A location is not required before running Discovery Mode. - -**Q. What does it mean that my Hotspot was unable to initiate a session?** - -A. If the Hotspot is not relayed, it could mean that there were no responders or the Hotspot's firmware version is not up to date. - -**Q. I have a relayed Hotspot. Can I run Discovery Mode?** - -A. We have seen varying levels of success when relayed Hotspots run Discovery Mode. Some succeed and some don't. We recommend getting your Hotspot out of Relayed status for optimal performance. - -**Q. My Discovery Mode results vary. What explains this?** - -A. Assuming all components of Discovery Mode are working properly (no outages on Router, app API, Console), differences between back to back sessions should not exist. But! Atmospheric and environmental impacts can affect whether a Hotspot can receive a packet. - -**Q. How many sessions can I run per day?** - -A. Every Hotspot can run 5 Discovery Mode sessions per day, resetting to 0 at 12AM UTC. - -**Q. Who pays for Discovery Mode?** - -A. Discovery Mode is free to use and no Data Credits are required. - -**Q. I don't own the Hotspot. Can I run Discovery Mode on it?** - -A. No. Only Hotspot owners can run Discovery Mode. - -**Q. What are the basic requirements to run Discovery Mode?** - -A. The Hotspot firmware version should be on `2021.05.12.0` or newer, with app version `3.2.0` or newer. diff --git a/docs/wallets/app-wallet/fleet-mode.mdx b/docs/wallets/app-wallet/fleet-mode.mdx deleted file mode 100644 index 8e037dac2..000000000 --- a/docs/wallets/app-wallet/fleet-mode.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -id: fleet-mode -title: Fleet Mode -sidebar_label: Fleet Mode -slug: /wallets/app-wallet/fleet-mode ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - -# Fleet Mode - -Fleet Mode is a new app feature introduced in version 3.4.3 to allows users who own many Hotspots to manage their Hotspots without sacrificing app performance. - -Once enabled, Fleet Mode does the following: - -* Defaults to "Followed Hotspots" in the main Hotspot filter list. -* Hides owned Hotspots in the shortcut navigation menu. Only Followed Hotspots show up here. -* "Owned Hotspots" in the main Hotspot filter list will not summarize 24h earnings. - - - -Individual Hotspot pages will continue to show earnings, checklist, and witnesses as they do in non-Fleet Mode. - -Underneath the hood, Fleet Mode makes less API calls, fetches less data, and performs less UI rendering, which allows the app to continue operating effectively without lag. - -## Enable and Disable Fleet Mode -Fleet Mode is automatically enabled for users with 20+ Hotspots in an account. If Fleet Mode is enabled for you, you'll see this screen. - -It is optional for those with less than 20. You can enable Fleet Mode by going into Settings > App > Fleet Mode. - - - - diff --git a/docs/wallets/app-wallet/hexagons.mdx b/docs/wallets/app-wallet/hexagons.mdx deleted file mode 100644 index 112549b86..000000000 --- a/docs/wallets/app-wallet/hexagons.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -id: hexagons -title: Understanding Hexagons -sidebar_label: Understanding Hexagons -slug: /wallets/app-wallet/hexagons ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - -# Understanding Hexagons - -Hexagons, while also a six-sided shape, is the underlying representation of the earth on the Helium network. Based on Uber's H3 index, the surface of the earth can be represented by a grid of hexagons at different resolutions, with higher resolutions covering a larger area, and the smallest resolution covering centimeters of the earth. To understand the technical details and the implementation, please check out the blog one of the core developers. - -| H3 Resolution | Average Hexagon Area (km²) | Average Hexagon Edge Length (km) | -| ------------- | :-----------: | -----: | -| 0 | 4,250,546.8477000 | 1,107.71259100 | -| 1 | 607,220.9782429 | 418.676005500 | -| 2 | 86,745.8540347 | 158.244655800 | -| 3 | 12,392.2648621 | 59.810857940 | -| 4 | 1,770.3235517 | 22.606379400 | -| 5 | 252.9033645 | 8.544408276 | -| 6 | 36.1290521 | 3.229482772 | -| 7 | 5.1612932 | 1.220629759 | -| 8 | 0.7373276 | 0.461354684 | -| 9 | 0.1053325 | 0.174375668 | -| 10 | 0.0150475 | 0.065907807 | -| 11 | 0.0021496 | 0.024910561 | -| 12 | 0.0003071 | 0.009415526 | - -## Hexagons in Helium - -Since the genesis block, Hotspot locations have been represented (and continue to) in resolution 12, a semi-precise point location covering 0.3 m². This is why some Hotspot appear to be "a few houses down from where I asserted". But, as the network expanded, concerns over security and privacy regarding Hotspot locations grew alongside with it. - - - - -# Hexagons in the App - -To improve privacy, security, and understand scaling, Helium is introducing hexagons in the Helium app. - -**These new hexagons will replace Hotspot dots.** - -The hex your Hotspot belongs to is derived from its resolution 12 location, and scaled up to its parent resolution 8 hexagon. - -## Resolution 8 Hexagons - -The Helium app displays resolution 8 hexagons, which has an area of 0.7373276 km², and edge length of 0.461354684 km. About 130 resolution 8 hexagons covers the city of San Francisco. - -:::note - -Resolution 8 hexagons may be temporary. Depending on the outcome of an investigation to see how Resolution 8 asserts affect Proof-of-Coverage, the resolution may change from resolution 8 to 9, or another value. This will be brought forth in a Helium Improvement Proposal. - -::: - -## Viewing Hotspots in Resolution 8 - -:::note - -Viewing Resolution 8 Hexagons is only available on app version 3.3.0 and later. - -::: - -To view a map of the network, go to the **Hotspot** tab. - - - -Each occupied hexagon will have a grey hexagon representing 1 Hotspot. Hexagons with more than 1 Hotspot will show a number. - -Tapping on a hexagon with a number will bring up a Hotspot selector, showing the Hotspots inside that hexagon. Slide through the selector to see each individual Hotspot. - -Hotspots that you follow will be **purple**, and Hotspots that you own will be **blue**. Other Hotspots will be grey. - - - - -The **Owned and Followed Hotspot** Map layer is displayed by default. - -## Map Layers - -Removing point location and grouping Hotspots in a hexagon resulted in new design challenges: How do we show different Hotspot attributes as a group? What if a hexagon had a mixture of different transmit scales, or what if only one of three Hotspots in a hex is a witness? - -To address these challenges, app version 3.3.0 introduces three new map filters: - - - -1. Owned and Followed Hotspots -2. Witness -3. Scaling - -### Owned and Followed Hotspots -This layer colors hexagons where you own or follow Hotspots. If the hexagon contains both followed and unfollowed and/or owned and unowned Hotspots, you will see a blue or purple color indicator. - -By default, if there is an owned Hotspot in a hexagon, it will be colored blue, even if there is a followed Hotspot occupying that hexagon. - - - - -### Witness - -This map layer, when selected, shows yellow hexagons of Hotspots that have witnessed the *selected Hotspot* (outlined in white - in this case, Magic Fleece Terrier). - - - - -To view a list of Hotspots that have witnessed your Hotspot, switch to the Witnesses tab. - - - -These Hotspots have recently witnessed a Beacon from Magic Fleece Terrier based on Proof-of-Coverage receipts. - - -### Transmit Scale - -Previously known as Reward Scale, the Transmit Scale has been renamed to properly explain what this number conveys. - - -**Transmit scale is a multiplier that is applied to rewards of *any Hotspot that witnesses you*. The scale also affects how many rewards you receive as a Challengee.** - - -The number is a representation of how dense a hexagon is (how many Hotspots occupy that hex) at various resolutions (from resolution 12 down to resolution 4). This means that if any Hotspots asserts themselves between 0.3 m² to 1,770.3235517 km² away from your Hotspot, its scale can change. If you're interested in how this is calculated, check out the engineering blog. - -To counteract the effects of a lower transmit scale, it is recommended that Hotspots improve their antenna setup (outdoors, higher gain, higher elevation) so it can witness beacons of Hotspots further away, with potentially higher transmit scales. This ensures a low-scaled Hotspot can continue to earn at an optimal level. - -:::tip - -TLDR: Low Transmit Scale does not mean your Hotspot is doomed! Make sure you have a great setup so you can witness Hotspots with 1.0 Transmit scales. - -::: - -#### Colors of Hexagons -A higher transmit scale will be green, and a lower transmit scale will be colored orange. - -In the app, the color of a resolution 8 hexagon is based on the average transmit scale of all Hotspots' scale occupying that hex. - -So if a hexagon has 3 Hotspots, with scales 1.0, 0.74, and 0.68, the average scale of that hexagon is 0.80667 and the color will be tinged light green. - - - -## Discovery Mode -Discovery Mode is a tool to understand Hotspot coverage. Responders that heard a Discovery Mode packet will be highlighted in a yellow hexagon. Tapping on the yellow hexagon will bring up the name of the Hotspot that responded. - - - -## Assert Location -Hotspot can now see how many other Hotspots are occupying hexagons next to them. - -:::info - -It's important to be truthful in where your Hotspot is located for Proof-of-Coverage. Randomly selecting an empty hexagon will not mean the Hotspot will mine more. - -::: - - - - -## FAQ - -**Q: Why are there hexagons now instead of exact Hotspot locations?** - -A: To protect Hotspot owner's privacy, the Helium app and Explorer will use hexagons instead of precise locations to display coverage. - - -**Q: Why is my Hotspot location so far off from the center of the hexagon?** - -A: For every Hotspot at a resolution 12, we scale up to a resolution 8 and snap the Hotspot location to the center of resolution 8. This is why you may see the location shift. This will not affect how the system calculates proof-of-coverage. - - -**Q: Why is my Hotspot so close to its neighboring Hotspot if I asserted 300 meters away?** - -A: Two Hotspots may occupy the same resolution 8 hexagons even if they are more than 300 meters away. Remember that a resolution 8 hexagon has an area of 737.3276 m² with edges measuring 461.354684 meters. - - -**Q: Why do Hotspots in the same a hex have such varied scaling values?** - -A: Each Hotspot's transmit scale is a formula based on its density in a number of resolutions (from resolution 12 to resolution 4). Hotspot A that occupies the same resolution as Hotspot B may be in a very dense resolution 10 hexagon, thus lowering their scale, while Hotspot B may be the only Hotspot occupying its resolution 10 hexagon, meaning their scale is not affected. - - -**Q: Are Assert Locations still precise?** - -A: Yes. Assert Locations are still precise (at a resolution 12). The precise location helps the network formulate proof-of-coverage challenges. Any changes to the assert location resolution will be presented in a HIP and brought to a community vote. There is no ETA for this at the moment. - - - diff --git a/docs/wallets/app-wallet/rak-hotspot.mdx b/docs/wallets/app-wallet/rak-hotspot.mdx deleted file mode 100644 index 95f6b1135..000000000 --- a/docs/wallets/app-wallet/rak-hotspot.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -id: rak-hotspot-setup -title: RAK Hotspot Setup -sidebar_label: RAK Hotspot Setup -slug: /wallets/app-wallet/rak-hotspot-setup ---- - -# RAK Hotspot Setup - -RAK Hotspot Miner was the first third-party Hotspot on The People's Network. - -This RAK Hotspot Miner is customized function exactly like a Helium Hotspot but with a different look and feel. Everything else about a RAK Hotspot Miner from its earning capabilities, coverage creation, and more, are the same or very similar to a Helium Hotspot. -To get started, make sure you have the Helium App downloaded to your mobile device. A minimum version of app version 2.5.0 is required for iOS (iOS version 13 and above) and Android (OS 8 and above). -* [Download for iOS](https://apps.apple.com/us/app/helium-hotspot/id1450463605) -* [Download for Android](https://play.google.com/store/apps/details?id=com.helium.wallet&hl=en_US) - -Once you have the app downloaded and a wallet created, unbox the RAK Hotspot Miner and get ready! - -1. In the Helium App, go to Hotspots and press +. - -2. Select the RAK Hotspot Miner when asked what you'd like to add to the network. - -3. Continue the onboarding flow. Make sure you select a good place for the Hotspot so it has a clear view of the sky! Obstructions and hidden Hotspots drastically impede earnings and coverage. - -4. Plug in the RAK Hotspot Miner to power it on. A small red light will appear when it's powered on. - -5. Once powered on, press the button on the side of the Miner to put it into Bluetooth pairing mode (early versions of the RAK Hotspot Miner do not have the button, and will simply be discoverable for 5 (five) minutes). This is when you can pair with the Hotspot with your mobile app. It may take up to a minute for the RAK Hotspot Miner to completely boot up with Bluetooth. -Note that there is no blue light from the RAK Hotspot Miner to indicate it's in pairing mode. - -6. The Hotspot Miner will appear in the list. Select the Hotspot to continue. - -7. Next you'll see an Add Hotspot screen. The cost to add a RAK Hotspot Miner is free. If this is not the case, please contact support@helium.com. Add the Hotspot. - - -8. Confirm Hotspot Location and set antenna details. This is free for the first assertion (while you will see the transaction fee in the app, it is paid for by the manufacturer). The transaction fee is paid by you for each additional assert. If you are not ready to set a location, you can do so later by pressing Skip for now. If you do not see fee-free location, please contact support@helium.com. Press Continue. -9. And that's it! The Hotspot is now being added to the Network. Because this is a blockchain, your Hotspot may take a few minutes to appear in the app. -10. View and manage your Hotspot in the Hotspots tab of the mobile app. - -## Common Issues -### Unable to scan Wi-Fi networks -Try moving the miner and yourself closer to the Wi-Fi router for initial synchronization. Using Ethernet for internet is another good option. -### Asked to pay Data Credits (DC) to add a Hotspot -If this happens, it's best to leave the screen and come back to it in 5 minutes. The Hotspot Miner needs a few minutes to boot up and connect to the servers to check its authenticity. If this continues to happen, please reach out to Helium Support at support@helium.com. - - diff --git a/docs/wallets/app-wallet/transaction-failures.mdx b/docs/wallets/app-wallet/transaction-failures.mdx deleted file mode 100644 index 5c739fda7..000000000 --- a/docs/wallets/app-wallet/transaction-failures.mdx +++ /dev/null @@ -1,106 +0,0 @@ ---- -id: transaction-failures -title: Transaction Failures -sidebar_label: Types of Transaction Failures -slug: /wallets/app-wallet/transaction-failures ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - -# Types of Transaction Failures - -The Helium app automatically notifies users whenever a transaction fails. Transactions can fail for a number of reasons - the most common is typically insufficient funds (not enough $HNT in the wallet) or a nonce issue. - -:::note - -What is a nonce? -Nonce is a number included in every transaction to guarantee the data is "live" and not replayed, preventing the blockchain from replay attacks. The Helium app uses a speculative nonce, which increments for every type of transaction. In some cases, the blockchain's transaction manager processes these transactions out of order which causes some transactions to fail. - -::: - -## Payment Transaction Failures - -### Wrong Transaction Fee - -`{invalid,wrong_txn_fee}` - -Transaction fees are required on the network to prevent spamming. These fees use Data Credits (DC) and the Helium app uses [implicit burn](https://docs.helium.com/blockchain/transaction-fees/#transaction-fees-and-implicit-burn) to determine the appropriate amount of HNT to burn to generate these DCs. - -How much HNT to burn depends on the [Oracle price](https://docs.helium.com/blockchain/oracles/#hnt-price-oracles). The Oracle price is the median $HNT price from a list of individual oracles and used to weather large swings in price. In special cases, the price of $HNT may shift enough in a short time period such that the amount of HNT burned to generate DCs *is not enough*. - -:::info - -1 DC = $0.00001 HNT - -::: - -**Recommended Fix:** If you see this failure, the best thing to do is to first confirm the transaction did not occur (check your wallet balance), then submit the payment transaction again. - -### Invalid Nonce - -`{invalid,invalid_nonce}` - -If you see this error message for payment transactions, it could mean that multiple payments were sent in quick succession without waiting for the prior payment to clear. - -**Recommended Fix:** We recommend sending payments one at a time and waiting for it to clear before attempting the next. - -The core developers are actively looking at ways to improve this experience. - -## Transfer Hotspot Transaction Failures - -Please check out the [Transfer Hotspot Guide](https://docs.helium.com/wallets/app-wallet/transfer-hotspot/) for full instructions and best practices. - -### Gateway Too Stale - -`{invalid,gateway_too_stale}` - -Due to the decentralized nature of the Helium network, it’s important that owners and new owners of Hotspots know what they’re getting is a functional unit that is able to sync the blockchain and participate in PoC (the way Hotspots mine $HNT). Before transferring a Hotspot, the blockchain checks to see if it has had recent activity in the last 1200 blocks (approximately 20 hours). Activity counts as creating a challenge, witnessing a challenge, or sending a beacon. It also checks that it’s fully synced to the blockchain. - -If you see this notification, it means the the Hotspot you’re about to transfer has not shown “proof of life” recently. - -**Recommended Fix:** Notify the other person involved in the transfer of this Hotspot from that they should conect the Hotspot back into Internet and monitor the Hotspot for activity before trying again. - -### Buyer Insufficient HNT Balance - -`{invalid,buyer_insufficient_hnt_balance}` - -The network facilitates transferring Hotspots at zero cost or at a price the seller determines. Even if the cost is zero, there is always a transaction fee for every transaction on the network to prevent spamming. In the case of transferring Hotspots, the buyer is the one to pay the transaction fee, which is typically 55,000 DC. A recommendation of 1-2 HNT in the buyer’s wallet is usually more than enough to account for the transaction. - -If you see this notification, the buyer should fund their wallet, seller should cancel and reinitiate the transfer request to try again. - -## Assert Location Transaction Failures - -### Invalid Nonce - -`{invalid,invalid_nonce}` - -If you see this error message, it could mean that multiple attempts to update a Hotspot’s location, gain, or elevation was attempted in quick succession, or, attempting to add multiple Hotspots in quick succession without waiting for the prior change to clear. - -**Recommended Fix:** We recommend setting location for Hotspots one at a time and waiting for it to clear before attempting the next. - -### Invalid Staking Fee - -`{invalid,invalid_staking_fee}` - -If you see this error message, it could mean that the app calculated the fees to pay for a location update incorrectly. - -**Recommended Fix:** We recommend checking the API to confirm that the update never made it to the blockchain, then trying again. - -To check the API, first copy your Hotspot address. You can find this on explorer.helium.com, enter the Hotspot name, then click on the clipboard icon next to the name. - - - -Then paste the address where it says `:hotspotaddress` - -`api.helium.com/v1/hotspots/:hotspotaddress` - -**Example:** - - - -If you updated gain, look for `“gain”`. Please note this value is multiplied by ten. So if you typed in 2.1 in the app, it will appear as 21. This is expected. - -If you updated elevation, look for `“elevation”`. This is in meters. - -If you updated the location, look for `“lng”`, `“lat”` or `“geocode”`. diff --git a/docs/wallets/app-wallet/transfer-hotspot.mdx b/docs/wallets/app-wallet/transfer-hotspot.mdx deleted file mode 100644 index 1b729c4f3..000000000 --- a/docs/wallets/app-wallet/transfer-hotspot.mdx +++ /dev/null @@ -1,118 +0,0 @@ ---- -id: transfer-hotspot -title: Transfer Hotspot -sidebar_label: Transfer Hotspot -slug: /wallets/app-wallet/transfer-hotspot ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - - -# Transfer Hotspot - -As requested by the Community via HIP13, the Transfer Hotspot feature is -available for Hotspot owners of the Network to transfer their Hotspots to -another owner. - -This feature enables Hotspot owners to transfer ownership of a Hotspot to -another user. Once transferred, the new owner will receive all future Hotspot -mining rewards. - - -### Requirements - -- Only the wallet that owns the Hotspot on the blockchain can initiate a transfer. -- These steps are for Seller with app version 3.10.0 -* Parties do not need to be physically next to the Hotspot for transfer to succeed. -- This feature requires both users to have a valid Helium wallet account -- The Seller pays the transaction fee of ~55,000 DC. -- Hotspots must have had Proof-of-Coverage activity (creating a challenge, beaconing, or witnessing) in the last 1200 blocks (approximately 20 hours) in order to be transferred. This is to ensure the Hotspot is fully functional for the protection of the buyer. - -:::warning - -Things to keep in mind: Helium assumes no liability on the functionality of -Hotspot hardware defined in the Transfer Hotspot transaction. Buyers must verify -with the Seller the Hotspot is in good, working condition and once transferred, -understand there is no guarantee that the Hotspot hardware will arrive in -working condition. - -::: - -## As a Seller, to initiate a Transfer Hotspot transaction: - -1. Navigate to the Hotspot to transfer and tap Settings > Transfer Hotspot. - - -2. Acknowledge that you, the Seller, will no longer own or earn mining rewards from - that Hotspot once transferred. -3. Enter the Hotspot name in the text field to confirm you want to transfer the - Hotspot. - - - - -4. You’ll see the payment user interface next. Enter the Buyer’s wallet address. - - - -5. Press Send Transfer Request to submit the Transfer. The transfer request will be automatically submitted. -* Note that once submitted, transfers can not be cancelled, reversed, or changed. Having the correct Buyer address is critical* - -6. Once the Transfer Hotspot transaction clears the blockchain, the Hotspot will - no longer appear in the Sellers account and will show up in the Buyers account. Both the Buyer and Seller will - receive a confirmation in their notification center. - -7. The Seller will see an activity entry on their Account page showing the - Hotspot Transfer. - - -::: - -## As a Buyer: - -Once the the transaction clears, a notification will appear in the Buyer’s notification center. The Hotspot will then show up in the Buyers wallet. -Tap on the notification to view the transaction. - - - - - -## Common Questions - - -### Can I undo the transaction? - -No. Once transferred, the Hotspot and its mining rewards moving forward belong -to the Buyer. - -### Who pays for the transaction fee? - -The Seller pays for the transaction fee. - -### Is this available on the CLI? - -Yes. Wallet CLI is available for this feature. -[Helium CLI Wallet Documentation](/wallets/cli-wallet) - -### Will this be recorded in the blockchain? - -Yes. Transfer Hotspot transactions are on-chain and visible in Explorer. - -### What if the activity check reveals the Hotspot hasn’t done anything recently? - -You won’t be able to transfer the Hotspot. - -### How do I make sure the Hotspot physically changes hands? - -It is the Buyer's responsibility to confirm the Hotspot is fully functional and -will arrive in the same, working condition. - -### Do I need to be next to the Hotspot to transfer or receive? - -No. You do not need to be physically next to the Hotspot as a buyer or seller to -transfer the Hotspot. - -### Is the history of the Hotspot transferred to the new owner as well? - -Yes. All mining history from the Hotspot will transfer to the new owner as well. -This cannot be cleared as all history is from the ledger. It does not transfer any previously earned HNT. diff --git a/docs/wallets/app-wallet/twelve-words.mdx b/docs/wallets/app-wallet/twelve-words.mdx deleted file mode 100644 index 012830a76..000000000 --- a/docs/wallets/app-wallet/twelve-words.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: twelve-words -title: Twelve Words Seed Phrase -sidebar_label: Twelve Words Seed Phrase -slug: /wallets/app-wallet/twelve-words ---- - -# Twelve Words Seed Phrase - -When setting up a Helium wallet through the app, you are prompted to write down -the 12 words seed phrase. These are the mnemonic phrase generated from the -private key of your wallet, and the only way to access the wallet. - -:::warning - -The 12 words can never be recovered if they are lost, and they are the sole key -to accessing your wallet, the HNT it contains, and all access to your Hotspot -and it’s rewards. Lose the 12 words, lose it all. You’re not able to log into -your account without them, nor can you transfer HNT or a Hotspot to a different -account without them. - -::: - - -## Twelve Word Security - -A friendly reminder about those 12 words… -When you first created an account in the Helium App, those 12 words represent the private key to your wallet account. - -### What does this mean? - -It means that those 12 words are the only way to access your Hotspots and HNT balance. Lose those 12 words, lose your access to your HNT and your hotspots and their future earnings. - -Luckily, there’s an easy way to back up those 12 words. Write them down, save it, and back it up. Go to the Helium App > … menu > Reveal Words. - -:::note - -Do not logout of your phone wallet or uninstall the app without first writing down your 12 words - -::: - -The only places you are required to enter your 12 words are: -1. The [Helium APP](https://docs.helium.com/wallets/app-wallet) - on your phone -2. The [CLI Wallet](https://docs.helium.com/wallets/cli-wallet) - on your computer -3. The [Ledger Wallet](https://docs.helium.com/wallets/ledger) - on your computer or phone -NEVER enter them into a website. - -When entering the 12 worlds make sure you: -1. Enter them in the right order -2. Get the spelling correct. Check here for correct spelling: [https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt](https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt) - -No Helium Support person will EVER ask for your 12 words or ask you to enter them into a website to fix a problem. - -:::note - -Remember two things. -1. Write them down and keep them safe, do it now if you you are not sure. -2. Imagine they are cash, never give them to anyone you would not trust with the HNT value and Hotspot value. - -::: diff --git a/docs/wallets/cli-wallet.mdx b/docs/wallets/cli-wallet.mdx new file mode 100644 index 000000000..5ab06a696 --- /dev/null +++ b/docs/wallets/cli-wallet.mdx @@ -0,0 +1,191 @@ +--- +id: cli-wallet +title: CLI Wallet +pagination_label: CLI Wallet +sidebar_label: CLI Wallet +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /wallets/cli-wallet +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +# Command Line Interface Wallet + +## Installing Helium CLI Wallet + +### Running From a Release + +Releases of the Helium CLI Wallet are +[available on GitHub](https://github.com/helium/helium-wallet-rs/releases). Select the appropriate +package for your operating system. + +Unpack the zip file and place the helium-wallet binary in your `$PATH`. This operation differs +depending on your operating system but is a common task and easily searchable. + +### Building From Source + +The Helium CLI Wallet is open-source, written in Rust, and can be compiled with appropriate tooling. +For build instructions, see the +[Building from Source](https://github.com/helium/helium-wallet-rs#building-from-source) section on +the helium‑wallet‑rs GitHub repo. + +## Usage + +At any time, use `--help` to see the most recent in-program documentation. + +At the time of this writing, version 2.0.0-rc.3 looks like this: + +```sh +./helium-wallet --help +Common options for most wallet commands + +Usage: helium-wallet [OPTIONS] + +Commands: + info Get wallet information + balance Get the balance for a wallet or a given public key. The balance is given for each of the Helium related holdings of a given Solana address + upgrade Upgrade a wallet to the latest supported version of the given format. The same password is used to decrypt the old and encrypt the new wallet + router Operations on routers + create Create a new wallet or keypair + hotspots Commands on hotspots + dc Commands on data credits + transfer Send one (or more) payments to given addresses + export Exports encrypted wallet seed as QR-encoded JSON or raw seed via stdout + help Print this message or the help of the given subcommand(s) + +Options: + -f, --file File(s) to use [default: wallet.key] + --url Solana RPC URL to use [default: m] + -h, --help Print help + -V, --version Print version +``` + +Exploring the help menu is always a good way to orient yourself. To learn more about a certain +transaction (or subcommand), simply append `--help`. e.g.: + +```sh +./helium-wallet dc --help +Commands on data credits + +Usage: helium-wallet dc + +Commands: + price Get the amount of HNT needed to buy a given number of USD worth of Data Credits + mint Burn HNT to Data Credits (DC) from this wallet to given payees wallet + delegate Delegate DC from this wallet to a given router + help Print this message or the help of the given subcommand(s) + +Options: + -h, --help Print help +``` + +## Basic Commands + +### Create Wallet + +`helium-wallet create basic` + +This command will create an account as a single key, stored in `wallet.key` which gets output in the +same directory where the command is run. + +Upon creation, the CLI will prompt you for a password that encrypts the file. A strong password will +make it difficult for someone to brute force the file should the file be compromised. + +### Display Wallet + +Displaying information for an account without needing its password can be done using: + +```bash +$ helium-wallet info +``` + +To display a QR code for the public key of the given Wallet use: + +```bash +$ helium-wallet info --qr +``` + +The QR Code is useful for sending tokens to the account from a wallet app. + +### Wallet Creation Features + +Creating a Wallet above is easy, but there's a lot more flexibility you might not know about. It's +always recommended to explore the help menu to learn more: + +```bash +$ helium-wallet create basic --help +Create a new basic wallet + +Usage: helium-wallet create basic [OPTIONS] + +Options: + -o, --output Output file to store the key in [default: wallet.key] + --force Overwrite an existing file + --seed Use a BIP39 or mobile app seed phrase to generate the wallet keys + -h, --help Print help +``` + +### Managing Multiple Accounts + +A more precise location or filename can be specified when creating an account by using the +`--output` flag. e.g.: + +```bash +$ helium-wallet create basic --output ~/my-wallets/wallet-5.key +``` + +You can specify a file other than the default `./wallet.key` by using the global option `--file`. +e.g.: + +```bash +$ helium-wallet -f ~/my-wallets/wallet-5.key transfer
+``` + +### Import Seed-phrase Account into CLI + +The `--seed` flag enables you to import an account secured by a 12 or 24-word seed phrase. + +Enter the command: + +``` +$ helium-wallet create basic --seed +``` + +After you press enter, you will be prompted for your seed words, separated by spaces. + +### Export to Helium Wallet App + +Helium Wallets created using the CLI can be exported to the Helium Wallet App. + +```bash +$ helium-wallet export +``` + +You will be prompted for the Wallet Password, (this is _not_ your seed phrase, this password was +input when the Wallet was created.) + +The `export` command will display the seed phrase associated with the given account. This seed +phrase can be used with the Helium Wallet App or other Solana ecosystem wallets. + +--- + +
+ +# Helium L1 Migration to Solana + +If you have a wallet from before the migration to Solana (April 18th, 2023), you can migrate it +using this widget: + +import { MigrateWallet } from '@theme/MigrateWallet' + + + +Once this is done, the wallet should work on Solana. You can see a mapping from the Helium L1 +address to the Solana Address: + +import { DisplayLegacyWallet } from '@theme/DisplayLegacyWallet' + +
+ +
diff --git a/docs/wallets/cli.mdx b/docs/wallets/cli.mdx deleted file mode 100644 index 4da05968d..000000000 --- a/docs/wallets/cli.mdx +++ /dev/null @@ -1,295 +0,0 @@ ---- -id: cli-wallet -sidebar_label: CLI -slug: /wallets/cli-wallet ---- - -import useBaseUrl from "@docusaurus/useBaseUrl"; - -# Command Line Interface Wallet - -The Helium Command Line Interface (CLI) wallet is the most flexible of the -wallet options but it also requires more technical knowledge. As such, it is -suitable for all types of transactions, but requires more caution on behalf of -its users. - -Once you've covered the basics here, you can explore more specific use-cases -for the wallet: -* [add and assert data only hotspot](/mine-hnt/data-only-hotspots) -* [add validator](/mine-hnt/validators/mainnet/deployment-guide#stake-hnt-to-your-validator) - -## Installing CLI Wallet - -Releases of the CLI wallet are -[tagged and hosted on Github](https://github.com/helium/helium-wallet-rs/tags). -Click on "Downloads" for the most recent release and select the appropriate -package for your operating system. - -Unpack the zip file and place the helium-wallet binary in your $PATH somewhere. -This operation differs depending on your operating system, but is a common task -and easily searchable. - -## Usage - -At any time, use `--help` to see the most recent documentation and help for the -CLI wallet. - -At time of this writing, version 1.6.0 looks like this: - -``` -$ helium-wallet --help -helium-wallet 1.6.0 -Common options for most wallet commands - -USAGE: - helium-wallet [OPTIONS] - -FLAGS: - -h, --help - Prints help information - - -V, --version - Prints version information - - -OPTIONS: - -f, --file ... - File(s) to use [default: wallet.key] - - --format - Output format to use [default: table] [possible values: table, json] - - -SUBCOMMANDS: - balance Get the balance for a wallet. The balance is given in HNT and has a precision of 8 decimals - burn Burn HNT to Data Credits (DC) from this wallet to given payees wallet - create Create a new wallet - help Prints this message or the help of the given subcommand(s) - hotspots Display list of hotspots associated with wallet or transfer a hotspot to another wallet - htlc Create or Redeem from an HTLC address - info Get wallet information - multisig Commands multi signature transactions - oracle Report an oracle price to the blockchain - oui Create or update an OUI - pay Send one (or more) payments to given addresses. If an input file is specified for multiple - payments, the payee, amount and memo arguments are ignored - request Construct various request (like payment) in a QR code - securities Work with security tokens - upgrade Upgrade a wallet to the latest supported version of the given format. The same password is used to - decrypt the old and encrypt the new wallet - validators Commands for validators - vars Commands for chain variables - verify Verify an encypted wallet - -``` - -Exploring the help menu is always a good way to orient yourself. To learn more -about a certain transaction (or subcommand), simply append `--help`. eg: - -``` -helium-wallet pay --help -``` - -This documentation will not cover every single command, but we will provide some -basic examples to help you get familiar. - -## Create Wallet - -`helium-wallet create basic` - -This command will create a wallet as a single key, stored in `wallet.key` which -gets output in whatever directory you ran this command. - -Upon creation, the CLI will prompt you for a password which encrypts the file. A -strong password will make it difficult for someone to brute force the file -should the file be compromised. - -### Display Wallet - -Displaying information for one or more wallets without needing its password can -be done using; - -``` - helium-wallet info -``` - -To display a QR code for the public key of the given wallet use: - -``` - helium-wallet info --qr -``` - -This is useful for sending tokens to the wallet from the mobile wallet. - -### Wallet Creation Features - -Creating a wallet above is easy, but there's a lot more flexibility you might -not know about. It's always recommended to explore the help menu to learn more: - -``` -$ helium-wallet create basic --help - -helium-wallet-create-basic 1.6.0 -Create a new basic wallet - -USAGE: - helium-wallet create basic [FLAGS] [OPTIONS] - -FLAGS: - --force Overwrite an existing file - -h, --help Prints help information - -V, --version Prints version information - -OPTIONS: - --key-type The type of key to generate (ecc_compact/ed25519) [default: ed25519] - --network The network to generate the wallet (testnet/mainnet) [default: mainnet] - -o, --output Output file to store the key in [default: wallet.key] - --seed Use a BIP39 or mobile app seed phrase to generate the wallet keys [possible values: - bip39, mobile] -``` - -We'll go through a few examples next. - -### Managing Multiple Wallets - -You can specify a more precise location or filename when _creating a wallet_ by -using the `--output` flag. eg: - -`helium-wallet create basic --output ~/my-wallets/wallet-5.key` - -When _using a wallet_, you can specify a file other than the default -`./wallet.key` by using the the global option `--file`. eg: - -`helium-wallet -f ~/my-wallets/wallet-5.key pay
` - -### Sharded Wallet - -Sharding wallet keys is supported via Shamir's Secret Sharing. A key can be -broken into N shards such that recovering the original key needs K distinct -shards. This can be done by passing options to create: - -``` - helium-wallet create sharded -n 5 -k 3 -``` - -This will create wallet.key.1 through wallet.key.5 (the base name of the wallet -file can be supplied with the `--output` parameter). - -When keys are sharded using verify will require at least K distinct keys. - -The `--seed` option described above can also be used to construct a sharded -wallet. - -#### Implementation details - -A ed25519 key is generated via libsodium. The provided password is run through -PBKDF2, with a configurable number of iterations and a random salt, and the -resulting value is used as an AES key. When sharding is enabled, an additional -AES key is randomly generated and the 2 keys are combined using a sha256 HMAC -into the final AES key. - -The private key is then encrypted with AES256-GCM and stored in the file along -with the sharding information, the key share (if applicable), the AES -initialization vector, the PBKDF2 salt and iteration count and the AES-GCM -authentication tag. - -### Import Seed - -The `--seed` flag enables you to import a wallet generated elsewhere. For -example, you may want to import you key from the mobile wallet, so that you can -submit transactions that may not be supported in the mobile wallet. - -Enter the command: - -``` -$ helium-wallet create basic --seed mobile -``` - -After you press enter, you will be prompted for your seed words. - -:::tip - -Remember, your seed is your private key. Keep it safe and **private**. When you -import the seed as a CLI wallet, you do not "log yourself out" of your mobile -wallet; you've only copied the private key from your mobile wallet into the CLI. -Mobile wallet and CLI wallet both have a local copies of the key and can submit -transactions to the blockchain API. - -::: - -## Pay Transaction Example - -If you explore the pay command, you will see the following: - -``` -$ helium-wallet pay --help - -helium-wallet-pay 1.6.0 -Send one (or more) payments to given addresses. - -The payment is not submitted to the system unless the '--commit' option is given. - -USAGE: -helium-wallet pay [FLAGS] [OPTIONS] - -FLAGS: - --commit - Commit the payment to the API - -h, --help - Prints help information - -V, --version - Prints version information - -[..] - -SUBCOMMANDS: -help Prints this message or the help of the given subcommand(s) -multi Multiple payees (requires file input). Check "helium-wallet pay multi --help" for details -one Single payee -``` - -Let's explore the `one` subcommand to figure out usage for a single payment: - -``` -$ helium-wallet pay one --help - -helium-wallet-pay-one 1.6.0 -Single payee - -USAGE: - helium-wallet pay one [OPTIONS]
- -FLAGS: - -h, --help Prints help information - -V, --version Prints version information - -OPTIONS: - --memo Memo field to include. Provide as a base64 encoded string [default: AAAAAAAAAAA=] - -ARGS: -
Address to send the tokens to - Amount of HNT to send -``` - -The `USAGE` section is is very helpful: -`helium-wallet pay one [OPTIONS]
`. - -For example, if I want to send 5.0 HNT to -`14GWyFj9FjLHzoN3aX7Tq7PL6fEg4dfWPY8CrK8b9S5ZrcKDz5S`, it would look like this: - -``` -helium-wallet pay one 14GWyFj9FjLHzoN3aX7Tq7PL6fEg4dfWPY8CrK8b9S5ZrcKDz5S 5 --commit -``` - -The `--commit` FLAG is a global option to the `pay` command - you'll recall it -was documented at the scope of `helium-wallet pay --help`. It's critical for -**all transactions** to confirm that you want the transaction to be submitted to -the blockchain API. - -When you commit a transaction to the API, you will be provided with a -**transaction hash**. This is a unique identifier for your transaction on the -blockchain and you can track your transcation status using the API endpoint: - -``` -https://api.helium.io/v1/pending_transactions/YOUR_HASH_HERE -``` diff --git a/docs/wallets/helium-wallet-app.mdx b/docs/wallets/helium-wallet-app.mdx new file mode 100644 index 000000000..b388e5cbf --- /dev/null +++ b/docs/wallets/helium-wallet-app.mdx @@ -0,0 +1,237 @@ +--- +id: helium-wallet-app +title: Helium Wallet App +pagination_label: Helium Wallet App +sidebar_label: Helium Wallet App +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /wallets/helium-wallet-app +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + + + +
+
+
+
+ + + +
+
+ + + +
+
+
+
+ +The Helium Wallet app is the trusted way to manage your Helium account. + +## Accounts + +### Creating A New Account + + + +Accounts created with the Helium Wallet app are generated with a 24-word seed phrase. These 24 words +in the correct order are the **only** way to access the account and can **never** be recovered if +lost. Whomever has the 24-word seed phrase controls the wallet, meaning that they are considered the +owner of all tokens, Hotspots, or NFTs in the account. + +### Importing An Existing Account + + + +If you have an existing Helium account you can import it into the Helium Wallet app. + +| Account Type | Action | +| :-----------------: | :------------------------------------------------------------------------------------ | +| 12-word seed phrase | Tap the `12 Word` button and enter the 12-word seed phrase, in the original order. | +| 24-word seed phrase | Tap the `24 Word` button and enter the 24-word seed phrase, in the original order. | +| Ledger | Tap the Ledger option and follow the in-app prompts to pair with the hardware wallet. | + +## Working With Multiple Accounts + +The Helium Wallet App supports creating or importing up to 10 accounts, each with its own unique set +of 12 or 24 words. Navigate between accounts by pressing on the account name at the top of the +screen. An account selector allows toggling between different onboarded accounts. The settings +screen will apply to the selected account. + +## Tokens Supported + +The Helium Wallet will display the token balances and fiat value in your account for: + +**HNT** - in USD or your defined currency +**MOBILE** - in USD or your defined currency +**IOT**- in USD or your defined currency +**DC** - in USD (Not transferable) +**SOL** - in USD or your defined currency +**USDC** - in USD or your defined currency + +No other tokens held in your account will be displayed in the Helium Wallet App. + +## Send And Request Tokens + + + + + + + + + +The blue send button allows you to choose the account you wish to send from and choose one or more +addresses or contacts you wish to send tokens to. + + + + + + + +The green request button allows you to quickly generate a QR code of your account's public address +for someone to scan or generate a link to share via email or text. You can also enter the amount you +are requesting or add a note. + +## Helium Identity + +Use the Helium Wallet App to connect to dApps and authenticate your identity on the Solana +blockchain. Using the in-app browser, access dApps such as Jupiter Aggregator or +[lock-up your tokens and vote using Modular Governance](https://modular-governance.helium.com/). + +## Address Book And Contacts + + + +This feature allows you to save names/nicknames and related account addresses for accounts you may +wish to send tokens to. Contacts are displayed in alphabetical order and are searchable by name or +account address. There is no limit to the number of contacts you can have. + +Tapping on a contact displays the public address as well as the Nickname field, which can be +adjusted at any time. + +## Settings + +### Wallet Account Settings + + + +Each account imported to the Helium Wallet app has separate settings. + +| Setting | Description | +| :-------------: | :------------------------------------------------------------------------------------------------------------------------------------------------- | +| Account Alias | Give your account a name to help separate it from other accounts managed in the Helium Wallet App. | +| Default Account | When using multiple accounts, this toggle will determine which one is the default and will show first whenever the Helium Wallet app is opened. | +| Copy Address | Copies the account address to your device's clipboard. | +| Share Address | Provides QR code so someone can scan your account's public address or allows you to quickly share it via email or text. | +| Remove Wallet | Logs you out of the current account. The original seed phrase is required to ensure the words are safely backed up since they cannot be recovered. | + +### Hotspots Wallet Backup + +If someone has your private key, they will have full control of your account. This includes the +ability to remove tokens and Hotspots. +Do **not** enter these words into any untrusted website. Any person or website asking for these keys +is likely a scammer. + +| Setting | Description | +| :----------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Reveal Words | While logged in, you can view your 12-word or 24-word seed phrase. These are required for login/logout of an account and can never be recovered if lost. Lose these, lose the Wallet and everything it contains. Back them up in a secure place. | +| Reveal Private Key | The private key of your account can be used to import the account into other Solana-compatible wallet apps such as Solflare, Phantom, Coinbase Wallet, or Backpack. | + +### Security Settings + + + +These settings keep the Helium Wallet app secure. + +| Setting | Description | +| :----------------------: | :---------------------------------------------------------------------------------------------- | +| Enable PIN | Set up a PIN code for accessing the Wallet from the device. | +| Require PIN | Set time limit when PIN is required to log back in (Immediately, 1min, 5min, 15min, 1hr, 4hrs). | +| Reset PIN | Change the current PIN to a new one (the original PIN is required). | +| Require PIN for Payments | This additional security option requires the PIN to be entered before any payment can be sent. | + +### App Settings + + + +The Helium Wallet app has interface settings that can be adjusted to your liking. + +| Setting | Description | +| :------: | :------------------------------------------------------------------------------ | +| Language | Change which language the app text will be displayed in. | +| Currency | Change which currency the app displays the market equivalent of token balances. | + +### Developer Settings + +Developer settings should be used intentionally. If you are not a developer or are not sure what +these settings do, it is best to leave them unchanged. + +| Setting | Description | +| :------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Solana Cluster | Offers the ability to operate outside of Solana Mainnet. Devnet is typically for testing or demo purposes. Your account will operate on the selected network Solana Devnet. Hotspots or Token balances are not replicated across clusters. The in-app faucet can be used to fund devnet accounts. | + +--- + +## 12-Word And 24-Word Seed Phrases + +When a Helium account is created with the Helium Wallet app, a 24-word "Seed Phrase" is generated. + +Users who created their Helium account using the Helium Hotspot app will have a 12-word seed phrase. +While the Helium Wallet app accepts 12-word seed phrases, all new Helium Wallets are created with +24-word seed phrases. + +Read more about [Helium Wallet Seed Phrase](/wallets/wallet-seed-phrase). + +:::caution Before Deleting Helium Wallet Apps + +Do not uninstall the Helium Wallet app without first writing down the seed phrase. + +::: diff --git a/docs/wallets/l1-migrate.mdx b/docs/wallets/l1-migrate.mdx new file mode 100644 index 000000000..c9a7ea713 --- /dev/null +++ b/docs/wallets/l1-migrate.mdx @@ -0,0 +1,18 @@ +--- +id: l1-migrate +title: L1 Migration Tool +pagination_label: Wallet User +sidebar_label: Wallet User +description: Helium L1 Wallet Migration Tool +image: https://docs.helium.com/img/link-image.png +slug: /wallets/l1-migrate +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' +import { MigrateWallet } from '@theme/MigrateWallet' + +You can migrate a wallet using the widget below by entering a Helium or Solana wallet address and +clicking the "Seed Wallet" button. Wallets seeded/migrated will have 0.00139088 SOL deposited in +them. + + diff --git a/docs/wallets/ledger-wallet.mdx b/docs/wallets/ledger-wallet.mdx new file mode 100644 index 000000000..632cf052b --- /dev/null +++ b/docs/wallets/ledger-wallet.mdx @@ -0,0 +1,182 @@ +--- +id: ledger-wallet +title: Ledger +pagination_label: Ledger +sidebar_label: Ledger +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /wallets/ledger-wallet +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +# Ledger Hardware Wallet + +The Helium tokens have support for Ledger Hardware Wallets via the Solana blockchain. Ledger allows +for: + +- Viewing account address(es) and balances +- Transferring tokens +- Signing transactions + +At this time, Hotspot management actions such as onboarding or asserting location are not supported. +You will need to perform these actions within the +[Helium Wallet App.](https://docs.helium.com/wallets/helium-wallet-app) + +Helium HNT, MOBILE and IOT are Solana SPL tokens and are supported by the Solana App for Ledger but +not directly in Ledger Live. + +Installation instructions for the Solana App are on +[Ledger Solana support page.](https://support.ledger.com/article/360016265659-zd) Remember to +configure [blind signing.](https://support.ledger.com/article/4499092909085-zd) + +## Basic Setup Guide Using Helium Black Wallet App and Ledger + +1. Turn on Ledger by pressing left button +2. Using on screen Guide to Setup as new device +3. Set the access PIN for the ledger +4. Record the 24 word recovery phrase (don't share this, store in safe place) +5. Install desktop version of [Ledger Live App](https://www.ledger.com/ledger-live) +6. Connect Ledger to your computer with USB cable +7. Open Ledger Live Desktop App +8. Click on "My Ledger" at the bottom of the left menu stack +9. Approve the connection on Ledger device by clicking both buttons +10. Look for banner at the top of the desktop Ledger Live window for FW update notification +11. Approve updates on the ledger device as needed + :::important + + It may take multiple serial updates to get your Ledger up to date. + + ::: + +12. In desktop Ledger Live window go to settings -> Developer Mode -> Enable +13. In desktop Ledger Live window, find Solana App and click install +14. On Ledger Device start Solana app by clicking both buttons +15. On Ledger Device navigate to Settings in Solana App and enable "Allow Blind Signing" +16. Open Helium Black Wallet App on smartphone +17. In Black Wallet App navigate to Add/Import Wallet +18. In Black Wallet App select Ledger from the options at the top +19. In Black Wallet App select your Ledger device from the list (should be only one in most cases) +20. In Black Wallet App select wallet to import (if more than one, import all for now) +21. On Ledger Device approve the wallet import +22. On Black Wallet App, you should now see your Helium friendly wallet with zero balance. +23. On Black Wallet App, tap the pub key / address above the wallet balance to copy your pub key to + clipboard +24. Save your wallet pubkey somewhere handy, this is destination for transfers into your cold + wallet. + +## Testing your Ledger Cold Wallet + +Before making any significant transfers into your new Ledger wallet, it is best to make a series of +test transfers in and out of your wallet. + +1. Open the Helium Black Wallet App on your smartphone +2. Navigate to your Ledger Wallet from steps above +3. Copy the pub key of your Ledger Wallet +4. Make a test transfer of SOL into your new Ledger Wallet + :::tip + + Transfers out of your wallet will require SOL to pay fees, so start by adding at little SOL e.g. + 0.1 SOL to your wallet. + + ::: + +5. Copy the pub key of an external wallet (either Coinbase or other Black Wallet App native wallet) +6. Make a test transfer of SOL out of your new Ledger Wallet + :::note + + This will require your Ledger to be PIN unlocked and Solana App started and "ready" to complete + + ::: + +7. Review and Approve the transaction on your Ledger Device when prompted +8. Repeat the Process with HNT or IOT again with small amounts +9. After your have tested transfers in and out of your Ledger wallet, you are ready for safe cold + storage using your Ledger Wallet. + +## Using Third Party Wallet Apps + +Users may alternatively use Solflare or Phantom to +[access SOL/SPL tokens with Ledger.](https://support.ledger.com/article/7723954701469-zd) + +Solflare, Phantom and other non-custodial wallets can import the private key from the Helium Wallet +App. Follow the instructions on our using +[Third Party Wallets](https://docs.helium.com/wallets/third-party-wallets#importing-helium-accounts-into-solana-wallets) +documentation. + +## Ledger Helium L1 to Solana Migration + +If you have an unmigrated Ledger wallet that existed on the Helium L1 prior to the migration to +Solana on April 18th, 2023, you will need to follow these instructions. + +### Video Walkthrough + +import { YouTube } from 'mdx-embed' + + + +--- + +### Installing the Helium-Solana App + +Update your Ledger firmware to at least 2.1.0, preferably 2.4.x before you start. + +As of now, we are still waiting on Ledger to release our app. Until then, to install you must follow +these steps: + +1. Open Ledger Live. +2. Go to Settings (top right corner) +3. Click `Experimental Features` +4. Enable `Developer Mode` +5. Install the [Helium-Solana Ledger App](https://github.com/helium/app-helium-solana) as you + normally would. +6. Close Ledger Live + +--- + +### Migrating + +The following utility will migrate all tokens from the Helium derivation path `44'/904'/n'/0'` to +the Solana derivation path `44'/501'/n'/0'`. + +Ledger users will need to update their Helium Ledger App to a version that's pending release. This +upcoming version will use the Solana private key derivation path that moves all your tokens and +balances over to Solana. You may need to uninstall any Solana Ledger Apps during the Wallet +migration process. + +--- + +### Migration Tool + +Your public key will change on Solana, but the private key will remain the same. Note this app only +works with Chrome, Brave, or other Chromium-based web browsers. + +- [Helium-Solana Ledger App](https://github.com/helium/app-helium-solana) now available from Ledger + Live (ensure Developer Mode is enabled) +- [Solana Ledger App](https://support.ledger.com/article/360016265659-zd) using Ledger Live + +:::note Close Ledger Live + +**Before starting these steps, close the Ledger Live application or the transactions will fail.** + +::: + +import { LedgerMigration } from '@theme/LedgerMigration' + + + +--- + +### Derivation Paths and your new Public Key + +The Helium Ledger App uses `ED25519` keys, similarly to Solana, but at a different derivation path. + +This means that, while seed phrases are the same, private keys are different on Solana. + +In order to get around this, when you run the migration, the migration application will ask you to +use the old derivation path to approve sending all of your Hotspots, tokens, etc. to the new +derivation path. + +More information on Derivation paths: +[Derivation Paths Explained](https://www.youtube.com/watch?v=9_9IObnJdEY) a Youtube video from +[solandy.sol](https://www.youtube.com/@Solandy) diff --git a/docs/wallets/ledger.mdx b/docs/wallets/ledger.mdx deleted file mode 100644 index 7bad8f379..000000000 --- a/docs/wallets/ledger.mdx +++ /dev/null @@ -1,336 +0,0 @@ ---- -id: ledger -sidebar_label: Ledger -slug: /wallets/ledger ---- -import useBaseUrl from "@docusaurus/useBaseUrl"; - -# Ledger Hardware Wallet - -The Helium blockchain has support for Ledger hardware wallets. When installed on -a Nano S or Nano X, the Helium ledger app allows you to: - -- view your Helium address(es) and balances -- issue a payment to one address -- submit validator transactions, including stake, transfer, and unstake - -This guide will walk through using Helium on a Ledger Nano S but is similar to -setup on the Nano X. - -:::info -Ledger CLI using experimental mode is supported at this time. Work to enable HNT in Ledger Live in addition to a CLI is ongoing. -::: - -## Installing the Helium ledger application - -- Go to Ledger Live > Settings > Experimental Features > Enable -Developer mode. - - - -- Once enabled, go to Manager and search "Helium". - -:::info -If you can't find "Helium", you may need to update your Ledger Live. -::: - -- Click Install. - - - -The Helium App has been signed by Ledger and is trusted. It is now installed on -your Ledger device! - -Start the Helium app by selecting it on the Ledger screen. The "Waiting for -commands..." prompt should be on the screen. - -## Execute Commands - -:::info -Make sure Ledger Live is closed before proceeding! The companion app -cannot run when Ledger Live is blocking the USB device. -::: - -To interact with the app on Ledger, you will need to use the CLI. Head to -[Releases in the Github repo](https://github.com/helium/helium-ledger-cli/releases) -and download the most recent release for your operating system. - -We'll use macOS for the remainder of this example. - -- Download the release for macOS -`helium-ledger-cli-x.x.x-x86_64-apple-darwin.zip` and unzip the file -- Navigate to where you downloaded the release on your computer in terminal -- Make sure your ledger is connected to your computer, then type -`./helium-ledger-cli` - -```bash -~/helium-ledger-cli-v2.0.0-x86-64-macos$ ./helium-ledger-cli -Communicating with Ledger - follow prompts on screen -helium-ledger-cli 2.0.0 -Interact with Ledger Nano S for hardware wallet management - -USAGE: - helium-ledger-cli [OPTIONS] - -FLAGS: - -h, --help Prints help information - -V, --version Prints version information - -OPTIONS: - --account Select account index to stake from [default: 0] - --emulator Enable interaction with emulator for development and testing by configuring port for - TCP connection here (typically 9999 or 40000) - -SUBCOMMANDS: - balance Get wallet information - help Prints this message or the help of the given subcommand(s) - pay Pay a given address - validator Stake a validator -``` - -## Check Balance and Receive HNT - -Type `./helium-ledger-cli balance` to see your new Ledger address and balance. - -```bash -~/helium-ledger-cli-v2.0.0-x86-64-macos$ ./helium-ledger-cli balance -Communicating with Ledger - follow prompts on screen -Ledger running Helium App v2.1.0 - -+-----------------------------------------------------+-------------+--------------+-----------------+ -| Address | Balance HNT | Data Credits | Security Tokens | -+-----------------------------------------------------+-------------+--------------+-----------------+ -| ACCOUNT_0_REDACTED | 0.00000000 | 0 | 0.00000000 | -+-----------------------------------------------------+-------------+--------------+-----------------+ -``` - -:::warning -Do not simply rely on what you see on the CLI, but verify it matches -what is displayed on the Ledger. -::: - -:::info -You may add the `--qr` option to the command to display your address in -the form of a QR code. -::: - -To receive HNT, simply provide your address in the base58 format output from the -CLI or by using the QR code. - -## Multiple Wallet Support - -Your Ledger hardware wallet can actually support many accounts per supported -coin and this is no different for HNT. To interact with a wallet other than the -default 0th account, you place a `--account N` flag before the command. So the -balance command becomes: `helium-ledger-cli --account 1 balance` - -```bash -~/helium-ledger-cli-v2.0.0-x86-64-macos$ ./helium-ledger-cli --account 1 balance -Communicating with Ledger - follow prompts on screen -Ledger running Helium App v2.1.0 - -+-----------------------------------------------------+-------------+--------------+-----------------+ -| Address | Balance HNT | Data Credits | Security Tokens | -+-----------------------------------------------------+-------------+--------------+-----------------+ -| ACCOUNT_1_REDACTED | 0.00000000 | 0 | 0.00000000 | -+-----------------------------------------------------+-------------+--------------+-----------------+ -``` - -This `--account N` prefix applies to all commands. The balance command has a -special flag, `--scan` that you can place _after_ the command. This allows you -to scan all the wallets from 0 to N. For example: -`helium-ledger-cli --account 8 balance --scan` - -```bash -~/helium-ledger-cli-v2.0.0-x86-64-macos$ ./helium-ledger-cli --account 8 balance --scan -Communicating with Ledger - follow prompts on screen -Ledger running Helium App v2.1.0 - -+-------+-----------------------------------------------------+-------------+--------------+-----------------+ -| Index | Address | Balance HNT | Data Credits | Security Tokens | -+-------+-----------------------------------------------------+-------------+--------------+-----------------+ -| 0 | ACCOUNT_0_REDACTED | 0.00000000 | 0 | 0.00000000 | -| 1 | ACCOUNT_1_REDACTED | 0.00000000 | 0 | 0.00000000 | -| 2 | ACCOUNT_2_REDACTED | 0.00000000 | 0 | 0.00000000 | -| 3 | ACCOUNT_3_REDACTED | 0.00000000 | 0 | 0.00000000 | -| 4 | ACCOUNT_4_REDACTED | 0.00000000 | 0 | 0.00000000 | -| 5 | ACCOUNT_5_REDACTED | 0.00000000 | 0 | 0.00000000 | -| 6 | ACCOUNT_6_REDACTED | 0.00000000 | 0 | 0.00000000 | -| 7 | ACCOUNT_7_REDACTED | 0.00000000 | 0 | 0.00000000 | -+-------+-----------------------------------------------------+-------------+--------------+-----------------+ -``` - -:::info -Up to 255 wallets may be used on the Ledger, but the `--scan` command -fetches each address one-by-one; it will take quite a long time to get all 255 -addresses. - -While this convenience feature exists, **double check the address using the -screen of the Ledger** (ie: call the specific `--account N balance` without the -`--scan` option) before sending any assets. A nefarious CLI application could -provide fake addresses. -::: - -## Supported Transactions - -We will document an example `pay` transactions here, but the documents may lag -changes in the app. It's good to get familiar with the built-in documentation of -the CLI. At the top-level, you can do `./helium-ledger-cli --help` to get an -understanding of what transactions might be available. - -At time of writing, you'll see the following "subcommands" are available: - -- **balance**: get wallet information -- **pay**: pay a given address -- **validator**: stake a validator - -To understand how to use a particular command, simply call the command with the -addition of the `--help` flag. For example: `./helium-ledger-cli --help` - -```bash -~/helium-ledger-cli-v2.0.0-x86-64-macos$ ./helium-ledger-cli pay --help -Communicating with Ledger - follow prompts on screen -helium-ledger-cli-pay 2.0.0 -Pay a given address - -USAGE: - helium-ledger-cli pay [OPTIONS]
- -FLAGS: - -h, --help Prints help information - -V, --version Prints version information - -OPTIONS: - --fee Manually set the DC fee to pay for the transaction - --nonce Manually set the nonce for the transaction - -ARGS: -
Address to send the tokens to - Amount of HNT to send -``` - -The `USAGE` example shows you what the command should look like and the `ARGS` -are documented at the bottom. Always refer to the built-in help menu over these -docs. - -Even if you rely on the `--help` menu from here on out, the `pay` command in -this guide will be good practice for using the Ledger and making sure you -understand the security model. - -## Sending HNT - -1. On the CLI, type `./helium-ledger-cli pay
` to pay in HNT. -Press `return`. -2. On the Ledger, follow the prompts and confirm the transaction. -3. The CLI should show a confirmation of the transaction. - -```bash -$ ./helium-ledger-cli pay PAYEE_ACCOUNT 0.1 -Communicating with Ledger - follow prompts on screen -Ledger running Helium App v2.1.0 - -Creating the following transaction: -+-----------------------------------------------------+----------------+-------+--------+ -| Payee | Pay Amount HNT | Nonce | DC Fee | -+-----------------------------------------------------+----------------+-------+--------+ -| PAYEE_ACCOUNT | 0.10000000 | 6 | 35000 | -+-----------------------------------------------------+----------------+-------+--------+ -WARNING: do not use this output as the source of truth. Instead, rely on the Ledger Display -``` - -:::warning -Use the screen of the Ledger to confirm everything you do. The CLI -app could be nefarious (maybe you downloaded the wrong one, maybe somebody -change the program on your computer, etc). The Ledger on the other hand will -only load applications signed by Ledger, so your security relies on you -verifying the transaction details on the screen. - -To be clear, do not compare the output to the output from the CLI shown above -(the nefarious app might be showing you the fake address), but instead from your -original source. -::: - -Verify the parameters of the transcation on the screen. Addresses are long and -need to be scrolled (hold the right or left button only). Once you are satisfied -with the field, click both buttons to confirm: - - - -Once you click the "Sign Transaction?" confirmation, the transaction will be -signed by the Ledger and submitted to the blockchain by the CLI application: - -```bash -Successfully submitted transaction to API: -+---------+---------------------------------------------+ -| Network | Hash | -+---------+---------------------------------------------+ -| mainnet | HASH | -+---------+---------------------------------------------+ -To check on transaction status, monitor the following URL: - https://api.helium.io/v1/pending_transactions/HASH -``` - -Use the link displayed to check on your transaction status. - -## Common Issues - -### Can't download the zip file because it is untrusted. - -1. In the downloads bar of your browser, click the caret and select `Keep`. - - - -### Running commands in terminal does not work. MacOS users may need to update their security permissions. - -1. Go to System Preferences > Security & Privacy -2. Allow App downloaded from App Store and Identified Developers -3. You may need to click the lock icon and give the CLI permissions -4. Run the command in CLI again - -### Failed opening hid device - -If you see this error `error: hid error: Failed opening hid device`, close -Ledger Live software and run a command again in the CLI. - -### Unable to access memory outside buffer bounds - -If on Ledger Live you see this error, unplug the ledger from your computer and -plug it in again. - - - -## Security Model - -The attack surface for using the Helium wallet app on a Ledger comprises -the Helium app itself, the system firmware running on the Ledger Hardware Wallet, -the computer that the Ledger Hardware Wallet is connected to, and possession/control -of the device. For our purposes, the app only needs to ensure its own correctness -and protect the user from the computer that the Ledger Hardware Wallet is connected -to. Other attack surfaces are beyond our control; we assume that the user physically -controls the device, is not running malicious/buggy software on the device, and -follows proper security protocols. The goal of the Helium app is to achieve security -given these assumptions. - -The main attack vector that we are concerned with, then, is a computer running -malicious software. This software may imitate programs like `helium-ledger-cli` -in such a way that the user cannot tell the difference, but secretly act -maliciously. Specifically, the computer can do the following: - -1. Lie to the user about which actions it is performing. - -Example: the user runs `./helium-ledger-cli balance` to display their public -key to so that they may receive payment; yet a hard-coded address is -displayed - -2. Lie to the user about who the recipient is. - -Example: the user runs `./helium-ledger-cli pay IntendedAddress amount`, yet -the program again uses a hard-coded address - -To combat these attacks, the app makes use of the embedded display on the Nano -S. Data sent to/from the Ledger Hardware Wallet is displayed on the screen so -the user can verify that the computer is not lying about what it sent or received. -In the interest of user-friendliness, we would like to display as little information -as possible, but each omission brings with it the risk of introducing a -vulnerability. Therefore, the app displays all data by default, and omits data -only after subjecting the omission to extreme scrutiny. diff --git a/docs/wallets/third-party-wallets.mdx b/docs/wallets/third-party-wallets.mdx new file mode 100644 index 000000000..2feeb7ba7 --- /dev/null +++ b/docs/wallets/third-party-wallets.mdx @@ -0,0 +1,104 @@ +--- +id: third-party-wallets +title: Third-Party Wallets +pagination_label: Third-Party Wallets +sidebar_label: Third-Party Wallets +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /wallets/third-party-wallets +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' +import { Tweet } from 'mdx-embed' + +Helium operates on the Solana blockchain, which allows any Solana-compatible wallet to be used with +your account. + +- Certain Hotspot actions are not universally supported. Special tooling in the Helium Wallet App + and Maker apps enables these functions: + - Claiming Hotspot rewards. + - Asserting or updating location + - Antenna setup + - Onboarding new Hotspots. + +## Solana Ecosystem Wallets + +Several browser and mobile app based wallets support Solana. Find the right one for you on the +[Solana Documentation](https://solana.com/learn/what-is-a-wallet). + +For advanced users or developers, Command Line Interface (CLI) wallets may be more appropriate. + +- [Solana CLI](https://docs.solanalabs.com/cli/) +- [Helium CLI](/wallets/cli-wallet) + +## Importing Helium Accounts into Solana Wallets + +In order to bring a Helium account from the Helium Wallet App into another Solana wallet, the +'Private Key' for the account must be used. Importing accounts with the 12 or 24-word seed phrase +will not result in your tokens appearing in the other wallet app. + +To be technical about it, the private key embeds the specific derivation path used by the Helium +Wallet App (`44'/904'/n'/0'`). Otherwise, using the seed phrase, the Solana wallet app will attempt +to resolve the account at a default path of `44'/501'/n'/0'` or `44'/501'/n'/0'/0'`. + +### Get Your Account's Private Key + +From within the Helium Wallet App, select "Reveal Private Key" from the settings menu. + +
+ +
This setting is accessible from the Helium Wallet App.
+
+
+ +From within the private key view, the key can be copied before pasting it into the new Solana wallet +app. + +
+ +
Tapping 'Reveal Private Key' will allow copying to clipboard.
+
+ +
+ +Copy the private key before switching to the Solana wallet that you wish to import your account +into. + +### Import the Private Key into a Solana Wallet + +For this walkthrough, we'll demonstrate importing a private key into +[Phantom](https://phantom.app/). In Phantom, first make a regular Solana wallet account. Then add a +new account from the 'Manage Accounts' menu in the settings screen. + +
+ +
Add your Helium account using "Import Private Key".
+
+
+ +Success! Your Helium tokens and Hotspots should now be visible within this other wallet – all backed +by the Solana blockchain. + +
+ +
Tokens and Hotspot NFTs are now accessible from within Phantom.
+
+ +## Video Walkthrough + + diff --git a/docs/wallets/wallet-seed-phrase.mdx b/docs/wallets/wallet-seed-phrase.mdx new file mode 100644 index 000000000..84fadc95a --- /dev/null +++ b/docs/wallets/wallet-seed-phrase.mdx @@ -0,0 +1,71 @@ +--- +id: wallet-seed-phrase +title: Wallet Seed Phrase +pagination_label: Wallet Seed Phrase +sidebar_label: Wallet Seed Phrase +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png +slug: /wallets/wallet-seed-phrase +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +# Helium Wallet Seed Phrase + +When creating a Helium account, users are prompted to write down the 24-word seed phrase. This +mnemonic phrase is generated from a +[list](https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt) of 2048 specifically +selected words and can be used to recover the private key of the account. The seed phrase should +never be shared. + +## Seed Phrase Security + +:::caution Lose the seed phrase, lose it all. + +The seed phrase words can never be recovered if they are lost. They are the sole key to accessing an +account, the tokens and NFTs it contains, and all access to associated Hotspots and their rewards. + +::: + +:::note Remember these important things. + +1. Write down and keep seed phrases safe, do it now. +1. Never give seed phrase words to anyone who cannot be trusted with full control of your Hotspots + and token balances. +1. Do not enter seed phrase words in any app or website you don't fully trust. + +::: + +Back up a seed phrase by writing down the words in their exact order and appropriately securing +them. As an even more robust solution, some experienced crypto users engrave their seed phrases on +[titanium plates](https://www.amazon.com/s?k=titanium+seed+phrase+plate). + +Storing seed phrases on cloud storage providers like Google Drive or Dropbox is **not** recommended. +When these services are compromised, seed phrases are among the first things that hackers look for. + +No one can recover a lost, forgotten, or misplaced seed phrase. Offers to do so should be ignored. + +When entering the seed phrase make sure you: + +1. Enter them in the right order. +1. Get the spelling correct. Check the words from this list for correct spelling: + https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt +1. Watch out for similar-sounding word errors, like 'car' vs 'can' or 'blub' vs 'bulk'. See + [Commonly Misspelled Recovery Seed Words](https://trezor.io/support/a/commonly-misspelled-recovery-seed-words), + which lists common mistakes. + +## 12 vs 24-Word Seed Phrases + +While seed phrases can come in a few different lengths, 12 and 24-word will be most familiar for +Helium users. Most early accounts leverage a 12-word seed phrase. Accounts created with the +[Helium Wallet App](/wallets/helium-wallet-app) are generated with 24-word seed phrases. The Helium +Wallet app supports both formats. + +With 128 bits of entropy, a 12-word seed phrase has 3.4 × 1038 possible combinations. A +24-word seed phrase has 256 bits of entropy, resulting in approximately 1.16 × 1077 +possible combinations. Both are **highly** secure, but 24-word phrases offer the best protection. + +| Phrase Length | Possible Combinations | +| :------------ | :------------------------------------------------------------------------------------------------------ | +| 12 Words | 340,282,366,920,938,463,463,374,607,431,768,211,456 | +| 24 Words | 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936 | diff --git a/docs/wallets/wallets.mdx b/docs/wallets/wallets.mdx index f3da8f529..0fe392456 100644 --- a/docs/wallets/wallets.mdx +++ b/docs/wallets/wallets.mdx @@ -1,53 +1,72 @@ --- id: wallets -hide_title: true -sidebar_label: Overview +title: Wallets +pagination_label: Wallets +sidebar_label: Introduction +description: Helium Documentation +image: https://docs.helium.com/img/link-image.png slug: /wallets --- -import useBaseUrl from "@docusaurus/useBaseUrl"; +import useBaseUrl from '@docusaurus/useBaseUrl' - + -# Wallets +As a blockchain-powered network, Helium uses on-chain +[accounts](https://docs.solana.com/developing/programming-model/accounts) to protect Hotspots and +Tokens. An account is an abstraction for a cryptographic key which consists of two parts — a public +key and a private key. This approach of having two keys is known as +[public key cryptography](https://www.blockchain-council.org/blockchain/how-does-blockchain-use-public-key-cryptography) +which is a widely used cryptographic system in blockchains. Users new to web3 are likely accustomed +to usernames and passwords as authentication methods. Web3 projects such as Helium replace +traditional logins with private and public keys. -In blockchain projects, various wallet applications exist to help users manage -their own private keys, enabling them to sign transactions and transfer assets. +## Diving into Crypto Wallets -For the Helium Network, a wallet maintains ownership of Hotspots themselves, the -Helium Network Tokens (HNT), and/or Data Credits (DC). +A crypto wallet operates as a custodian for the public and private cryptographic keys. Wallets +enable users to transmit, obtain, and oversee cryptocurrency ownership. These wallets can be as +varied as directories on a computer, physical paper codes, or exclusive hardware devices. A host of +apps and software solutions also present a streamlined process for wallet creation and maintenance. -Depending on your situation, one of the wallets here may be the best fit. +Helium maintains the [Helium Wallet App](/wallets/helium-wallet-app), which is specifically catered +to the needs of the Helium Network. However, as a Solana-native token, Helium is accessible through +any Solana-enabled wallet. -### Helium App +## Understanding Public and Private Keys -The Helium App wallet is by far the easiest to use. It may be downloaded for -[iOS](https://apps.apple.com/us/app/helium-hotspot/id1450463605) or -[Android](https://play.google.com/store/apps/details?id=com.helium.wallet) -phones and provides simple pairing and setup with -[Hotspots](/mine-hnt). +As the names imply, there is a distinction between the different keys that are generated when +creating a new Helium account, or any other web3 account for that matter. The distinction between +these keys is important to understand. -Generally, this wallet focuses on people who want to send or receive HNT or -manage hotspots. Other activities, such as managing end-devices and OUIs (i.e. -users of the network) are generally best suited for the command line wallet. +### Public Key -To learn more about the wallet, please visit -[our help website here](/wallets/app-wallet). +The public key is your 'calling card' on the blockchain. Anyone with it can view token balances, +Hotspots, and any associated history of these entities. The public key is the address that can be +shared. -### Command Line Interface Wallet +For purposes of security, the public key cannot be used to determine the private key. -The Helium Command Line Interface (CLI) wallet is the most flexible but it also -requires more technical knowledge. As such, it is suitable for all types of -transactions, but requires more caution on behalf of its users. +For Helium and other projects on Solana, public keys are strings of letters and numbers that look +like `dcuc8Amr83Wz27ZkQ2K9NS6r8zRpf1J6cvArEBDZDmm`. -Learn more about usage [here](/wallets/cli-wallet). Source code is -available on [Github](https://github.com/helium/helium-wallet-rs). +### Private Key -### Ledger Wallet +The private key of your account is never to be shared and should be kept safe from potential +thieves. If a private key is lost, there is no means of recovering it. If the _public_ key is lost +or forgotten, the private key can be used to determine it using the derivation path leveraged by +Helium Wallet App accounts. -The Helium Ledger Wallet is an application that runs on the Ledger Hardware -wallet. The Ledger Hardware wallet is the most secure way to send and receive -the Helium Network Token (HNT), but currently supports no other transactions. +Private keys can take several forms, though most will know them as +[12-word or 24-word seed phrases](/wallets/wallet-seed-phrase). Certain tools can also manage +private key phrases stored in a file; something like `keyfile.bin` or as a long string of letters +and numbers. -Learn more about usage [here](/wallets/ledger). Source code is -available on [Github](https://github.com/helium/helium-ledger-cli). +Private keys allow for full access to an account's contents and should be protected. These keys are +never needed to diagnose a Hotspot or verify on-chain transactions. + +:::warning Important summary: Never give away your seed phrases or private keys + +Avoid entering or sending private keys to any untrusted websites or applications. +Helium does not require these details for any reason, including support, airdrop, or redemption. + +::: diff --git a/docusaurus.config.js b/docusaurus.config.js index 923ec8f91..bceced5af 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,3 +1,12 @@ +import { themes } from 'prism-react-renderer' +import katex from 'rehype-katex' +import math from 'remark-math' +import webpack from 'webpack' +require('dotenv').config() + +const darkCodeTheme = themes.dracula +const lightCodeTheme = themes.github + module.exports = { title: 'Helium Documentation', tagline: 'Documentation for the Helium Network', @@ -8,12 +17,15 @@ module.exports = { organizationName: 'helium', // Usually your GitHub org/user name. projectName: 'docs', // Usually your repo name. themeConfig: { - hideableSidebar: true, - googleAnalytics: { - trackingID: 'UA-52432858-10', + docs: { + sidebar: { + hideable: true, + }, }, + // hideableSidebar: true, algolia: { - apiKey: 'd5ff5c42607f0141934032162dab2cc2', + appId: 'XC618T80WL', + apiKey: '7d9c9bfed6c45d91cb148ac5a365079d', indexName: 'helium', contextualSearch: false, }, @@ -23,77 +35,30 @@ module.exports = { // Hides the switch in the navbar // Useful if you want to support a single color mode - disableSwitch: true, + disableSwitch: false, // Should we use the prefers-color-scheme media-query, // using user system preferences, instead of the hardcoded defaultMode - respectPrefersColorScheme: false, - }, - announcementBar: { - id: 'join_discord', - content: - 'Console updates has arrived! Read more and get started here!', - backgroundColor: '#474DFF', - textColor: '#FFFFFF', - isCloseable: true, + respectPrefersColorScheme: true, }, navbar: { title: '', style: 'primary', logo: { alt: 'Helium Logo', - src: 'img/icons/logoblack.svg', - srcDark: 'img/logowhite.svg', + src: 'img/icons/logo_docs_black.svg', + srcDark: 'img/icons/logo_docs_white.svg', }, - items: [ - - { - to: '/use-the-network/console', - label: 'Try the New Console Today', - position: 'right', - activeBaseRegex: `docs`, - className: 'announcementnav', - }, - - - { - to: '/', - label: 'Docs', - position: 'right', - activeBaseRegex: `docs`, - }, - { - to: 'api', - label: 'API', - position: 'right', - activeBaseRegex: `api`, - }, - { - href: 'https://github.com/helium', - position: 'right', - label: 'Github', - }, - { - href: 'http://whitepaper.helium.com', - label: 'Whitepaper (2018)', - position: 'right', - }, - - { - href: 'https://explorer.helium.com', - label: 'Explorer', - position: 'right', - }, - { - href: 'https://network.helium.com/coverage', - label: 'Coverage Map', - position: 'right', - }, - ], + items: [], }, footer: { style: 'dark', - copyright: `Copyright © ${new Date().getFullYear()} Helium Systems Inc.`, + copyright: `Copyright © ${new Date().getFullYear()} Helium`, + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + additionalLanguages: ['protobuf', 'rust', 'toml', 'bash'], }, }, presets: [ @@ -101,11 +66,16 @@ module.exports = { '@docusaurus/preset-classic', { docs: { + breadcrumbs: false, sidebarPath: require.resolve('./sidebarsDocs.js'), routeBasePath: '/', // Please change this to your repo. - editUrl: - 'https://github.com/helium/docs/edit/master', + editUrl: 'https://github.com/helium/docs/edit/master', + remarkPlugins: [math], + rehypePlugins: [katex], + }, + gtag: { + trackingID: 'G-85D2WJWZNL', }, theme: { customCss: require.resolve('./src/css/custom.css'), @@ -113,6 +83,88 @@ module.exports = { }, ], ], + stylesheets: [ + { + href: 'https://fonts.googleapis.com/css2?family=Inter:wght@300..600&display=swap', + }, + { + href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css', + type: 'text/css', + integrity: 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM', + crossorigin: 'anonymous', + }, + ], + customFields: { + MIGRATION_SERVICE_URL: 'https://migration.web.helium.io', + SOLANA_URL: 'https://solana-rpc.web.helium.io/?session-key=Pluto', + TOKENS_TO_RENT_SERVICE_URL: 'https://tokens-to-rent.web.helium.io', + EDU_EMAIL: process.env.EDU_EMAIL, + EDU_PW: process.env.EDU_PW, + EDU_API_URL: process.env.EDU_API_URL, + }, plugins: [ + function (context, options) { + return { + name: 'webpack-plugin', + // eslint-disable-next-line + configureWebpack(config, isServer, utils) { + return { + plugins: [ + new webpack.ProvidePlugin({ + process: require.resolve('process/browser'), + }), + ], + resolve: { + fallback: { + assert: false, + crypto: false, + stream: false, + http: false, + https: false, + url: false, + }, + }, + } + }, + } + }, + // uncomment and repair for multiple blogs + // [ + // '@docusaurus/plugin-content-blog', + // { + // id: 'blog', + // routeBasePath: 'blog', + // path: './blog', + // }, + // ], + [ + '@docusaurus/plugin-content-blog', + { + id: 'engineering-blog', + routeBasePath: 'devblog', + path: './devblog', + blogTitle: 'Helium Engineering Blog', + blogDescription: 'Helium Engineering Blog', + postsPerPage: 'ALL', + blogSidebarCount: 0, + authorsMapPath: 'authors.yaml', + }, + ], + [ + 'docusaurus-plugin-llms', + { + generateLLMsFullTxt: false, + generateMarkdownFiles: true, + excludeImports: true, + title: 'Helium Documentation', + description: + 'Documentation for the Helium Network — covering IoT (LoRaWAN), Mobile (5G/WiFi), tokens (HNT, DC, SOL), wallets, and network data.', + includeBlog: false, + }, + ], ], -}; + markdown: { + mermaid: true, + }, + themes: ['@docusaurus/theme-mermaid', 'docslab-docusaurus'], +} diff --git a/netlify.toml b/netlify.toml index 85b31d023..43bc23396 100644 --- a/netlify.toml +++ b/netlify.toml @@ -9,7 +9,240 @@ status = 301 force = true [[redirects]] - from = "/use-the-network/light-hotspots/guides/*" - to = "/mine-hnt/data-only-guides/:splat" + from = "/helium-tokens/*" + to = "/tokens/hnt-token" status = 301 force = true +[[redirects]] + from = "/tokens" + to = "/tokens/hnt-token" + status = 301 + force = true +[[redirects]] + from = "/wallets/ledger" + to = "/wallets/ledger-wallet" + status = 301 + force = true +[[redirects]] + from = "/wallets/app-wallet/transaction-failures/" + to = "/wallets/helium-wallet-app" + status = 301 + force = true +[[redirects]] + from = "/hotspot-makers/iot/data-only-hotspots" + to = "/iot/data-only-hotspots" + status = 301 + force = true +[[redirects]] + from = "/mine-hnt/data-only-hotspots" + to = "/iot/data-only-hotspots" + status = 301 + force = true +[[redirects]] + from = "/data-credit" + to = "/tokens/data-credit" + status = 301 + force = true +[[redirects]] + from = "/data-credit-portal" + to = "/tokens/data-credit-portal" + status = 301 + force = true +[[redirects]] + from = "/helium-tokens/hnt" + to = "/tokens/hnt-token" + status = 301 + force = true +[[redirects]] + from = "/hnt-token" + to = "/tokens/hnt-token" + status = 301 + force = true +[[redirects]] + from = "/blockchain/helium-token" + to = "/tokens/hnt-token" + status = 301 + force = true +[[redirects]] + from = "/blockchain/hnt-token" + to = "/tokens/hnt-token" + status = 301 + force = true +[[redirects]] + from = "/iot/run-a-lns" + to = "/iot/run-an-lns" + status = 301 + force = true +[[redirects]] + from = "/iot/buy-an-oui" + to = "/iot/run-an-lns/buy-an-oui" + status = 301 + force = true +[[redirects]] + from = "/iot/open-lns" + to = "/iot/lorawan-network-servers" + status = 301 + force = true +[[redirects]] + from = "/console/hosting-providers" + to = "/iot/find-a-lns-provider" + status = 301 + force = true +[[redirects]] + from = "/find-a-lns-provider" + to = "/iot/find-a-lns-provider" + status = 301 + force = true +[[redirects]] + from = "/solana/migration/wallet-user" + to = "/wallets/l1-migrate" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-mobile" + to = "/mobile/helium-plus-mobile" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-aruba" + to = "/mobile/helium-plus-aruba" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-fortinet" + to = "/mobile/helium-plus-fortinet" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-juniper-mist" + to = "/mobile/helium-plus-juniper-mist" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-meraki" + to = "/mobile/helium-plus-meraki" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-mikrotik" + to = "/mobile/helium-plus-mikrotik" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-ruckus" + to = "/mobile/helium-plus-ruckus" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-ubiquiti" + to = "/mobile/helium-plus-ubiquiti" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-generic" + to = "/mobile/helium-plus-generic" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-onboarding" + to = "/mobile/helium-plus-onboarding" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-radsecproxy" + to = "/mobile/helium-plus-radsecproxy" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-cambium-cnmaestro" + to = "/mobile/helium-plus-cambium-cnmaestro" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-Cisco-WLC-9800" + to = "/mobile/helium-plus-Cisco-WLC-9800" + status = 301 + force = true +[[redirects]] + from = "/mobile/data-only-Cisco-WLC-5520" + to = "/mobile/helium-plus-Cisco-WLC-5520" + status = 301 + force = true +[[redirects]] + from = "/iot/coverage-mapping" + to = "/network-iot" + status = 301 + force = true +[[redirects]] + from = "/api/blockchain/introduction/" + to = "/network-data/legacy-blockchain-data" + status = 301 + force = true +[[redirects]] + from = "/hotspot-makers/" + to = "/network-iot/hotspots-iot/data-only-hotspots" + status = 301 + force = true +[[redirects]] + from = "/troubleshooting/network-troubleshooting/" + to = "https://hardware.hellohelium.com/" + status = 301 + force = true +[[redirects]] + from = "/troubleshooting/replace-sd-card/" + to = "https://hardware.hellohelium.com/" + status = 301 + force = true +[[redirects]] + from = "/iot/denylist" + to = "/network-iot" + status = 301 + force = true +[[redirects]] + from = "/console/integrations/json-schema" + to = "/network-iot/lorawan-network-servers" + status = 301 + force = true +[[redirects]] + from = "/tokens/mobile-token/" + to = "/tokens/hnt-token" + status = 301 + force = true +[[redirects]] + from = "/wallets/app-wallet/transfer-hotspot/" + to = "/wallets/helium-wallet-app" + status = 301 + force = true +[[redirects]] + from = "/devblog/*" + to = "/home" + status = 301 + force = true +[[redirects]] + from = "/iot/lorawan-region-plans" + to = "/network-iot" + status = 301 + force = true +[[redirects]] + from = "/blockchain/mining/" + to = "/tokens/hnt-token" + status = 301 + force = true +[[redirects]] + from = "/iot/lorawan-frequency-plans" + to = "/network-iot" + status = 301 + force = true +[[redirects]] + from = "/console" + to = "/network-iot/lorawan-network-servers" + status = 301 + force = true +[[redirects]] + from = "/faq/helium-network/" + to = "/home" + status = 301 + force = true +[build.environment] + YARN_VERSION = "1.22.21" + NODE_VERSION = "20.19.5" \ No newline at end of file diff --git a/package.json b/package.json index 4466e093e..2f9b3c7a9 100644 --- a/package.json +++ b/package.json @@ -11,13 +11,46 @@ "serve": "docusaurus serve" }, "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/preset-classic": "2.0.0-beta.0", - "@mdx-js/react": "^1.5.8", - "clsx": "^1.1.1", - "react": "^16.8.4", - "react-dom": "^16.8.4", - "yarn": "^1.22.10" + "@chirpstack/chirpstack-api-grpc-web": "^4.16.2", + "@clockwork-xyz/sdk": "^0.3.0", + "@coral-xyz/anchor": "^0.27.0", + "@docusaurus/core": "^3.9.2", + "@docusaurus/plugin-google-gtag": "^3.9.2", + "@docusaurus/preset-classic": "^3.9.2", + "@docusaurus/theme-mermaid": "^3.9.2", + "@helium/account-fetch-cache": "^0.6.31", + "@helium/account-fetch-cache-hooks": "^0.6.31", + "@helium/address": "^4.8.1", + "@helium/data-credits-sdk": "^0.6.31", + "@helium/fanout-sdk": "^0.6.31", + "@helium/helium-react-hooks": "^0.6.31", + "@helium/idls": "^0.6.31", + "@helium/spl-utils": "^0.6.31", + "@mdx-js/react": "^3.0.0", + "@metaplex-foundation/mpl-token-metadata": "^2.8.4", + "@pythnetwork/price-service-client": "^1.9.0", + "@solana/spl-account-compression": "^0.1.7", + "@solana/spl-token": "^0.3.7", + "@solana/wallet-adapter-ledger": "^0.9.29", + "@solana/wallet-adapter-phantom": "^0.9.28", + "@solana/wallet-adapter-react": "^0.15.39", + "@solana/wallet-adapter-react-ui": "^0.9.39", + "@solana/wallet-adapter-solflare": "^0.6.32", + "@solana/web3.js": "^1.98.4", + "axios": "^1.13.5", + "docslab-docusaurus": "^0.2.10", + "docusaurus-plugin-llms": "^0.3.0", + "mdx-embed": "^1.1.2", + "prism-react-renderer": "^2.3.1", + "process": "^0.11.10", + "react": "^19.2.4", + "react-async-hook": "^4.0.0", + "react-dom": "^19.2.4", + "react-icons": "^5.4.0", + "react-table": "^7.8.0", + "rehype-katex": "^7.0.1", + "remark-math": "6.0.0", + "yarn": "^1.22.21" }, "browserslist": { "production": [ @@ -30,5 +63,11 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "engines": { + "node": ">=20.0" + }, + "devDependencies": { + "dotenv": "^17.2.4" } } diff --git a/sidebarsDocs.js b/sidebarsDocs.js index 67d8978e1..6abed44ae 100644 --- a/sidebarsDocs.js +++ b/sidebarsDocs.js @@ -1,1242 +1,145 @@ module.exports = { - docs: [ - 'home', + home: [ + 'home/home', { type: 'category', - label: 'Blockchain', + label: 'Mobile Network', + link: { type: 'doc', id: 'network-mobile/5g-on-helium' }, items: [ - 'blockchain/blockchain', - `blockchain/blockchain-primitives/blockchain-primitives`, - 'blockchain/mining/mining', - 'blockchain/proof-of-coverage/proof-of-coverage', - 'blockchain/packet-purchasing/packet-purchasing', - 'blockchain/consensus-protocol/consensus-protocol', - 'blockchain/helium-token/helium-token', - 'blockchain/oracles/oracles', - 'blockchain/transaction-fees/transaction-fees' - ], - collapsed: true, - }, - { - type: 'category', - label: 'Mine HNT', - items: [ - 'mine-hnt/mine-hnt', - 'mine-hnt/full-hotspots/full-hotspots', - 'mine-hnt/light-hotspots', - 'mine-hnt/data-only-hotspots', - 'mine-hnt/validators/validators', - 'mine-hnt/maker-apps' + { + type: 'category', + label: 'Convert WiFi Networks', + collapsed: false, + link: { type: 'doc', id: 'network-mobile/helium-plus-mobile' }, + items: [ + { + type: 'doc', + id: 'network-mobile/helium-plus-mobile', + label: 'Introduction', + }, + 'network-mobile/helium-plus-guides/helium-plus-onboarding', + 'network-mobile/helium-plus-guides/helium-plus-radsecproxy', + 'network-mobile/helium-plus-guides/helium-plus-aruba', + 'network-mobile/helium-plus-guides/helium-plus-aruba-central', + 'network-mobile/helium-plus-guides/helium-plus-cambium-cnmaestro', + 'network-mobile/helium-plus-guides/helium-plus-fortinet', + 'network-mobile/helium-plus-guides/helium-plus-juniper-mist', + 'network-mobile/helium-plus-guides/helium-plus-meraki', + 'network-mobile/helium-plus-guides/helium-plus-Cisco-WLC-9800', + 'network-mobile/helium-plus-guides/helium-plus-Cisco-WLC-5520', + 'network-mobile/helium-plus-guides/helium-plus-mikrotik', + 'network-mobile/helium-plus-guides/helium-plus-ruckus', + 'network-mobile/helium-plus-guides/helium-plus-ubiquiti', + 'network-mobile/helium-plus-guides/helium-plus-generic', + 'network-mobile/helium-plus-security-faq', + ], + }, + ], + }, + { + type: 'category', + label: 'IoT Network', + link: { type: 'doc', id: 'network-iot/lorawan-network-servers/lorawan-network-servers' }, + items: [ + { + type: 'category', + label: 'Learn LoRaWAN', + collapsed: true, + items: [ + 'network-iot/learn/understanding-lorawan', + 'network-iot/learn/build-a-device', + ], + }, + 'network-iot/lorawan-network-servers/find-a-lns-provider', + { + type: 'category', + label: 'Run Your Own LNS', + link: { type: 'doc', id: 'network-iot/run-an-lns/run-an-lns' }, + items: [ + 'network-iot/run-an-lns/buy-an-oui', + { + type: 'category', + label: 'Fund an Organizationally Unique Identifier', + link: { type: 'doc', id: 'network-iot/run-an-lns/fund-an-oui' }, + items: ['tokens/data-credit-portal', 'network-iot/run-an-lns/fund-an-oui-using-hnt'], + }, + { + type: 'category', + label: 'Configure ChirpStack', + link: { type: 'doc', id: 'network-iot/run-an-lns/configure-chirpstack' }, + items: ['network-iot/run-an-lns/docker-compose', 'network-iot/run-an-lns/kubernetes'], + }, + 'network-iot/run-an-lns/configure-routing-rules', + 'network-iot/run-an-lns/chirpstack-add-device', + 'network-iot/run-an-lns/chirpstack-add-device-grpc', + 'network-iot/run-an-lns/advanced-configuration', + 'network-iot/run-an-lns/common-issues', + ], + }, + 'network-iot/lorawan-roaming', + + { + type: 'category', + label: 'Data-Only Hotspots', + link: { type: 'doc', id: 'network-iot/hotspots-iot/data-only-hotspots' }, + items: [ + 'network-iot/hotspots-iot/data-only-hotspots', + 'network-iot/hotspots-iot/data-only-hotspots-onboarding', + 'network-iot/hotspots-iot/data-only/balena-data-only-hotspot', + 'network-iot/hotspots-iot/data-only/dragino-data-only-hotspot', + 'network-iot/hotspots-iot/data-only/kerlink-data-only-hotspot', + 'network-iot/hotspots-iot/data-only/rak-concentrators', + ], + }, ], collapsed: true, }, { type: 'category', - label: 'LoRaWAN on Helium', - items: [ - 'lorawan-on-helium/lorawan-on-helium', - 'lorawan-on-helium/lorawan-roaming/lorawan-roaming-on-helium', - 'lorawan-on-helium/frequency-plans/frequency-plans' - ], + label: 'Tokens', + link: { type: 'doc', id: 'tokens/hnt-token' }, + items: ['tokens/hnt-token', 'tokens/data-credit', 'tokens/sol-token'], collapsed: true, }, { type: 'category', - label: 'Use The Network', + label: 'Wallets', + link: { type: 'doc', id: 'wallets/wallets' }, items: [ - 'use-the-network/use-the-network', - 'use-the-network/devices/devices', - 'use-the-network/console/console', - 'use-the-network/run-a-network-server/run-a-network-server', - 'use-the-network/setup-a-packet-forwarder', - 'use-the-network/community-projects/community-projects', - 'use-the-network/coverage-mapping/coverage-mapping', - 'use-the-network/policies/policies', - + 'wallets/wallets', + 'wallets/helium-wallet-app', + 'wallets/third-party-wallets', + 'wallets/wallet-seed-phrase', + 'wallets/ledger-wallet', + 'wallets/cli-wallet', ], collapsed: true, }, { type: 'category', - label: 'HNT Wallets', - items: ['wallets/wallets', 'wallets/app-wallet/app-wallet', 'wallets/cli-wallet', 'wallets/ledger'], - collapsed: true, - }, - { - type: 'category', - label: 'Community and Governance', + label: 'Network Data', + link: { type: 'doc', id: 'network-data/network-data' }, items: [ - 'community-governance/community-governance', - 'community-governance/community-voting' - ], - collapsed: true, - }, - { - type: 'category', - label: 'Open Source', - items: ['open-source/open-source'], - collapsed: true, - }, - { - type: 'category', - label: 'FAQ', - items: ['faq/helium-network', 'faq/security', 'faq/hotspot-manufacturers', 'faq/build-on-network', 'faq/data-credits'], - collapsed: true, - }, - { - type: 'category', - label: 'Troubleshooting', - items: ['troubleshooting/hotspot-setup-troubleshooting', 'troubleshooting/replace-sd-card', 'troubleshooting/improving-poc', 'troubleshooting/network-troubleshooting', 'troubleshooting/hotspot-led','troubleshooting/understanding-witnesses'], - collapsed: true, - }, - ], - api: [ - 'api/home', - { - type: 'category', - label: 'Blockchain', - items: ['api/blockchain/introduction', 'api/blockchain/stats', 'api/blockchain/blocks', 'api/blockchain/accounts', 'api/blockchain/validators', 'api/blockchain/hotspots', 'api/blockchain/cities', 'api/blockchain/locations', 'api/blockchain/transactions', 'api/blockchain/pending-transactions', 'api/blockchain/oracle-prices', 'api/blockchain/chain-variables', 'api/blockchain/ouis', 'api/blockchain/rewards', 'api/blockchain/dc-burns', 'api/blockchain/challenges', 'api/blockchain/elections', 'api/blockchain/state-channels', 'api/blockchain/assert-locations'], - collapsed: true, - }, - 'api/console', - ], - appwallet: [ - { - type: 'link', - label: '<- Back', - href: '/wallets/app-wallet' - }, - { - type: 'category', - label: 'Helium App', - items: ['wallets/app-wallet/twelve-words', 'wallets/app-wallet/transfer-hotspot', 'wallets/app-wallet/rak-hotspot-setup', 'wallets/app-wallet/hexagons', 'wallets/app-wallet/discovery', 'wallets/app-wallet/transaction-failures', 'wallets/app-wallet/fleet-mode', 'wallets/app-wallet/deep-links-and-qr-codes'], - collapsed: false, - } - ], - console: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/console' - }, - { - type: 'category', - label: 'Console', - items: ['use-the-network/console/quickstart', 'use-the-network/console/users', 'use-the-network/console/data-credits', 'use-the-network/console/adding-devices', 'use-the-network/console/migrating-devices/migrating-devices', 'use-the-network/console/labels', 'use-the-network/console/debug', 'use-the-network/console/alerts', 'use-the-network/console/multi-packets', 'use-the-network/console/profiles', 'use-the-network/console/flows/flows', 'use-the-network/console/functions', 'use-the-network/console/integrations/integrations', 'use-the-network/console/coverage', 'use-the-network/console/console-cli', 'use-the-network/console/console-api','use-the-network/console/my-account', 'use-the-network/console/troubleshooting'], - collapsed: false, - } - ], - opensourcedocs: [ - { - type: 'link', - label: '<- Back', - href: '/open-source' - }, - { - type: 'category', - label: 'Docs', - items: ['open-source/docs/installation'], - collapsed: false, - } - ], - flows: [ - { - type: 'link', - label: '<- Console', - href: '/use-the-network/console/flows' - }, - { - type: 'category', - label: 'Flows', - items: ['use-the-network/console/flows/orientation', 'use-the-network/console/flows/actions', 'use-the-network/console/flows/flows-faq'], - collapsed: false, - }, - ], - integrations: [ - { - type: 'link', - label: '<- Console', - href: '/use-the-network/console/integrations' - }, - { - type: 'category', - label: 'Integrations', - items: ['use-the-network/console/integrations/json-schema', 'use-the-network/console/integrations/http', 'use-the-network/console/integrations/mqtt', 'use-the-network/console/integrations/azure', 'use-the-network/console/integrations/aws-iot-core', 'use-the-network/console/integrations/cargo', 'use-the-network/console/integrations/datacake', 'use-the-network/console/integrations/mydevices-cayenne', 'use-the-network/console/integrations/adafruitio', 'use-the-network/console/integrations/ubidots', 'use-the-network/console/integrations/tago', 'use-the-network/console/integrations/google-sheets', 'use-the-network/console/integrations/microshare', 'use-the-network/console/integrations/akenza'], - collapsed: false, - }, - ], - migratingdevices: [ - { - type: 'link', - label: '<- Console', - href: '/use-the-network/console/migrating-devices' - }, - { - type: 'category', - label: 'Migrating Devices', - items: ['use-the-network/console/migrating-devices/ttn-import', 'use-the-network/console/migrating-devices/ttn-manual'], - collapsed: false, - }, - ], - runanetworkserver: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/run-a-network-server' - }, - { + { type: 'category', - label: 'Run a Network Server', - items: ['use-the-network/run-a-network-server/buy-an-oui/buy-an-oui', 'use-the-network/run-a-network-server/run-console/run-console'], - collapsed: false, - }, - ], - coveragemapping: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/coverage-mapping' - }, - { - type: 'category', - label: 'Coverage Mapping', - items: ['use-the-network/coverage-mapping/mappers-quickstart', 'use-the-network/coverage-mapping/mappers-api', 'use-the-network/coverage-mapping/adeunis-mapper', 'use-the-network/coverage-mapping/mappers-roadmap'], - collapsed: false, - }, - ], - policies: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/policies' - }, - { - type: 'category', - label: 'Policies', - items: ['use-the-network/policies/privacy', 'use-the-network/policies/terms'], - collapsed: false, - }, - ], - readyToUse: [ - { - type: 'link', - label: '<- Devices', - href: '/use-the-network/devices' - }, - { - type: 'category', - label: 'Ready To Use', - items: [ - 'use-the-network/devices/ready-to-use/ready-to-use' - ], - collapsed: false, - }, - ], - development: [ - { - type: 'link', - label: '<- Devices', - href: '/use-the-network/devices' - }, - { - type: 'category', - label: 'Development', - items: [ - 'use-the-network/devices/development/development' - ], - collapsed: false, - }, - ], - devquickstart: [ - { - type: 'link', - label: '<- Devices', - href: '/use-the-network/devices' - }, - { - type: 'category', - label: 'Development Quickstart', - items: [ - 'use-the-network/devices/development/quickstart-guides' - ], - collapsed: false, - }, - ], - adafruit: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/development' - }, - { - type: 'category', - label: 'Arduino', - items: [ - 'use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95' - ], - collapsed: false, - }, - ], - arduino: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/development' - }, - { - type: 'category', - label: 'Arduino', - items: [ - 'use-the-network/devices/development/arduino/mkr-wan-1310', - 'use-the-network/devices/development/arduino/lora-vision-shield' - ], - collapsed: false, - }, - ], - embit: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/development' - }, - { - type: 'category', - label: 'Embit', - items: [ - 'use-the-network/devices/development/embit/emb-lr1280s', - 'use-the-network/devices/development/embit/emb-lrwl55' - ], - collapsed: false, - }, - ], - heltec: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/development' - }, - { - type: 'category', - label: 'Heltec', - items: [ - 'use-the-network/devices/development/heltec/cubecell-gps-6502', - 'use-the-network/devices/development/heltec/cubecell-dev-board/cubecell-dev-board', - 'use-the-network/devices/development/heltec/cubecell-dev-board-plus', - 'use-the-network/devices/development/heltec/cubecell-1-2-aa-node', - 'use-the-network/devices/development/heltec/cubecell-capsule-sensor', - 'use-the-network/devices/development/heltec/cubecell-solar-sensor', - 'use-the-network/devices/development/heltec/cubecell-module', - 'use-the-network/devices/development/heltec/cubecell-module-plus', - 'use-the-network/devices/development/heltec/wifi-lora-32-v2/wifi-lora-32-v2', - 'use-the-network/devices/development/heltec/wireless-stick', - 'use-the-network/devices/development/heltec/wireless-stick-lite', - 'use-the-network/devices/development/heltec/wireless-shell', - 'use-the-network/devices/development/heltec/lora-kit-151', - 'use-the-network/devices/development/heltec/lora-node-151', - 'use-the-network/devices/development/heltec/turtle-board' - ], - collapsed: false, - }, - ], - mcci: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/development' - }, - { - type: 'category', - label: 'MCCI', - items: [ - 'use-the-network/devices/development/mcci/catena4430', - 'use-the-network/devices/development/mcci/catena4450', - 'use-the-network/devices/development/mcci/catena4460', - 'use-the-network/devices/development/mcci/catena4470', - 'use-the-network/devices/development/mcci/catena4610', - 'use-the-network/devices/development/mcci/catena4612', - 'use-the-network/devices/development/mcci/catena4618', - 'use-the-network/devices/development/mcci/catena4618m201', - 'use-the-network/devices/development/mcci/catena4801', - 'use-the-network/devices/development/mcci/catena4802', - 'use-the-network/devices/development/mcci/model4811', - 'use-the-network/devices/development/mcci/model4821', - 'use-the-network/devices/development/mcci/model4822', - 'use-the-network/devices/development/mcci/model4823', - 'use-the-network/devices/development/mcci/model4831', - 'use-the-network/devices/development/mcci/model4832', - 'use-the-network/devices/development/mcci/model4841' - ], - collapsed: false, - }, - ], - midatronics: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/development' - }, - { - type: 'category', - label: 'Midatronics', - items: [ - 'use-the-network/devices/development/midatronics/windy-module', - 'use-the-network/devices/development/midatronics/windy-mkr', - 'use-the-network/devices/development/midatronics/sharky-module' - ], - collapsed: false, - }, - ], - multitech: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/development' - }, - { - type: 'category', - label: 'Multi-Tech', - items: [ - 'use-the-network/devices/development/multi-tech/multi-tech-xdot' - ], - collapsed: false, - }, - ], - rakwireless: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/development' - }, - { - type: 'category', - label: 'RAK Wireless', - items: [ - 'use-the-network/devices/development/rakwireless/wisblock-4631/wisblock-4631', - 'use-the-network/devices/development/rakwireless/rak7431' - ], - collapsed: false, - }, - ], - sparkfun: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/development' - }, - { - type: 'category', - label: 'Sparkfun', - items: [ - 'use-the-network/devices/development/sparkfun/pro-rf/pro-rf', - ], - collapsed: false, - }, - ], - stmicroelectronics: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/development' - }, - { - type: 'category', - label: 'STMicroelectronics', - items: [ - 'use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/st-b-l072z-lrwan1', - 'use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc1', - 'use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc2' - ], - collapsed: false, - }, - ], - abeeway: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Abeeway', - items: [ - 'use-the-network/devices/ready-to-use/abeeway/abeeway-geolocation-module', - 'use-the-network/devices/ready-to-use/abeeway/abeeway-industrial-tracker', - 'use-the-network/devices/ready-to-use/abeeway/abeeway-compact-tracker', - 'use-the-network/devices/ready-to-use/abeeway/abeeway-micro-tracker', - 'use-the-network/devices/ready-to-use/abeeway/abeeway-smart-badge' - ], - - collapsed: false, - }, - ], - adeunis: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Adeunis', - items: [ - 'use-the-network/devices/ready-to-use/adeunis/adeunis-field-test-device', - ], - - collapsed: false, - }, - ], - aquascope: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Acqua-Scope', - items: [ - 'use-the-network/devices/ready-to-use/aquascope/bvs', - 'use-the-network/devices/ready-to-use/aquascope/wwd' - ], - - collapsed: false, - }, - ], - beiselen: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Beiselen', - items: [ - 'use-the-network/devices/ready-to-use/beiselen/radar' - ], - - collapsed: false, - }, - ], - bosch: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Bosch', - items: [ - 'use-the-network/devices/ready-to-use/bosch/tps110' - ], - - collapsed: false, - }, - ], - boatofficer: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'BoatOfficer', - items: [ - 'use-the-network/devices/ready-to-use/boatofficer/boatofficerblue', - ], - - collapsed: false, - }, - ], - comtac: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Comtac', - items: [ - 'use-the-network/devices/ready-to-use/comtac/lpn-td1', - 'use-the-network/devices/ready-to-use/comtac/lpn-km', - 'use-the-network/devices/ready-to-use/comtac/lpn-tsm' - ], - - collapsed: false, - }, - ], - decentlab: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Decent Lab', - items: [ - 'use-the-network/devices/ready-to-use/decentlab/dl-iam', - 'use-the-network/devices/ready-to-use/decentlab/dl-pr26', - 'use-the-network/devices/ready-to-use/decentlab/dl-mbx', - 'use-the-network/devices/ready-to-use/decentlab/dl-5tm', - 'use-the-network/devices/ready-to-use/decentlab/dl-atm22', - 'use-the-network/devices/ready-to-use/decentlab/dl-atm41', - 'use-the-network/devices/ready-to-use/decentlab/dl-ctd10', - 'use-the-network/devices/ready-to-use/decentlab/dl-dlr2-002', - 'use-the-network/devices/ready-to-use/decentlab/dl-dlr2-003', - 'use-the-network/devices/ready-to-use/decentlab/dl-dlr2-004', - 'use-the-network/devices/ready-to-use/decentlab/dl-dlr2-005', - 'use-the-network/devices/ready-to-use/decentlab/dl-dlr2-006', - 'use-the-network/devices/ready-to-use/decentlab/dl-dlr2-008', - 'use-the-network/devices/ready-to-use/decentlab/dl-dlr2-010', - 'use-the-network/devices/ready-to-use/decentlab/dl-dlr2-012', - 'use-the-network/devices/ready-to-use/decentlab/dl-ds18', - 'use-the-network/devices/ready-to-use/decentlab/dl-dws', - 'use-the-network/devices/ready-to-use/decentlab/dl-itst', - 'use-the-network/devices/ready-to-use/decentlab/dl-kl66', - 'use-the-network/devices/ready-to-use/decentlab/dl-lid', - 'use-the-network/devices/ready-to-use/decentlab/dl-lp8p', - 'use-the-network/devices/ready-to-use/decentlab/dl-optod', - 'use-the-network/devices/ready-to-use/decentlab/dl-par', - 'use-the-network/devices/ready-to-use/decentlab/dl-pm', - 'use-the-network/devices/ready-to-use/decentlab/dl-pr21', - 'use-the-network/devices/ready-to-use/decentlab/dl-pr36', - 'use-the-network/devices/ready-to-use/decentlab/dl-pr36ctd', - 'use-the-network/devices/ready-to-use/decentlab/dl-pyr', - 'use-the-network/devices/ready-to-use/decentlab/dl-rhc', - 'use-the-network/devices/ready-to-use/decentlab/dl-sht35-001', - 'use-the-network/devices/ready-to-use/decentlab/dl-sht35-002', - 'use-the-network/devices/ready-to-use/decentlab/dl-smtp', - 'use-the-network/devices/ready-to-use/decentlab/dl-tbrg', - 'use-the-network/devices/ready-to-use/decentlab/dl-trs11', - 'use-the-network/devices/ready-to-use/decentlab/dl-trs12', - 'use-the-network/devices/ready-to-use/decentlab/dl-trs21', - 'use-the-network/devices/ready-to-use/decentlab/dl-wrm', - 'use-the-network/devices/ready-to-use/decentlab/dl-zn1', - 'use-the-network/devices/ready-to-use/decentlab/dl-zn2' - ], - - collapsed: false, - }, - ], - develiot: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Develiot', - items: [ - 'use-the-network/devices/ready-to-use/develiot/rwmr', - 'use-the-network/devices/ready-to-use/develiot/uaqms' - ], - - collapsed: false, - }, - ], - digitalmatter: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Digtal Matter', - items: [ - 'use-the-network/devices/ready-to-use/digital-matter/oyster', - 'use-the-network/devices/ready-to-use/digital-matter/yabby-edge', - 'use-the-network/devices/ready-to-use/digital-matter/digital-matter-lorawan-gps' - ], - - collapsed: false, - }, - ], - dragino: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Dragino', - items: [ - 'use-the-network/devices/ready-to-use/dragino/rs485-ln', - 'use-the-network/devices/ready-to-use/dragino/rs485-bl', - 'use-the-network/devices/ready-to-use/dragino/lsn50v2-s31', - 'use-the-network/devices/ready-to-use/dragino/lsn50v2-d20', - 'use-the-network/devices/ready-to-use/dragino/ldds20', - 'use-the-network/devices/ready-to-use/dragino/ldds75', - 'use-the-network/devices/ready-to-use/dragino/lbt1', - 'use-the-network/devices/ready-to-use/dragino/lse01', - 'use-the-network/devices/ready-to-use/dragino/lwl01', - 'use-the-network/devices/ready-to-use/dragino/lds01', - 'use-the-network/devices/ready-to-use/dragino/lds02', - 'use-the-network/devices/ready-to-use/dragino/lgt92', - 'use-the-network/devices/ready-to-use/dragino/lt22222-l', - 'use-the-network/devices/ready-to-use/dragino/lt33222-l', - 'use-the-network/devices/ready-to-use/dragino/lht65', - 'use-the-network/devices/ready-to-use/dragino/lsn50-v2' - ], - - collapsed: false, - }, - ], - enthutech: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Enthutech', - items: [ - 'use-the-network/devices/ready-to-use/enthutech/rs485-ln', - 'use-the-network/devices/ready-to-use/enthutech/rs485-bl', - 'use-the-network/devices/ready-to-use/enthutech/lsn50v2-s31', - 'use-the-network/devices/ready-to-use/enthutech/lsn50v2-d20', - 'use-the-network/devices/ready-to-use/enthutech/ldss20', - 'use-the-network/devices/ready-to-use/enthutech/ldds75', - 'use-the-network/devices/ready-to-use/enthutech/lbt1', - 'use-the-network/devices/ready-to-use/enthutech/lse01', - 'use-the-network/devices/ready-to-use/enthutech/lwl01', - 'use-the-network/devices/ready-to-use/enthutech/lds01' - ], - - collapsed: false, - }, - ], - imst: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'IMST', - items: [ - 'use-the-network/devices/ready-to-use/imst/range-extender', - 'use-the-network/devices/ready-to-use/imst/ioke868' - ], - - collapsed: false, - }, - ], - iotsens: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'IoTsens', - items: [ - 'use-the-network/devices/ready-to-use/iotsens/sound-device', - 'use-the-network/devices/ready-to-use/iotsens/airquality-device', - 'use-the-network/devices/ready-to-use/iotsens/lidar-device' - ], - - collapsed: false, - }, - ], - izinto: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'izinto', - items: [ - 'use-the-network/devices/ready-to-use/izinto/izi-io-4840' - ], - - collapsed: false, - }, - ], - laird: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Laird', - items: [ - 'use-the-network/devices/ready-to-use/laird/rs1xx-temp-rh-sensor', - 'use-the-network/devices/ready-to-use/laird/rs1xx-ext-temp-1w-sensor', - 'use-the-network/devices/ready-to-use/laird/rs1xx-ext-multi-sensor', - 'use-the-network/devices/ready-to-use/laird/rs1xx-ext-temp-rtd-sensor' - ], - - collapsed: false, - }, - ], - mcf88: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'mcf88', - items: [ - 'use-the-network/devices/ready-to-use/mcf88/mcf-lw06davk', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lw06davpk', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lw12co2', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lw12met', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lw12plg', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lw12ter', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lw12terwp', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lw12terpm', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lw12voc', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lw13io', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lw13mio', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lwws00', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lwws01', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lwws02', - 'use-the-network/devices/ready-to-use/mcf88/mcf-lwws03' - ], - - collapsed: false, - }, - ], - mclimate: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'MClimate', - items: [ - 'use-the-network/devices/ready-to-use/mclimate/vicki', - 'use-the-network/devices/ready-to-use/mclimate/t-valve', - 'use-the-network/devices/ready-to-use/mclimate/flood-sensor', - 'use-the-network/devices/ready-to-use/mclimate/ht-sensor', - 'use-the-network/devices/ready-to-use/mclimate/aqi-sensor' - ], - - collapsed: false, - }, - ], - milesightiot: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Milesight', - items: [ - 'use-the-network/devices/ready-to-use/milesight-iot/am107', - 'use-the-network/devices/ready-to-use/milesight-iot/em300-th', - 'use-the-network/devices/ready-to-use/milesight-iot/em500-co2', - 'use-the-network/devices/ready-to-use/milesight-iot/em500-udl' - ], - - collapsed: false, - }, - ], - moko: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Moko', - items: [ - 'use-the-network/devices/ready-to-use/moko/lw001-bg', - 'use-the-network/devices/ready-to-use/moko/lw003-b', - 'use-the-network/devices/ready-to-use/moko/lw004', - 'use-the-network/devices/ready-to-use/moko/lw005-mp' - ], - - collapsed: false, - }, - ], - netvox: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Netvox', - items: [ - 'use-the-network/devices/ready-to-use/netvox/r311a', - 'use-the-network/devices/ready-to-use/netvox/r311b', - 'use-the-network/devices/ready-to-use/netvox/r311g', - 'use-the-network/devices/ready-to-use/netvox/r311w', - 'use-the-network/devices/ready-to-use/netvox/r312', - 'use-the-network/devices/ready-to-use/netvox/r312a', - 'use-the-network/devices/ready-to-use/netvox/r711', - 'use-the-network/devices/ready-to-use/netvox/r718a', - 'use-the-network/devices/ready-to-use/netvox/r718ab', - 'use-the-network/devices/ready-to-use/netvox/r718b', - 'use-the-network/devices/ready-to-use/netvox/r718ck', - 'use-the-network/devices/ready-to-use/netvox/r718ct', - 'use-the-network/devices/ready-to-use/netvox/r718e', - 'use-the-network/devices/ready-to-use/netvox/r718f', - 'use-the-network/devices/ready-to-use/netvox/r718n1', - 'use-the-network/devices/ready-to-use/netvox/r718n3', - 'use-the-network/devices/ready-to-use/netvox/r718t', - 'use-the-network/devices/ready-to-use/netvox/r720a', - 'use-the-network/devices/ready-to-use/netvox/r72615', - 'use-the-network/devices/ready-to-use/netvox/r72615a', - 'use-the-network/devices/ready-to-use/netvox/ra0715', - 'use-the-network/devices/ready-to-use/netvox/ra0715y', - 'use-the-network/devices/ready-to-use/netvox/rb02i', - 'use-the-network/devices/ready-to-use/netvox/rb11e' - ], - - collapsed: false, - }, - ], - nwave: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Nwave', - items: [ - 'use-the-network/devices/ready-to-use/nwave/nps310sm' - ], - - collapsed: false, - }, - ], - seeedstudiortu: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Seeed Studio', - items: [ - 'use-the-network/devices/ready-to-use/seeed-studio/sensecap-soil-th', - 'use-the-network/devices/ready-to-use/seeed-studio/sensecap-air-th', - 'use-the-network/devices/ready-to-use/seeed-studio/sensecap-light', - 'use-the-network/devices/ready-to-use/seeed-studio/sensecap-co2', - 'use-the-network/devices/ready-to-use/seeed-studio/sensecap-pressure', - ], - - collapsed: false, - }, - ], - seeedstudiodev: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/development' - }, - { - type: 'category', - label: 'Seeed Studio', - items: [ - 'use-the-network/devices/development/seeed-studio/loramodule-e5', - 'use-the-network/devices/development/seeed-studio/loramodule-e5-devkit', - 'use-the-network/devices/development/seeed-studio/loramodule-e5-mini', - 'use-the-network/devices/development/seeed-studio/loramodule-e5-grove' - ], - - collapsed: false, - }, - ], - sensedge: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Sensedge', - items: [ - 'use-the-network/devices/ready-to-use/sensedge/senstick-pro', - 'use-the-network/devices/ready-to-use/sensedge/senstick-pure' - ], - - collapsed: false, - }, - ], - tektelic: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Tektelic', - items: [ - 'use-the-network/devices/ready-to-use/tektelic/t000489x-smart-room-base', - 'use-the-network/devices/ready-to-use/tektelic/t00048xx-smart-room-pir' - ], - - collapsed: false, - }, - ], - tekzitel: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Tekzitel', - items: [ - 'use-the-network/devices/ready-to-use/tekzitel/tekzipark' - ], - - collapsed: false, - }, - ], - thethingsproducts: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'The Things Products', - items: [ - 'use-the-network/devices/ready-to-use/the-things-products/the-things-node', - 'use-the-network/devices/ready-to-use/the-things-products/the-things-uno' - ], - - collapsed: false, - }, - ], - victor: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Victor', - items: [ - 'use-the-network/devices/ready-to-use/victor/victor-trap-v4xx' - ], - - collapsed: false, - }, - ], - become_a_maker: [ - { - type: 'link', - label: '<- Full Hotspots', - href: '/mine-hnt/full-hotspots' - }, - { - type: 'category', - label: 'Become a Maker', - items: [ - 'mine-hnt/full-hotspots/become-a-maker/maker-approval-auditing', - 'mine-hnt/full-hotspots/become-a-maker/hotspot-integration-testing', - 'mine-hnt/full-hotspots/become-a-maker/basic-miner-operation', - 'mine-hnt/full-hotspots/become-a-maker/docker-integration', - 'mine-hnt/full-hotspots/become-a-maker/security-requirements', - 'mine-hnt/full-hotspots/become-a-maker/hotspot-ble-services', - 'mine-hnt/full-hotspots/become-a-maker/hotspot-wifi-configuration', - 'mine-hnt/full-hotspots/become-a-maker/burn-hnt-to-maker-wallet' - ], - collapsed: false, - }, - ], - validators: [ - { - type: 'link', - label: '<- Back', - href: '/mine-hnt/validators' - }, - { - type: 'category', - label: 'Validators', - items: [ - 'mine-hnt/validators/validators-requirements', - 'mine-hnt/validators/validators-monitoring', - 'mine-hnt/validators/validators-troubleshooting', - 'mine-hnt/validators/validators-penalties', - 'mine-hnt/validators/validators-faqs-resources-providers', - ], - collapsed: false, - }, - ], - validators_testnet: [ - { - type: 'link', - label: '<- Back', - href: '/mine-hnt/validators' - }, - { - type: 'category', - label: 'Validators (Testnet)', - items: [ - 'mine-hnt/validators/testnet/validators-testnet-expectations', - 'mine-hnt/validators/testnet/validators-testnet-design', - 'mine-hnt/validators/testnet/validators-testnet-deployment-guide', - 'mine-hnt/validators/testnet/validators-testnet-wallet', - 'mine-hnt/validators/testnet/validators-testnet-test-cases', + label: 'API Providers', + link: { type: 'doc', id: 'network-data/api-providers' }, + items: ['network-data/entity-api'], + }, + 'network-data/oracle-data', + { + type: 'category', + label: 'Solana Data', + link: { type: 'doc', id: 'network-data/solana-data' }, + items: [ + 'network-data/solana/rewardable-entities', + 'network-data/solana/compression-nfts', + 'network-data/solana/helium-program-library', + ], + }, + 'network-data/legacy-blockchain-data', ], - collapsed: false, - }, - ], - validators_mainnet: [ - { - type: 'link', - label: '<- Back', - href: '/mine-hnt/validators' - }, - { - type: 'category', - label: 'Validators (Mainnet)', - items: [ - 'mine-hnt/validators/mainnet/validators-mainnet-deployment-guide', - 'mine-hnt/validators/mainnet/validators-mainnet-release', - 'mine-hnt/validators/mainnet/validators-mainnet-wallet', - ], - collapsed: false, - }, - ], - lightHotspots: [ - { - type: 'link', - label: '<- Light Hotspot', - href: '/mine-hnt/light-hotspots' - }, - { - type: 'category', - label: 'Data Only Hotspot Guides', - items: ['mine-hnt/data-only-guides/dragino', 'mine-hnt/data-only-guides/dragino-pg1301', 'mine-hnt/data-only-guides/kerlink', 'mine-hnt/data-only-guides/rak-concentrators', 'mine-hnt/data-only-guides/balena-data-only-hotspot'], - - collapsed: false, - }, - ], - bL072zLrwan1: [ - { - type: 'link', - label: '<- ST B-L072Z-LRWAN1', - href: '/use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1' - }, - { - type: 'category', - label: 'Firmware', - items: ['use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/arduino','use-the-network/devices/development/stmicroelectronics/st-b-l072z-lrwan1/platformio'], - collapsed: false, - }, - ], - sparkfunprorf: [ - { - type: 'link', - label: '<- Sparkfun Pro RF', - href: '/use-the-network/devices/development/sparkfun/pro-rf' - }, - { - type: 'category', - label: 'Firmware', - items: ['use-the-network/devices/development/sparkfun/pro-rf/arduino'], - collapsed: false, - }, - ], - adafruitfeatherm0rfm95: [ - { - type: 'link', - label: '<- Adafruit Feather M0 RFM95', - href: '/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95' - }, - { - type: 'category', - label: 'Firmware', - items: ['use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/arduino'], - collapsed: false, - }, - { - type: 'category', - label: 'Guides', - items: ['use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruitio'], - collapsed: false, - }, - ], - helteccubecelhtccab01: [ - { - type: 'link', - label: '<- HTCC-AB01', - href: '/use-the-network/devices/development/heltec/cubecell-dev-board' - }, - { - type: 'category', - label: 'Firmware', - items: ['use-the-network/devices/development/heltec/cubecell-dev-board/arduino', 'use-the-network/devices/development/heltec/cubecell-dev-board/platformio'], - collapsed: false, - }, - ], - rakwisblock4631: [ - { - type: 'link', - label: '<- RAK-Wireless WisBlock Starter Kit', - href: '/use-the-network/devices/development/rakwireless/wisblock-4631' - }, - { - type: 'category', - label: 'Firmware', - items: ['use-the-network/devices/development/rakwireless/wisblock-4631/arduino', 'use-the-network/devices/development/rakwireless/wisblock-4631/platformio'], - collapsed: false, - }, - ], - heltecwifilora32v2: [ - { - type: 'link', - label: '<- WiFi LoRa 32 V2', - href: '/use-the-network/devices/development/heltec/wifi-lora-32-v2' - }, - { - type: 'category', - label: 'Firmware', - items: ['use-the-network/devices/development/heltec/wifi-lora-32-v2/arduino'], - collapsed: false, + collapsed: true, }, ], - origo: [ - { - type: 'link', - label: '<- Back', - href: '/use-the-network/devices/ready-to-use' - }, - { - type: 'category', - label: 'Origo', - items: [ - 'use-the-network/devices/ready-to-use/origo/lorawan-watch', - 'use-the-network/devices/ready-to-use/origo/smart-badges' - ], - collapsed: false, - }, - ] -}; +} diff --git a/src/css/custom.css b/src/css/custom.css index 141fdd306..e8f79aa3b 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -7,7 +7,8 @@ /* You can override the default Infima variables here. */ :root { - --ifm-color-primary: #fff; + --ifm-background-color: #fff; + --ifm-color-primary: #a334fb; --ifm-color-primary-dark: #272dfe; --ifm-color-primary-darker: #171dfe; --ifm-color-primary-darkest: #0107e2; @@ -15,51 +16,78 @@ --ifm-color-primary-lighter: #777bfe; --ifm-color-primary-lightest: #a8aaff; --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); + --ifm-font-family-base: 'Inter'; + --ifm-font-color-base: #000; --ifm-toc-border-color: #ffffff; - --ifm-menu-color-active: #A334FB; - --ifm-menu-color-background-active: #FCF9FF; ---ifm-menu-color: #1C1E21; ---ifm-navbar-link-hover-color: #333; ---ifm-color-info: #A334FB; ---ifm-tabs-padding-horizontal: 20px; ---ifm-tabs-padding-vertical: 10px; - + --ifm-menu-color-active: #a334fb; + --ifm-menu-color-background-active: #f6f7fe; + --ifm-menu-color-background-hover: #f6f7fe; + --ifm-menu-color: #1c1e21; + --ifm-color-info: #a334fb; + --ifm-tabs-padding-horizontal: 20px; + --ifm-tabs-padding-vertical: 10px; + --ifm-table-stripe-background: #f6f7fe; + --docsearch-highlight-color: #a334fb; + --docsearch-logo-color: #a334fb; } - -.container { - max-width: 1100px; +html[data-theme='dark'] { + --ifm-background-color: #13162e; + --ifm-menu-color: #ffffff; + --ifm-menu-color-background-active: rgba(255, 255, 255, 0.05); + --ifm-menu-color-background-hover: rgba(255, 255, 255, 0.1); + --ifm-navbar-background-color: rgba(19, 22, 46, 0.8); + --ifm-navbar-link-color: #ffffff; + --ifm-heading-color: #ffffff; + --ifm-font-color-base: #fff; + --ifm-table-stripe-background: rgba(105, 92, 92, 0.05); + --ifm-toc-border-color: rgba(255, 255, 255, 0.1); + --ifm-hr-background-color: #eee; + + --ifm-color-emphasis-300: rgba(255, 255, 255, 0.2); /* bottom nav button borders */ + + --docsearch-searchbox-background: rgba(255, 255, 255, 0.05); + --docsearch-searchbox-focus-background: rgba(255, 255, 255, 0.1); + --docsearch-text-color: #ffffff; + --docsearch-muted-color: #acb0c5; } -.admonition pre, .admonition code { - background-color: rgba(0,0,0,0.15); +.container { + max-width: 1920px; } -.admonition pre code { - background: none; +.react-toggle .react-toggle-thumb, +.react-toggle--checked .react-toggle-thumb { + border-color: #fff !important; } .react-toggle-track { - background-color: rgba(0,0,0,0.2) !important; + background-color: rgba(0, 0, 0, 0.2) !important; } .navbar { box-shadow: none; - background: rgba(255,255,255,0.7); - backdrop-filter: blur(10px); - + background: rgba(255, 255, 255, 0.7); + backdrop-filter: blur(10px); + border-bottom: 1px solid #ddd; } +[data-theme='dark'] .navbar { + background: rgba(19, 22, 46, 0.8); + border-bottom: 1px solid #333; +} .menu { - padding-top: 80px !important; + padding-top: 16px !important; + padding-bottom: 25vh; /* extra scroll space on mobile */ font-weight: 400; } .tech--item { display: flex; - align-items: center; + align-items: center; margin-bottom: 40px; } @@ -69,7 +97,6 @@ flex-grow: 0; } - .tabs--block .tabs__item.tabs__item--active { background: var(--ifm-menu-color-active); color: white; @@ -86,7 +113,6 @@ margin-bottom: 30px; } - img.techicon { width: 45px; } @@ -96,22 +122,27 @@ img.techicon { } .tech--item_text a { - color: #1C1E21; - + color: #1c1e21; } .tech--item_text p { - color: #8D8E90; + color: #000000; } -.tech--item_text a h4, .tech--item_text p { - +.tech--item_text a h4, +.tech--item_text p { margin-bottom: 0; } -.menu__list-item .menu__list .menu__list-item a.menu__link { +.menu__list-item + .menu__list + .menu__list-item + a.menu__link + .menu__link--sublist + .menu__link--sublist-caret { font-size: 14px; -line-height: 14px; + line-height: 14px; + color: #000000; } .flex { @@ -123,89 +154,105 @@ line-height: 14px; border-bottom: 1px solid #dadfeb; } +[data-theme='dark'] .flex { + border-bottom: 1px solid #445; +} + .headertext { max-width: 750px; } -.borderTop div:first-of-type{ +.borderTop div:first-of-type { padding-top: 50px !important; margin-top: 50px; border-top: 1px solid #dadfeb; +} - - +[data-theme='dark'] .borderTop div:first-of-type { + border-top: 1px solid #445; } .borderTop div:first-of-type p { max-width: 90%; } - img.headericon { height: 155px; margin-right: 40px; } a { - color: #A334FB; + color: #a334fb; } + a:hover { - color: #6600B7; + filter: brightness(75%); text-decoration: none; } +[data-theme='dark'] a:hover { + filter: brightness(130%); +} + a:hover img.docicon { padding-right: 3px; padding-left: 3px; - + height: 16px; + width: 16px; } .badge--secondary { - color: #96A5CA; + color: #000000; font-weight: 500; margin-right: 6px; - background: #F2F5FC; - transition: all .2s ease; - border-radius: 4px; - border: none; + background: #f2f5fc; + transition: all 0.2s ease; + border-radius: 4px; + border: none; +} +html[data-theme='dark'] .badge--secondary { + color: #ffffff; + background: rgba(255, 255, 255, 0.1); } .badge--secondary:hover { - color: #7085BA; - background: #DFE6F6; - transition: all .2s ease; - + color: #7085ba; + background: #dfe6f6; + transition: all 0.2s ease; } a.button { - background: #A334FB; + background: #a334fb; color: white; border-radius: 6px; padding: 10px 20px; position: relative; - top:0; + top: 0; font-weight: 400; font-size: 16px; - transition: all .2s ease; + transition: all 0.2s ease; margin-bottom: 30px; } a.button:hover { top: 1px; - background:#942AE9; - transition: all .2s ease; - - + background: #942ae9; + transition: all 0.2s ease; } hr { border: none; - border-top: 1px solid #CACACA; + border-top: 1px solid #cacaca; margin-top: 80px; margin-bottom: 20px; } +[data-theme='dark'] hr { + border-top: 1px solid #445; + background-color: #000; +} + .menu__link--sublist:after { background-size: 1rem 1rem; } @@ -223,8 +270,23 @@ img.homeicon { width: 100%; margin-bottom: 20px; } + +img.spectrum-access-label { + width: 100%; + margin-bottom: 20px; +} + +img.crowdspot-vote-button { + max-width: 200px; + margin-bottom: 20px; + display: flex; + justify-content: center; +} + img.docicon { padding-right: 6px; + height: 16px; + width: 16px; } h1 { @@ -244,13 +306,11 @@ h1.bigger { h2 { font-size: 2rem; font-weight: 600; - } h3 { font-size: 1.5rem; font-weight: 600; - } h2.subtitle { @@ -258,267 +318,572 @@ h2.subtitle { font-size: 23px; letter-spacing: -1%; line-height: 24px; - color: #464C67; + color: #464c67; margin-bottom: 20px; margin-top: 20px; } - - - h5 { margin-top: 40px; letter-spacing: 7%; font-size: 12px; text-transform: uppercase; - color: #1C1E21; + color: #1c1e21; opacity: 0.5; margin-bottom: 6px; font-weight: 500; } p { - color: #626886; + color: #000000; font-size: 1.125rem; -line-height: 1.65rem; -font-weight: 400; - + line-height: 1.65rem; + font-weight: 400; } a.quicklink { display: block; - background: #F7F9FC; + background: #f7f9fc; margin-bottom: 6px; display: flex; justify-content: space-between; align-items: center; - padding: 14px; + padding: 14px 1rem; border-radius: 10px; - transition: all .2s ease; - + transition: all 0.2s ease; } a.quicklink:hover { background: #ebeff6; - transition: all .2s ease; + transition: all 0.2s ease; } img.quicklinkarrow { opacity: 0.5; - transition: all .2s ease; - + transition: all 0.2s ease; + height: 13px; + width: 13px; } a.quicklink:hover img.quicklinkarrow { opacity: 1; - transition: all .2s ease; + transition: all 0.2s ease; +} +a.quicklinkblue { + color: #474dff; +} +a.quicklinkgreen { + color: #0eb98f; } -a.quicklinkblue { - color: #474DFF; +a.quicklinkred { + color: #e35851; } -a.quicklinkblue:hover { - color: #2d32b6; +a.block { + display: block; + width: fit-content; + cursor: pointer; } -a.quicklinkgreen { - color: #0EB98F; +.blockblue a { + color: #474dff; } -a.quicklinkgreen:hover { - color: #0a8566; +.blockgreen a { + color: #10ca9d; } -a.quicklinkred { - color: #E35851; +.blockred a { + color: #e35851; } -a.quicklinkred:hover { - color: #9c3a35; +.docusaurus-highlight-code-line { + background-color: rgb(72, 77, 91); + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); } +.padding-vert--lg { + padding-bottom: 5rem !important; + padding-top: 5rem !important; +} +/* fixes invisible light/dark toggle in light mode */ +[data-theme='light'] .clean-btn { + color: #000; +} -.admonition h5 { - font-size: var(--ifm-h5-font-size); - color: white; +.navbar__brand { + min-width: 80px; /* Prevent colliding Helium logo */ } -.admonition code { - color: white; +.navbar__link:hover, +.navbar__link--active, +.table-of-contents__link:hover, +.table-of-contents__link:hover code, +.table-of-contents__link--active, +.table-of-contents__link--active code { + color: #a334fb; } -.admonition p { - color: white; +.navbar__link { + color: black; } -.announcementnav { - background: #474DFF; - border-radius: 9999px; - padding: 4px 16px; - color: white; +.header-github-link:hover { + opacity: 0.6; +} + +.header-github-link:before { + content: ''; + width: 24px; + height: 24px; display: flex; - transition: all .2s ease; - align-items: center; + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") + no-repeat; } -.announcementnav:hover { - color: white; +html[data-theme='light'] .header-github-link:before { + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") + no-repeat; } -.announcementnav:before { - content: ''; - width: 16px; - height: 16px; +.announcementBarContent_node_modules-\@docusaurus-theme-classic-lib-next-theme-AnnouncementBar- a { + text-decoration: none !important; +} + +img.docsheader { + margin-bottom: 20px; +} + +img.appscreenbanner { + max-height: 500px; display: inline-block; - padding-right: 6px; - background: url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 1.00002C15.9999 0.829624 15.9563 0.662082 15.8733 0.513287C15.7902 0.364492 15.6706 0.23938 15.5256 0.149821C15.3806 0.0602626 15.2152 0.00922872 15.045 0.00156219C14.8748 -0.00610433 14.7054 0.0298506 14.553 0.106016L6.763 4.00002H3C2.20435 4.00002 1.44129 4.31609 0.87868 4.8787C0.316071 5.4413 0 6.20437 0 7.00002C0 7.79567 0.316071 8.55873 0.87868 9.12134C1.44129 9.68394 2.20435 10 3 10H3.28L5.051 15.316C5.11735 15.5152 5.24472 15.6885 5.41505 15.8113C5.58538 15.934 5.79004 16.0001 6 16H7C7.26522 16 7.51957 15.8947 7.70711 15.7071C7.89464 15.5196 8 15.2652 8 15V10.618L14.553 13.894C14.7054 13.9702 14.8748 14.0061 15.045 13.9985C15.2152 13.9908 15.3806 13.9398 15.5256 13.8502C15.6706 13.7607 15.7902 13.6355 15.8733 13.4867C15.9563 13.3379 15.9999 13.1704 16 13V1.00002Z'/%3E%3C/svg%3E") - no-repeat; } +img.appscreen { + max-height: 500px; + display: inline-block; +} -.announcementnav span { - font-weight: 300; +img.explorerSidebar { + display: inline-block; } -.admonition a:hover { - color: white; - opacity: 0.75; - text-decoration: underline; +/* mobile only */ +.navbar-sidebar { + background: rgba(255, 255, 255, 1); + /* box-shadow: none; */ + /* backdrop-filter: none; */ } -a.block { - display: block; - width: fit-content; - cursor: pointer; +[data-theme='dark'] .navbar-sidebar { + background: rgba(19, 22, 46, 0.8); + backdrop-filter: blur(10px); } -.blockblue a { - color: #474DFF; +@media only screen and (max-width: 996px) { + .navbar { + box-shadow: none; + backdrop-filter: none; + } + + .menu__link { + color: #000; + } + + [data-theme='dark'] .menu__link { + color: #fff; + } + + .searchBox_node_modules-\@docusaurus-theme-classic-lib-theme-Navbar-Search-styles-module { + position: relative !important; + right: 0 !important; + } } +@media only screen and (max-width: 768px) { + .flex { + flex-direction: column; + margin-top: 0; + } + + .padding-vert--lg { + padding-bottom: 2rem !important; + padding-top: 2rem !important; + } -.blockgreen a { - color: #10CA9D; + img.headericon { + width: 150px; + max-height: 150px; + margin-bottom: 20px; + } } +.maps_iframe { + width: 100%; + height: 540px; + overflow: hidden; + border: 0; +} -.blockred a { - color: #E35851; +.maps_iframe iframe { + width: 100%; + height: 640px; + overflow: hidden; + border: 0; + margin-top: -150px; } +.img-center { + display: flex; + justify-content: center; + width: 100%; +} +img.app-store-badge { + max-height: 50px; + justify-content: center; +} -.docusaurus-highlight-code-line { - background-color: rgb(72, 77, 91); - display: block; - margin: 0 calc(-1 * var(--ifm-pre-padding)); - padding: 0 var(--ifm-pre-padding); +img.app-mockup { + max-height: 300px; + justify-content: center; } -.padding-vert--lg { - padding-bottom: 5rem !important; - padding-top: 5rem !important; - } +.crowdspot-chart { + max-height: 500px; + margin-bottom: 20px; +} -html[data-theme='light'] { - --ifm-background-color: #fff; - --ifm-table-stripe-background: #F6F7FE; - --ifm-menu-color-background-active: #F6F7FE ; - --ifm-menu-color-background-hover: #F6F7FE ; - --ifm-navbar-link-hover-color: #333; +/* bring 'read more' link closer to post summary */ +.blog-list-page footer { + margin-top: 1.5rem; +} - --docsearch-highlight-color: #A334FB; - --docsearch-logo-color: #A334FB; +/* using :root to jack up specificity 💩 */ +:root.blog-list-page article :not(header) h1, +:root.blog-list-page article :not(header) h2, +:root.blog-list-page article :not(header) h3 { + font-size: inherit; + margin-top: 0; + margin-bottom: 0.5em; } -.react-toggle .react-toggle-thumb, .react-toggle--checked .react-toggle-thumb { - border-color: #fff !important; - } -html[data-theme='dark'] { - --ifm-background-color: #13162E; +/* handle cases where there are two header tags in a row */ +/* handle first header */ +:root.blog-list-page article :not(header) h1:has(+ h2) { + margin-bottom: 0; +} +/* handle second header */ +:root.blog-list-page article :not(header) h1 + h2 { + margin-top: 0; +} +html[data-theme='dark'] h2.subtitle, +html[data-theme='dark'] h5, +html[data-theme='dark'] h4, +html[data-theme='dark'] p { + color: #eee; } -.navbar__link:hover, .navbar__link--active, .table-of-contents__link:hover, .table-of-contents__link:hover code, .table-of-contents__link--active, .table-of-contents__link--active code { - color: #A334FB; +html[data-theme='dark'] a.quicklink, +html[data-theme='dark'] .badge--secondary { + background: rgba(255, 255, 255, 0.1); } -.navbar__link:hover.announcementnav { - color: white; - background: #2b2faa; - transition: all .2s ease; +html[data-theme='dark'] a.quicklink:hover, +html[data-theme='dark'] .badge--secondary:hover { + background: rgba(0, 0, 0, 0.2); } +/* DcCostEstimator.jsx */ +.dc-calc { + padding: 16px; + max-width: 500px; +} -.header-github-link:hover { - opacity: 0.6; +.dc-calc-input-group { + display: flex; + padding-bottom: 1em; + align-items: baseline; + justify-content: space-between; } -.header-github-link:before { - content: ''; - width: 24px; - height: 24px; +.dc-calc-input-group label { + font-weight: 500; + padding-right: 0.5em; + flex: 1 0 auto; +} + +.dc-calc-input-group input, +.dc-calc-input-group select { + font-size: 1em; + margin-right: 0.5em; + background-color: #fff; + padding: 0.5em; + box-shadow: 0 3px 6px -3px rgba(0, 0, 0, 0.1); + border-radius: 6px; + border: none; +} + +[data-theme='dark'] .dc-calc-input-group input, +[data-theme='dark'] .dc-calc-input-group select { + background-color: rgba(255, 255, 255, 0.1); + color: #fff; +} + +.dc-calc-input-group input { + width: 6em; +} + +.dc-calc-input-group select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.dc-calc-frequency-wrapper { display: flex; - background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") - no-repeat; + flex-direction: column; + gap: 0.5em; + align-items: flex-end; } -html[data-theme='light'] .header-github-link:before { - background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") - no-repeat; +.dc-calc-table-title { + display: block; + font-weight: 500; + margin-bottom: 0.25em; + margin-top: -0.5em; } -.announcementBarContent_node_modules-\@docusaurus-theme-classic-lib-next-theme-AnnouncementBar- a { - text-decoration: none !important; +[data-theme='dark'] .dc-calc-table-title { + color: #eee; } -img.docsheadersmall { -display: none; +.dc-calc-table { + display: table; + background: white; + width: 100%; + table-layout: fixed; + border: none; + border-radius: 8px; + box-shadow: 0 3px 8px -3px rgba(0, 0, 0, 0.08); } +[data-theme='dark'] .dc-calc-table { + background: rgba(255, 255, 255, 0.05); +} +.dc-calc-table td, +.dc-calc-table th { + border: none; +} +.dc-calc-table tr { + border: none; +} - @media only screen and (max-width: 996px) { -.navbar { - box-shadow: none; - background: rgba(255,255,255,0.7); - backdrop-filter:none; +.dc-calc-table th { + font-weight: 500; + background: #eaeff9; + color: #53627c; + padding: 0.5em; + border-right: 2px solid white; +} +[data-theme='dark'] .dc-calc-table th { + background: rgba(255, 255, 255, 0.1); + color: #eee; + border-right: 2px solid rgba(19, 22, 46, 0.8); } -img.docsheaderhome { - display: none; +.dc-calc-table th:first-child { + border-top-left-radius: 8px; } -img.docsheadersmall { - display: block; - width: 400px; - margin-bottom: 20px; +.dc-calc-table th:last-child { + border-top-right-radius: 8px; + border: none; } - } +.dc-calc-table td { + font-weight: bold; + text-align: center; + overflow: hidden; + white-space: nowrap; +} +[data-theme='dark'] .dc-calc-table td { + color: #fff; +} +/* End DcCostEstimator.jsx */ - @media only screen and (max-width: 768px) { +/* DisplayLegacyWallet.tsx */ +.display-legacy-wallet { + padding: 16px; + width: 100%; +} - .flex { - flex-direction: column; - margin-top: 0; - } +.display-legacy-wallet input { + width: 100%; + font-size: 1em; + margin: 0 0 0.5em 0; + background-color: #fff; + padding: 1em; + box-shadow: 0 3px 6px -3px rgba(0, 0, 0, 0.1); + border-radius: 6px; + border: none; +} - .padding-vert--lg { - padding-bottom: 2rem !important; -padding-top: 2rem !important; - } +.display-legacy-wallet table { + display: table; + background: white; + width: 100%; + margin: 1em 0 0 0; + table-layout: fixed; + border: none; + border-radius: 8px; + box-shadow: 0 3px 8px -3px rgba(0, 0, 0, 0.08); +} + +.display-legacy-wallet td { + border: none; + padding: 0.5em; +} +.display-legacy-wallet table tr { + border: none; + background: white; +} + +.display-legacy-wallet td:first-child { + font-weight: 500; + background: #eaeff9; + color: #53627c; + border-bottom: 2px solid white; + width: 10em; + padding-left: 1em; +} + +.display-legacy-wallet tr:first-child td:first-child { + border-top-left-radius: 8px; +} +.display-legacy-wallet tr:first-child td:last-child { + border-top-right-radius: 8px; +} +.display-legacy-wallet tr:last-child td:first-child { + border-bottom-left-radius: 8px; + border: none; +} +.display-legacy-wallet tr:last-child td:last-child { + border-bottom-right-radius: 8px; +} + +[data-theme='dark'] .display-legacy-wallet input { + background-color: rgba(255, 255, 255, 0.1); + color: white; +} + +[data-theme='dark'] .display-legacy-wallet table { + background: rgba(255, 255, 255, 0.05); +} + +[data-theme='dark'] .display-legacy-wallet table tr { + background: rgba(255, 255, 255, 0.05); +} + +[data-theme='dark'] .display-legacy-wallet td:first-child { + background: rgba(255, 255, 255, 0.1); + color: #eee; + border-bottom: 1px solid rgba(19, 22, 46, 0.8); +} + +/* End DisplayLegacyWallet.tsx */ + +.screensnippet-wrapper { + background: #f5f7fd; + border-radius: 24px; + padding: 0.5rem; + margin: 0; /*overrides default*/ + width: 100%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} + +[data-theme='dark'] .screensnippet-wrapper { + background: rgba(255, 255, 255, 0.1); + color: white; +} + +[data-theme='dark'] .screensnippet-wrapper svg path { + fill: white; +} + +.screensnippet-wrapper img { + max-height: 150px; +} +.screensnippet-wrapper figcaption { + background: white; + color: rgb(64, 68, 79); + text-wrap: balance; /*:soon:*/ + font-size: smaller; + font-weight: 500; + padding: 0.25rem 1rem; + border-radius: 18px; + white-space: normal; +} + +[data-theme='dark'] .screensnippet-wrapper figcaption { + background: rgba(255, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.9); +} + +.screensnippet-wrapper figcaption > p { + all: inherit; +} + +.screensnippet-wrapper .add-shadow { + box-shadow: + 0px 1.4px 5.2px -10px rgba(0, 0, 0, 0.004), + 0px 2.3px 8.2px -10px rgba(0, 0, 0, 0.006), + 0px 3px 10.5px -10px rgba(0, 0, 0, 0.008), + 0px 3.5px 12.6px -10px rgba(0, 0, 0, 0.009), + 0px 4px 14.7px -10px rgba(0, 0, 0, 0.01), + 0px 4.4px 16.8px -10px rgba(0, 0, 0, 0.011), + 0px 5px 19.1px -10px rgba(0, 0, 0, 0.012), + 0px 5.8px 21.8px -10px rgba(0, 0, 0, 0.014), + 0px 7px 25.6px -10px rgba(0, 0, 0, 0.016), + 0px 10px 36px -10px rgba(0, 0, 0, 0.02); +} + +.screensnippet-wrapper:has(.add-shadow-margin) { + padding-left: 24px; + padding-right: 24px; +} +.screensnippet-wrapper .add-shadow-margin { + margin: 20px 0; +} + +.screensnippet-wrapper .add-border-radius { + border-radius: 18px; +} + +.screensnippet-wrapper:has(.docslabEditor) > div { + width: 100%; +} + +.screensnippet-wrapper .docslabEditor { + width: 100%; + max-height: 550px; + height: 50vh; +} - img.headericon { - width: 150px; - height: 150px; - margin-bottom: 20px; - } - } \ No newline at end of file +.font-disable-calt { + font-feature-settings:'calt' 0,'calt'0; +} \ No newline at end of file diff --git a/src/theme/DcCostEstimator.jsx b/src/theme/DcCostEstimator.jsx new file mode 100644 index 000000000..d89fb2626 --- /dev/null +++ b/src/theme/DcCostEstimator.jsx @@ -0,0 +1,109 @@ +import React, { useState } from 'react'; + +const OperationCostEstimator = () => { + const [numberOfDevices, setNumberOfDevices] = useState(1); + const [uplinkFrequency, setUplinkFrequency] = useState(12); + const [frequencyUnit, setFrequencyUnit] = useState('timesPerHour'); + const dataTransferCost = 0.00001; + + const handleNumberOfDevicesChange = (event) => { + setNumberOfDevices(parseInt(event.target.value, 10)); + }; + + const handleUplinkFrequencyChange = (event) => { + setUplinkFrequency(parseFloat(event.target.value)); + }; + + const handleFrequencyUnitChange = (event) => { + setFrequencyUnit(event.target.value); + }; + + const calculateCost = () => { + let uplinksPerDay; + switch (frequencyUnit) { + case 'timesPerMinute': + uplinksPerDay = uplinkFrequency * 60 * 24; + break; + case 'timesPerHour': + uplinksPerDay = uplinkFrequency * 24; + break; + case 'timesPerDay': + default: + uplinksPerDay = uplinkFrequency; + break; + } + + const dailyCost = numberOfDevices * uplinksPerDay * dataTransferCost; + + if (isNaN(dailyCost)) { + return { + day: ' —', + month: ' —', + year: ' —', + } + } else { + return { + day: dailyCost.toFixed(5), + month: (dailyCost * 30).toFixed(2), + year: (dailyCost * 365).toFixed(2), + }; + } + }; + + const cost = calculateCost(); + + return ( +
+
+ + +
+
+ +
+ + +
+
+
+ Data Cost Estimate: + + + + + + + + + + + + + + + +
Per DayPer MonthPer Year
${cost.day}${cost.month}${cost.year}
+
+
+ ); +}; + +export default OperationCostEstimator; diff --git a/src/theme/DisplayLegacyWallet.tsx b/src/theme/DisplayLegacyWallet.tsx new file mode 100644 index 000000000..4f0b637cc --- /dev/null +++ b/src/theme/DisplayLegacyWallet.tsx @@ -0,0 +1,68 @@ +import React, { useState, useMemo } from "react"; +import BrowserOnly from '@docusaurus/BrowserOnly'; +import { PublicKey } from "@solana/web3.js"; +import Address from "@helium/address"; +import { ED25519_KEY_TYPE } from "@helium/address/build/KeyTypes"; + +export const DisplayLegacyWallet = () => { + const [wallet, setWallet] = useState(""); + + return ( +
+ setWallet(e.target.value)} + /> + + {() => { + if (typeof window !== 'undefined' && !window.Buffer) { + window.Buffer = require('buffer/').Buffer; + } + + const solanaWallet = useMemo(() => { + try { + return new PublicKey(wallet); + } catch (e: any) { + try { + return new PublicKey(Address.fromB58(wallet).publicKey); + } catch (e: any) { + // ignore + } + } + }, [wallet]); + + const heliumWallet = useMemo( + () => solanaWallet && new Address(0, 0, ED25519_KEY_TYPE, solanaWallet.toBuffer()), + [solanaWallet] + ); + + return ( + <> + + + + {heliumWallet?.b58 ? ( + + ) : ( + + )} + + + + {solanaWallet?.toBase58() ? ( + + ) : ( + + )} + +
Helium Address{heliumWallet?.b58} Helium base58 public address.
Solana Address{solanaWallet?.toBase58()}Solana base58 public address.
+ + ); + }} +
+
+ ); +}; diff --git a/src/theme/EscrowOUIWidget.tsx b/src/theme/EscrowOUIWidget.tsx new file mode 100644 index 000000000..a07a7228d --- /dev/null +++ b/src/theme/EscrowOUIWidget.tsx @@ -0,0 +1,142 @@ +import React, { useState, useCallback } from 'react' +import BrowserOnly from '@docusaurus/BrowserOnly' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import { Connection, Keypair, PublicKey, Transaction } from '@solana/web3.js' +import { delegatedDataCreditsKey, escrowAccountKey } from '@helium/data-credits-sdk' +import { subDaoKey } from '@helium/helium-sub-daos-sdk' +import { IOT_MINT } from '@helium/spl-utils' +import { useAsync } from 'react-async-hook' +import { AnchorProvider } from '@coral-xyz/anchor' +import { getAccount } from '@solana/spl-token' + +export const EscrowOUIWidget = () => { + const [wallet, setWallet] = useState('') + + const getEscrowTokenAccount = useCallback( + (subDao: PublicKey) => { + if (wallet) { + try { + const delegatedDataCredits = delegatedDataCreditsKey(subDao, wallet)[0] + const escrowTokenAccount = escrowAccountKey(delegatedDataCredits)[0] + + return { + escrowTokenAccount: escrowTokenAccount.toBase58(), + delegatedDataCredits: delegatedDataCredits.toBase58(), + } + } catch (e) { + throw e as Error + } + } + }, + [wallet], + ) + + return ( +
+ setWallet(e.target.value)} + /> + + {() => { + if (typeof window !== 'undefined' && !window.Buffer) { + window.Buffer = require('buffer/').Buffer + } + + const IOT_SUB_DAO_KEY = subDaoKey(IOT_MINT)[0] + const escrowTokenAccount = getEscrowTokenAccount(IOT_SUB_DAO_KEY)?.escrowTokenAccount + + return ( + <> + + + + {escrowTokenAccount ? ( + + ) : ( + + )} + + + +
Escrow Account + + {escrowTokenAccount} + + Solana base58 escrow token address
+ + ) + }} +
+
+ ) +} + +type OuiAccountDataProps = { + escrowAccount?: PublicKey +} + +const OuiEscrowAccountBalance = ({ escrowAccount }: OuiAccountDataProps) => { + const { siteConfig } = useDocusaurusContext() + const endpoint = siteConfig.customFields.SOLANA_URL! + + const { result: dcBalance } = useAsync(async () => { + if (!endpoint || !escrowAccount) return + try { + const keypair = Keypair.generate() + const wallet = { + publicKey: keypair.publicKey, + signTransaction: async (transaction: Transaction) => { + transaction.partialSign(keypair) + return transaction + }, + signAllTransactions: async (transactions: Transaction[]) => { + return transactions.map((tx) => { + tx.partialSign(keypair) + return tx + }) + }, + } as any + + const provider = new AnchorProvider( + new Connection(endpoint, { + commitment: 'processed', + }), + wallet, + { commitment: 'processed' }, + ) + + const account = await getAccount(provider.connection, escrowAccount) + + return account.amount.toString() + } catch (e) {} + }, [escrowAccount]) + + return ( + + Escrow Account Balance + {dcBalance ? ( + + {Number(dcBalance).toLocaleString()} DC ( + {(Number(dcBalance) * 0.00001).toLocaleString('en-US', { + style: 'currency', + currency: 'USD', + currencyDisplay: 'code', + })} + ) + + ) : ( + Escrow account DC balance + )} + + ) +} diff --git a/src/theme/HntToDcSimulator.jsx b/src/theme/HntToDcSimulator.jsx new file mode 100644 index 000000000..c64eea1ca --- /dev/null +++ b/src/theme/HntToDcSimulator.jsx @@ -0,0 +1,114 @@ +import React, { useEffect, useRef, useState } from 'react' +import { PriceServiceConnection } from '@pythnetwork/price-service-client' +import styles from './HntToDcSimulator.module.css' + +const DC_PRICE = 0.00001 // 1 DC = $0.00001 +const HNT_PRICE_ID = '0x649fdd7ec08e8e2a20f425729854e90293dcbe2376abc47197a14da6ff339756' +const HERMES_ENDPOINT = 'https://hermes.pyth.network' + +function calculateDc(price) { + return price / DC_PRICE +} +function getRoundedPrice(price) { + return Math.round(price * 100) / 100 +} + +export const HntToDcSimulator = () => { + const [liveHntPrice, setLiveHntPrice] = useState(0) + const [simulatedHntPrice, setSimulatedHntPrice] = useState(1) + const [sliderRange, setSliderRange] = useState({ min: 0, max: 5 }) + const initialPriceSetRef = useRef(false) + + useEffect(() => { + const connection = new PriceServiceConnection(HERMES_ENDPOINT, { + priceFeedRequestConfig: { binary: false }, + }) + + const handlePriceUpdate = (priceFeed) => { + const { price, expo } = priceFeed.price + const rawPrice = parseInt(price, 10) + const scaledPrice = rawPrice * 10 ** expo + + if (scaledPrice > 0) { + setLiveHntPrice(scaledPrice) + + if (!initialPriceSetRef.current) { + setInitialSliderValues(scaledPrice) + initialPriceSetRef.current = true + } + } + } + + connection.subscribePriceFeedUpdates([HNT_PRICE_ID], handlePriceUpdate) + + return () => { + connection.closeWebSocket() + } + }, []) + + const setInitialSliderValues = (price) => { + const roundedPrice = getRoundedPrice(price) + setSimulatedHntPrice(roundedPrice) + + const upperLimit = Math.ceil(price / 5) * 5 + 5 + let lowerLimit = Math.max(0, Math.floor(price / 5) * 5 - 5) + if (lowerLimit === 0) { + lowerLimit = 0.01 + } + setSliderRange({ min: lowerLimit, max: upperLimit }) + } + + const handleSliderChange = (event) => { + const newPrice = parseFloat(event.target.value) + setSimulatedHntPrice(newPrice) + } + + const handleSetToLivePrice = () => { + setSimulatedHntPrice(liveHntPrice) + } + + const dcAmount = Math.round(calculateDc(simulatedHntPrice)) + const hntForTenDollars = 10 / simulatedHntPrice + + return ( +
+ + + + + + + + + + + + + +
DC from 1 HNTHNT burned for $10 DC
{dcAmount.toLocaleString()} DC{hntForTenDollars.toLocaleString()} HNT
+ +
+
+ +
+ +
+

Simulated HNT Oracle Price: ${simulatedHntPrice.toFixed(2)}

+ {liveHntPrice !== 0 && ( + + )} +
+
+
+ ) +} diff --git a/src/theme/HntToDcSimulator.module.css b/src/theme/HntToDcSimulator.module.css new file mode 100644 index 000000000..36af2639f --- /dev/null +++ b/src/theme/HntToDcSimulator.module.css @@ -0,0 +1,117 @@ +.componentSpacing { + padding: 16px 16px 0; +} + +.dcEstTable, .interactiveBox { + display: table; + background: white; + width: 100%; + table-layout: fixed; + border: none; + border-radius: 8px; + box-shadow: 0 3px 8px -3px rgba(0, 0, 0, 0.08); +} + +[data-theme='dark'] .dcEstTable, +[data-theme='dark'] .interactiveBox { + background: rgba(255, 255, 255, 0.05); +} + +.interactiveBox { + display: block; + padding: 16px 16px 0; + margin-bottom: 1em; +} + +.dcEstTable td, +.dcEstTable th { + border: none; +} + +.dcEstTable tr { + border: none; +} + +.dcEstTable th { + font-weight: 500; + background: #eaeff9; + color: #53627c; + padding: 0.5em; + border-right: 2px solid white; +} + +[data-theme='dark'] .dcEstTable th { + background: rgba(255, 255, 255, 0.1); + color: #eee; + border-right: 2px solid rgba(19, 22, 46, 0.8); +} + +.dcEstTable th:first-child { + border-top-left-radius: 8px; +} + +.dcEstTable th:last-child { + border-top-right-radius: 8px; + border: none; +} + +.dcEstTable td { + font-weight: bold; + text-align: center; + overflow: hidden; + white-space: nowrap; +} + +[data-theme='dark'] .dcEstTable td { + color: #fff; +} + +.inputContainer { + display: flex; + padding: 0.125em 0 0.125em 0; +} + +.inputContainer input { + flex: 1 1 auto; +} + +[data-theme='dark'] .inputContainer input { + background-color: rgba(255, 255, 255, 0.1); + color: white; +} + +.pricesContainer { + display: flex; + justify-content: space-between; + align-items: baseline; +} + +.setToLivePriceButton { + appearance: none; + background: transparent; + border: none; + cursor: pointer; + color: #5a719a; + padding-left: 1em; + font-size: 1.125rem; + line-height: 1.65rem; + text-align: right; + font-variant-numeric: tabular-nums; + transition: color var(--ifm-transition-fast) var(--ifm-transition-timing-default); +} + +[data-theme='dark'] .setToLivePriceButton { + color: #acb0c5; +} + +.setToLivePriceButton:hover { + color: rgb(18, 49, 103); +} + +[data-theme='dark'] .setToLivePriceButton:hover { + color: #fff; +} + +.textUnderline { + text-decoration: underline; +} \ No newline at end of file diff --git a/src/theme/HntToFeeSol.tsx b/src/theme/HntToFeeSol.tsx new file mode 100644 index 000000000..f4d72806e --- /dev/null +++ b/src/theme/HntToFeeSol.tsx @@ -0,0 +1,85 @@ +import { BN } from '@coral-xyz/anchor' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import { HNT_MINT, sendAndConfirmWithRetry, toNumber } from '@helium/spl-utils' +import { useConnection, useWallet } from '@solana/wallet-adapter-react' +import { VersionedTransaction } from '@solana/web3.js' +import axios from 'axios' +import React, { useEffect, useState } from 'react' +import { useAsync, useAsyncCallback } from 'react-async-hook' +import './bufferFill' +import { Alert, AlertIcon } from './components/Alert' +import { Button } from './components/Button' +import { Checkbox } from './components/Checkbox' +import { Flex } from './components/Flex' +import { Wallet, WrapWithAccountProvider } from './components/Wallet' + +// Default styles that can be overridden by your app +require('@solana/wallet-adapter-react-ui/styles.css') + +export const HntToFeeSolImpl = () => { + const { siteConfig } = useDocusaurusContext() + const url = siteConfig.customFields.TOKENS_TO_RENT_SERVICE_URL + const { publicKey, wallet } = useWallet() + const { connection } = useConnection() + const { result: estimate, error: estError } = useAsync(async () => { + const { estimate } = (await axios.post(`${url}/estimate`, { mint: HNT_MINT.toBase58() })).data + + return toNumber(new BN(estimate), 8) + }, []) + + useEffect(() => { + if (estError) { + console.error(estError) + } + }, [estError]) + + const { execute, error, loading } = useAsyncCallback(async () => { + if (wallet && connection && wallet.adapter && wallet.adapter.connected) { + const txRaw = ( + await axios.post(`${url}/fees`, { + wallet: publicKey.toBase58(), + mint: HNT_MINT.toBase58(), + }) + ).data + const tx = VersionedTransaction.deserialize(Buffer.from(txRaw)) + const signed = await wallet.adapter.signTransaction(tx) + await sendAndConfirmWithRetry( + connection, + signed.serialize(), + { + skipPreflight: true, + }, + 'confirmed', + ) + } + }) + const [isChecked, setIsChecked] = useState(false) + + return ( + + {error && ( + + +

{error.message}

+
+ )} + I agree to use the SOL acquired from this system solely for on-chain rent, gas, and other + transaction fees. I understand that the terms of service limit each user to a maximum of 100 + uses of this system. I further agree that I will not use this system for any illegal purpose. + setIsChecked((c) => !c)}>I Agree + +
+ ) +} + +export const HntToFeeSol = () => { + return ( + + + + + + ) +} diff --git a/src/theme/LedgerMigration.css b/src/theme/LedgerMigration.css new file mode 100644 index 000000000..2433164cc --- /dev/null +++ b/src/theme/LedgerMigration.css @@ -0,0 +1,167 @@ +.steps { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + text-align: center; + width: 100%; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + -webkit-box-flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.step { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + position: relative; + gap: 16px; + padding-bottom: 16px; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + --size: 40px; + --gap: 8px; +} + +.step-container { + display: flex; +} + +.step-title { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + margin-inline-start: 12px; +} + +.step-icon-container { + width: 40px; + height: 40px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + border-radius: 50%; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + background: white; + border: 2px solid #ccc; +} + +.step-icon-span { + text-align: center; + font-weight: bold; + opacity: 1; + transform: none; + font-size: 1rem; +} + +.step-icon-container.active { + border-color: #38a169; +} + +.step-icon-container.done { + background: #38a169; +} + +.step-icon { + stroke-width: 2px; + width: 18px; + height: 18px; + color: white; +} + +.step-label { + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-margin-start: 12px; + margin-inline-start: 12px; +} + +.step-content { + min-height: 8px; + -webkit-padding-start: calc(40px); + padding-inline-start: calc(40px); +} + +.step:not(:last-child) .step-content:after { + content: ''; + background-color: #ccc; + bottom: var(--gap); + inset-inline: calc(var(--size) / 2); + position: absolute; + top: calc(var(--size) + var(--gap)); + width: 2px; + /* content: ''; + background-color: #ccc; + bottom: 8px; + inset-inline: 19px; + position: absolute; + top: 48px; + width: 2px; + background-color: #ccc; */ +} + +.spin { + animation-name: spin; + animation-duration: 500ms; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +@keyframes spin { + from { + transform:rotate(0deg); + } + to { + transform:rotate(360deg); + } +} + +.collapse { + overflow: hidden; + display: block; + width: 100%; + opacity: 1; + transition: 0.4s; +} diff --git a/src/theme/LedgerMigration.tsx b/src/theme/LedgerMigration.tsx new file mode 100644 index 000000000..a97d37454 --- /dev/null +++ b/src/theme/LedgerMigration.tsx @@ -0,0 +1,594 @@ +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import { bulkSendRawTransactions } from '@helium/spl-utils' +import { LedgerWalletAdapter } from '@solana/wallet-adapter-ledger' +import { Connection, PublicKey, VersionedTransaction } from '@solana/web3.js' +import axios from 'axios' +import React, { useMemo, useState } from 'react' +import { useAsyncCallback } from 'react-async-hook' +import { FaCheck, FaCheckCircle } from 'react-icons/fa' +import './LedgerMigration.css' +import './bufferFill' +import { Alert, AlertIcon } from './components/Alert' +import { Button } from './components/Button' +import { Checkbox } from './components/Checkbox' +import { Flex } from './components/Flex' +import { Icon } from './components/Icon' + +const Text: React.FunctionComponent<{ children: React.ReactNode }> = ({ children }) => { + return

{children}

+} + +const Heading: React.FunctionComponent<{ + textAlign?: string + fontSize?: string + children: React.ReactNode +}> = ({ children, fontSize, textAlign }) => { + // @ts-ignore + return
{children}
+} + +const Input: React.FunctionComponent<{ + type?: string + name?: string + placeholder?: string + value?: string + onChange?: (e: React.ChangeEvent) => void + children?: React.ReactNode + step?: string + w?: string +}> = ({ children, w, step, type, name, placeholder, value, onChange }) => { + return ( + + {children} + + ) +} + +const VStack: React.FunctionComponent<{ + children: React.ReactNode +}> = ({ children }) => { + return ( +
+ {children} +
+ ) +} + +const BIP32_HARDENED_BIT = (1 << 31) >>> 0 + +function harden(n: number): number { + return (n | BIP32_HARDENED_BIT) >>> 0 +} + +function getHeliumDerivationPath(account: number = 0, change: number = 0): Buffer { + const length = 5 + const derivationPath = Buffer.alloc(1 + length * 4) + + let offset = derivationPath.writeUInt8(length, 0) + offset = derivationPath.writeUInt32BE(harden(44), offset) // Using BIP44 + offset = derivationPath.writeUInt32BE(harden(904), offset) // Helium's BIP44 path + + // if (account !== undefined) { + offset = derivationPath.writeUInt32BE(harden(account), offset) + // if (change !== undefined) { + offset = derivationPath.writeUInt32BE(harden(change), offset) + derivationPath.writeUInt32BE(harden(0), offset) + + // } + // } + + return derivationPath +} + +function getSolanaDerivationPath(account?: number, change?: number): Buffer { + const length = account !== undefined ? (change === undefined ? 3 : 4) : 2 + const derivationPath = Buffer.alloc(1 + length * 4) + + let offset = derivationPath.writeUInt8(length, 0) + offset = derivationPath.writeUInt32BE(harden(44), offset) // Using BIP44 + offset = derivationPath.writeUInt32BE(harden(501), offset) // Solana's BIP44 path + + if (account !== undefined) { + offset = derivationPath.writeUInt32BE(harden(account), offset) + if (change !== undefined) { + derivationPath.writeUInt32BE(harden(change), offset) + } + } + + return derivationPath +} + +function partitionBy(arr: A[], predicate: (a: A) => boolean): [A[], A[]] { + // @ts-ignore + return arr.reduce((acc, item) => (acc[+!predicate(item)].push(item), acc), [[], []]) +} + +const ATTESTATION = + 'I attest that both the source and destination wallets are owned and controlled by the same individual or entity, and that I have legal authority to perform this transaction on behalf of that individual or entity.' + +function useSteps({ initialStep }: { initialStep: number }): { + nextStep: () => void + prevStep: () => void + reset: () => void + activeStep: number +} { + const [activeStep, setActiveStep] = useState(initialStep) + const nextStep = React.useCallback(() => setActiveStep(activeStep + 1), [activeStep]) + const prevStep = React.useCallback(() => setActiveStep(activeStep - 1), [activeStep]) + const reset = () => setActiveStep(initialStep) + return { nextStep, prevStep, reset, activeStep } +} + +const Step: React.FunctionComponent<{ + children: React.ReactNode + label: string +}> = ({ children }) => { + return
{children}
+} + +const Steps: React.FunctionComponent<{ + children: React.ReactElement[] + activeStep: number +}> = ({ children, activeStep }) => { + return ( +
+ {children.map((child, index) => { + return ( +
+
+
+ {activeStep > index ? ( +
+ +
+ ) : ( + {index + 1} + )} +
+
{child.props.label}
+
+
+
+ {child} +
+
+
+ ) + })} +
+ ) +} + +export const LedgerMigration = () => { + const { nextStep, prevStep, activeStep } = useSteps({ + initialStep: 0, + }) + const { siteConfig } = useDocusaurusContext() + const migrationUrl = siteConfig.customFields.MIGRATION_SERVICE_URL + const [solanaPubkey, setSolanaPubkey] = useState(null) + const [heliumPubkey, setHeliumPubkey] = useState(null) + const [accountNumber, setAccountNumber] = useState('0') + const heliumWallet = useMemo( + () => + new LedgerWalletAdapter({ + derivationPath: getHeliumDerivationPath(Number(accountNumber)), + }), + [accountNumber], + ) + const solanaWallet = useMemo( + () => + new LedgerWalletAdapter({ + derivationPath: getSolanaDerivationPath(Number(accountNumber) || undefined), + }), + [accountNumber], + ) + const [attested, setAttested] = useState(false) + const connection = useMemo( + () => new Connection(siteConfig.customFields.SOLANA_URL!), + [siteConfig.customFields.SOLANA_URL], + ) + const { + execute, + error: errorSolana, + loading: loadingSolana, + } = useAsyncCallback(async () => { + await solanaWallet.connect() + setSolanaPubkey(solanaWallet.publicKey) + // Disconnect so we can connect the helium ledger + await solanaWallet.disconnect() + return solanaWallet + }) + const { + execute: executeHelium, + error: errorHelium, + loading: loadingHelium, + } = useAsyncCallback(async () => { + await heliumWallet.connect() + setHeliumPubkey(heliumWallet.publicKey) + return heliumWallet + }) + const { + result: seedResult, + execute: executeSeed, + error: errorSeed, + loading: loadingSeed, + } = useAsyncCallback(async (wallet: PublicKey) => { + async function getTxs() { + return (await axios.get(`${migrationUrl}/migrate/${wallet.toBase58()}`)).data + } + const txs = (await getTxs()).transactions + const txBuffers = txs.map((tx: any) => Buffer.from(tx)) + + await bulkSendRawTransactions(connection, txBuffers) + + const txs2 = (await getTxs()).transactions + if (txs2.length !== 0) { + throw new Error(`Failed to migrate ${txs2.length} transactions, try again`) + } + + return true + }) + const { + result: heliumSignResult, + execute: executeHeliumSign, + error: errorHeliumSign, + loading: loadingHeliumSign, + } = useAsyncCallback(async () => { + async function getTxs() { + return ( + await axios.post(`${migrationUrl}/ledger/migrate`, { + from: heliumPubkey!.toBase58(), + to: solanaPubkey!.toBase58(), + attestation: ATTESTATION, + }) + ).data + } + const txs = await getTxs() + const txBuffers = txs.map((tx: any) => Buffer.from(tx)) + const deserialized = txs.map((tx: Buffer) => VersionedTransaction.deserialize(tx)) as VersionedTransaction[] + // Disconnect so we can connect the helium ledger + await heliumWallet.disconnect() + + return signed + }) + const { + result: solanaSignResult, + execute: executeSolanaSign, + error: errorSolanaSign, + loading: loadingSolanaSign, + } = useAsyncCallback(async () => { + const [needSign, dontNeedSign] = partitionBy(heliumSignResult!, (tx) => { + const userKeyIndex = tx.message.staticAccountKeys.findIndex(k => k.equals(solanaPubkey!)) + const signingRequired = typeof userKeyIndex !== "undefined" && tx.message.isAccountSigner(userKeyIndex) + return signingRequired + }) + await solanaWallet.connect() + if (needSign.length > 0) { + console.log(needSign) + const signed = await solanaWallet!.signAllTransactions(needSign) + return [...dontNeedSign, ...signed] + } + + return dontNeedSign + }) + + const { + result: resultSendTransactions, + execute: executeSendTransactions, + error: errorSendTransactions, + loading: loadingSendTransactions, + } = useAsyncCallback(async () => { + const txs = solanaSignResult!.map((tx) => Buffer.from(tx.serialize())) + await bulkSendRawTransactions(connection, txs) + let sent = [ + ...(await bulkSendRawTransactions(connection, txs.slice(0, -1))), + // Ensure the last transaction (pulling up all the sol) runs last. + ...(await bulkSendRawTransactions(connection, txs.slice(-1))), + ] + + if (sent.length != txs.length) { + throw new Error('Failed to send all transactions, please try again') + } + return true + }) + + const nextEnabled = useMemo( + () => + activeStep === 0 + ? solanaPubkey + : activeStep === 1 + ? heliumWallet.connected + : activeStep === 2 + ? seedResult + : activeStep === 3 + ? !!heliumSignResult + : activeStep === 4 + ? !!solanaSignResult + : activeStep === 5 + ? resultSendTransactions + : true, + [ + activeStep, + heliumSignResult, + heliumWallet.connected, + seedResult, + solanaPubkey, + solanaSignResult, + resultSendTransactions, + ], + ) + const steps = useMemo( + () => [ + { + label: 'Connect Solana Ledger', + component: ( + + {errorSolana && ( + + +

+ {errorSolana.message}. Please make sure you are connected to the Solana Ledger App + and have blind signing enabled. +

+
+ )} + + Open the Solana App on your ledger. Be sure to{' '} +
+ enable blind signing + {' '} + in the Ledger Settings. Select the account number you would like to migrate. Then + click the button below. + +
Account Number
+ + { + setAccountNumber(e.target.value) + }} + step="1" + /> + + + + + ), + }, + { + label: 'Connect Helium-Solana Ledger', + component: ( + + {errorHelium && ( + + +

+ {errorHelium.message}. Please make sure you are connected to the Helium-Solana + Ledger App and have blind signing enabled. +

+
+ )} + + Open the Helium-Solana App on your ledger. Be sure to{' '} + + enable blind signing + {' '} + in the Ledger Settings. Then click the button below. + + +
+ ), + }, + { + label: 'Keep Helium-Solana Ledger Connected and Seed Wallet on Solana', + component: ( + + {errorSeed && ( + + + {errorSeed.message} + + )} + Seed your tokens and hotspots into your Solana wallet + + + ), + }, + { + label: 'Sign Transactions with Helium-Solana', + component: ( + + {errorHeliumSign && ( + + + {errorHeliumSign.message}. Please make sure you are connected to the Helium-Solana + Ledger App and have blind signing enabled. + + )} + Sign transactions to migrate from the Helium derivation path to the Solana derivation + path. + + + ), + }, + { + label: 'Sign Transactions with Solana', + component: ( + + {errorSolanaSign && ( + + + {errorSolanaSign.message}. Please make sure you are connected to the Solana Ledger + App and have blind signing enabled. + + )} + Open the Solana Ledger app. Sign transactions to migrate from the Helium derivation path + to the Solana derivation path. + + + ), + }, + { + label: 'Send Migration Transactions', + component: ( + + {errorSendTransactions && ( + + + {errorSendTransactions.message} + + )} + setAttested(!attested)} isChecked={attested}> + {ATTESTATION} + + + + + ), + }, + ], + [ + attested, + errorHelium, + errorHeliumSign, + errorSeed, + errorSendTransactions, + errorSolana, + errorSolanaSign, + execute, + executeHelium, + executeHeliumSign, + executeSeed, + executeSendTransactions, + executeSolanaSign, + heliumPubkey, + heliumSignResult, + seedResult, + loadingHelium, + loadingHeliumSign, + loadingSeed, + loadingSendTransactions, + loadingSolana, + loadingSolanaSign, + resultSendTransactions, + solanaPubkey, + solanaSignResult, + ], + ) + + return ( + + + {steps.map(({ label, component }, index) => ( + + {component} + { + + + + + } + + ))} + + {activeStep === steps.length && ( + + + Ledger successfully migrated! + + + )} + + ) +} diff --git a/src/theme/MigrateWallet.tsx b/src/theme/MigrateWallet.tsx new file mode 100644 index 000000000..01c1f24f2 --- /dev/null +++ b/src/theme/MigrateWallet.tsx @@ -0,0 +1,105 @@ +import "./bufferFill" +import React, { useMemo } from "react"; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import axios from "axios" +import { useAsyncCallback } from "react-async-hook"; +import { bulkSendRawTransactions } from '@helium/spl-utils' +import { Connection, PublicKey } from "@solana/web3.js"; +import Address from "@helium/address"; +import { ED25519_KEY_TYPE } from "@helium/address/build/KeyTypes"; + +export const MigrateWallet = () => { + const { siteConfig } = useDocusaurusContext() + const migrationUrl = siteConfig.customFields.MIGRATION_SERVICE_URL + const [wallet, setWallet] = React.useState("") + + const solanaWallet = useMemo(() => { + try { + return new PublicKey(wallet) + } catch (e: any) { + // ignore + try { + return new PublicKey(Address.fromB58(wallet).publicKey) + } catch (e: any) { + // ignore + } + } + }, [wallet]) + const heliumWallet = useMemo( + () => solanaWallet && new Address(0, 0, ED25519_KEY_TYPE, solanaWallet.toBytes()), + [solanaWallet] + ) + const connection = useMemo( + () => new Connection(siteConfig.customFields.SOLANA_URL!), + [siteConfig.customFields.SOLANA_URL], + ) + const { + result: inflateResult, + execute: executeInflate, + error: errorInflate, + loading: loadingInflate, + } = useAsyncCallback(async (wallet: PublicKey) => { + async function getTxs() { + return (await axios.get(`${migrationUrl}/migrate/${wallet.toBase58()}?limit=1000`)).data + } + const txs = (await getTxs()).transactions + const txBuffers = txs.map((tx: any) => Buffer.from(tx)) + + await bulkSendRawTransactions(connection, txBuffers) + + const txs2 = (await getTxs()).transactions + if (txs2.length !== 0) { + throw new Error(`Failed to migrate ${txs2.length} transactions, try again`) + } + + return true + }) + + return ( +
+ {errorInflate && ( + + )} + setWallet(e.target.value)} + /> +
Helium Address: {heliumWallet?.b58}
+
+ Solana Address:{' '} + + {solanaWallet?.toBase58()} + +
+ +
+ ) +} diff --git a/src/theme/NotFound.js b/src/theme/NotFound.js new file mode 100644 index 000000000..deaf5aeb2 --- /dev/null +++ b/src/theme/NotFound.js @@ -0,0 +1,38 @@ +import React from 'react' +import Translate, { translate } from '@docusaurus/Translate' +import { PageMetadata } from '@docusaurus/theme-common' +import Layout from '@theme/Layout' +export default function NotFound() { + return ( + <> + + +
+
+
+

+ + Hmmm... + +

+

+ + It looks like this page has moved. Head back to the home page, or try the search + bar to find information on other pages. + +

+

+ Back to Docs Home Page. +

+
+
+
+
+ + ) +} diff --git a/src/theme/RealmsPage.jsx b/src/theme/RealmsPage.jsx new file mode 100644 index 000000000..18e811a6b --- /dev/null +++ b/src/theme/RealmsPage.jsx @@ -0,0 +1,29 @@ +import useBaseUrl from '@docusaurus/useBaseUrl' + +export const TestVoteImg = () => ( +
+
+ + +
+
+ The Helium DAO in Realms with an active + test vote. Shown on desktop and mobile. +
+
+) + +export const ConnectImg = () => ( +
+ +
+ This user is logged in with their 4qPt5... account. +
+
+) diff --git a/src/theme/Simulate.tsx b/src/theme/Simulate.tsx new file mode 100644 index 000000000..39b7189aa --- /dev/null +++ b/src/theme/Simulate.tsx @@ -0,0 +1,90 @@ +import { type Adapter } from '@solana/wallet-adapter-base' +import { useConnection, useWallet } from '@solana/wallet-adapter-react' +import { + Connection, + Transaction, + TransactionInstruction, + LAMPORTS_PER_SOL, + PublicKey, +} from '@solana/web3.js' +import React, { useEffect } from 'react' +import { useAsyncCallback } from 'react-async-hook' +import './bufferFill' +import { Button } from './components/Button' +import { Flex } from './components/Flex' +import { Wallet, WrapWithAccountProvider } from './components/Wallet' + +require('@solana/wallet-adapter-react-ui/styles.css') + +export const SimulateImpl = ({ + getInstructions, +}: { + getInstructions: (args: { + publicKey: PublicKey + connection: Connection + wallet: Adapter + }) => Promise<{ transactions?: Transaction[]; instructions?: TransactionInstruction[][] }> +}) => { + const { publicKey, wallet } = useWallet() + const { connection } = useConnection() + + const { execute, error, loading } = useAsyncCallback(async () => { + if (wallet && connection && wallet.adapter && wallet.adapter.connected) { + const blockhash = (await connection.getLatestBlockhash()).blockhash + const { transactions, instructions } = await getInstructions({ + connection, + wallet: wallet.adapter, + publicKey, + }) + let txs = transactions + if (instructions) { + txs = instructions.map((ix) => { + const transaction = new Transaction({ + recentBlockhash: blockhash, + feePayer: publicKey, + }) + transaction.add(...ix) + return transaction + }) + } + + await wallet.adapter.signAllTransactions(txs) + } + }) + + useEffect(() => { + if (error) { + console.error(error) + } + }, [error]) + + if (!publicKey) { + return null + } + return ( + + {error && error.message} + + + ) +} + +export const Simulate = ({ + getInstructions, +}: { + getInstructions: (args: { + publicKey: PublicKey + connection: Connection + wallet: Adapter + }) => Promise<{ transactions?: Transaction[]; instructions?: TransactionInstruction[][] }> +}) => { + return ( + + + + + + ) +} diff --git a/src/theme/TopLedgerEmbed.module.css b/src/theme/TopLedgerEmbed.module.css new file mode 100644 index 000000000..9b05ed72e --- /dev/null +++ b/src/theme/TopLedgerEmbed.module.css @@ -0,0 +1,26 @@ +.tlembed { + width: 100%; + min-height: 360px; + height: 100%; +} + +@media screen and (max-width: 720px) { + .tlembed { + min-height: 420px; + } +} + +.tlembedWrapper { + padding: 1.25em 5vw 1em; + margin-bottom: 0.5rem; + margin-top: 0.5rem; +} + +.tlembedWrapper > p { + font-weight: 500; + margin: 0 0 0.75em; +} + +.tlembedWrapper figcaption { + margin-top: 0.5rem; +} diff --git a/src/theme/TopLedgerEmbed.tsx b/src/theme/TopLedgerEmbed.tsx new file mode 100644 index 000000000..7860f34c5 --- /dev/null +++ b/src/theme/TopLedgerEmbed.tsx @@ -0,0 +1,33 @@ +import React from 'react' + +import styles from './TopLedgerEmbed.module.css' + +export const TopLedgerEmbed = ({ + title, + caption, + client, + queryId, + visualizationId, + apiKey, + params = {}, + style = {}, +}) => { + const embedUrl = new URL( + `https://analytics.topledger.xyz/${client}/embed/query/${queryId}/visualization/${visualizationId}`, + ) + embedUrl.search = new URLSearchParams({ + api_key: apiKey, + hide_header: 'true', + hide_timestamp: 'true', + iframe: 'true', + ...params, + }).toString() + + return ( +
+ {title &&

{title}

} + + {caption &&
{caption}
} +
+ ) +} diff --git a/src/theme/bufferFill.ts b/src/theme/bufferFill.ts new file mode 100644 index 000000000..f63983ab8 --- /dev/null +++ b/src/theme/bufferFill.ts @@ -0,0 +1,8 @@ +import { Buffer } from 'buffer' + +if (typeof window !== 'undefined') { + //@ts-ignore + window.Buffer = Buffer +} else { + global.Buffer = Buffer +} diff --git a/src/theme/components/Alert.tsx b/src/theme/components/Alert.tsx new file mode 100644 index 000000000..b51582ac6 --- /dev/null +++ b/src/theme/components/Alert.tsx @@ -0,0 +1,16 @@ +import React from 'react' +import { FaExclamationCircle } from 'react-icons/fa' + +export const AlertIcon: React.FunctionComponent = () => { + return +} + +export const Alert: React.FunctionComponent<{ + children: React.ReactNode +}> = ({ children }) => { + return ( +
+ {children} +
+ ) +} diff --git a/src/theme/components/Button.tsx b/src/theme/components/Button.tsx new file mode 100644 index 000000000..96918ede9 --- /dev/null +++ b/src/theme/components/Button.tsx @@ -0,0 +1,36 @@ +import React from 'react' +import { CgSpinner } from 'react-icons/cg' +import { Flex } from './Flex' +import { Icon } from './Icon' + +export const Button: React.FunctionComponent<{ + colorScheme?: string + isLoading?: boolean + onClick?: () => void + isDisabled?: boolean + leftIcon?: React.ReactNode + w?: string + children: React.ReactNode + mr?: number + size?: string + mt?: number +}> = ({ colorScheme, isLoading, onClick, isDisabled, leftIcon, children, w, mr, mt, size }) => { + return ( + + ) +} diff --git a/src/theme/components/Checkbox.tsx b/src/theme/components/Checkbox.tsx new file mode 100644 index 000000000..6b171a01b --- /dev/null +++ b/src/theme/components/Checkbox.tsx @@ -0,0 +1,15 @@ +import React from 'react' +import { Flex } from './Flex' + +export const Checkbox: React.FunctionComponent<{ + onChange?: (e: React.ChangeEvent) => void + isChecked?: boolean + children?: React.ReactNode +}> = ({ isChecked, onChange, children }) => { + return ( + + + {children} + + ) +} diff --git a/src/theme/components/Flex.tsx b/src/theme/components/Flex.tsx new file mode 100644 index 000000000..00169e4d3 --- /dev/null +++ b/src/theme/components/Flex.tsx @@ -0,0 +1,33 @@ +import React from 'react' + +export const Flex: React.FunctionComponent<{ + mt?: number + mr?: number + px?: number + py?: number + align?: string + width?: string + flexDirection?: 'row' | 'row-reverse' | 'column' | 'column-reverse' + justify?: string + children?: React.ReactNode +}> = ({ align, children, px, mt, mr, py, width, flexDirection, justify }) => { + return ( +
+ {children} +
+ ) +} diff --git a/src/theme/components/Icon.tsx b/src/theme/components/Icon.tsx new file mode 100644 index 000000000..cd098e820 --- /dev/null +++ b/src/theme/components/Icon.tsx @@ -0,0 +1,13 @@ +import React from 'react' + +export const Icon: React.FunctionComponent<{ spin?: boolean; mr?: number; as: any }> = ({ + spin, + as: children, + mr, +}) => { + return ( +
+ {React.createElement(children)} +
+ ) +} diff --git a/src/theme/components/Wallet.tsx b/src/theme/components/Wallet.tsx new file mode 100644 index 000000000..2fd216173 --- /dev/null +++ b/src/theme/components/Wallet.tsx @@ -0,0 +1,77 @@ +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import { AccountProvider } from '@helium/account-fetch-cache-hooks' +import { LedgerWalletAdapter } from '@solana/wallet-adapter-ledger' +import { SolflareWalletAdapter } from '@solana/wallet-adapter-solflare' +import { PhantomWalletAdapter } from '@solana/wallet-adapter-phantom' +import { + ConnectionProvider, + WalletProvider, + useConnection +} from '@solana/wallet-adapter-react' +import { WalletModalProvider, WalletMultiButton } from '@solana/wallet-adapter-react-ui' +import React, { useMemo } from 'react' + +const WalletImpl: React.FC = ({ children }: { children: any }) => { + const { siteConfig } = useDocusaurusContext() + const endpoint = siteConfig.customFields.SOLANA_URL! + + const wallets = useMemo( + () => [ + /** + * Wallets that implement either of these standards will be available automatically. + * + * - Solana Mobile Stack Mobile Wallet Adapter Protocol + * (https://github.com/solana-mobile/mobile-wallet-adapter) + * - Solana Wallet Standard + * (https://github.com/solana-labs/wallet-standard) + * + * If you wish to support a wallet that supports neither of those standards, + * instantiate its legacy wallet adapter here. Common legacy adapters can be found + * in the npm package `@solana/wallet-adapter-wallets`. + */ + // Phantom and backpack already supported in wallet standard, so they should show up. + new LedgerWalletAdapter(), + new PhantomWalletAdapter(), + new SolflareWalletAdapter(), + ], + // eslint-disable-next-line react-hooks/exhaustive-deps + [endpoint], + ) + + return ( + + + + + {/* Your app's components go here, nested within the context providers. */} + {children} + + + + ) +} + +function ClientOnly({ children }) { + if (typeof window === 'undefined') { + return null + } + + return children +} + +export const Wallet = ({ children }) => { + return ( + + {children} + + ) +} + +export const WrapWithAccountProvider: React.FC = ({ children }) => { + const { connection } = useConnection() + return ( + + {children} + + ) +} \ No newline at end of file diff --git a/static/Helium_Txns_Archive.torrent b/static/Helium_Txns_Archive.torrent new file mode 100644 index 000000000..ac343f631 Binary files /dev/null and b/static/Helium_Txns_Archive.torrent differ diff --git a/static/helium-l1-archive-postgres.torrent b/static/helium-l1-archive-postgres.torrent new file mode 100755 index 000000000..928d00c88 Binary files /dev/null and b/static/helium-l1-archive-postgres.torrent differ diff --git a/static/img/5g-on-helium/mobile-header.png b/static/img/5g-on-helium/mobile-header.png new file mode 100644 index 000000000..b8684fa3d Binary files /dev/null and b/static/img/5g-on-helium/mobile-header.png differ diff --git a/static/img/app-store-badges/apple-app-store-badge-en.svg b/static/img/app-store-badges/apple-app-store-badge-en.svg new file mode 100644 index 000000000..e1d7e8e24 --- /dev/null +++ b/static/img/app-store-badges/apple-app-store-badge-en.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/app-store-badges/google-play-store-badge-en.svg b/static/img/app-store-badges/google-play-store-badge-en.svg new file mode 100644 index 000000000..2beada598 --- /dev/null +++ b/static/img/app-store-badges/google-play-store-badge-en.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/banner-home.jpg b/static/img/banner-home.jpg deleted file mode 100644 index 03249cb62..000000000 Binary files a/static/img/banner-home.jpg and /dev/null differ diff --git a/static/img/blockchain/SphereDC.png b/static/img/blockchain/SphereDC.png new file mode 100644 index 000000000..d2dafb1db Binary files /dev/null and b/static/img/blockchain/SphereDC.png differ diff --git a/static/img/blockchain/blockchainicon.png b/static/img/blockchain/blockchainicon.png deleted file mode 100644 index af636df5d..000000000 Binary files a/static/img/blockchain/blockchainicon.png and /dev/null differ diff --git a/static/img/blockchain/consensus.png b/static/img/blockchain/consensus.png deleted file mode 100644 index f5d9f1bb0..000000000 Binary files a/static/img/blockchain/consensus.png and /dev/null differ diff --git a/static/img/blockchain/fees.png b/static/img/blockchain/fees.png index 31b5dd789..1e06054c5 100644 Binary files a/static/img/blockchain/fees.png and b/static/img/blockchain/fees.png differ diff --git a/static/img/blockchain/heliumtoken.png b/static/img/blockchain/heliumtoken.png index 004154e73..499c06a97 100644 Binary files a/static/img/blockchain/heliumtoken.png and b/static/img/blockchain/heliumtoken.png differ diff --git a/static/img/blockchain/mining.png b/static/img/blockchain/mining.png deleted file mode 100644 index 57f970822..000000000 Binary files a/static/img/blockchain/mining.png and /dev/null differ diff --git a/static/img/blockchain/oracle.png b/static/img/blockchain/oracle.png deleted file mode 100644 index 108624099..000000000 Binary files a/static/img/blockchain/oracle.png and /dev/null differ diff --git a/static/img/blockchain/packetpurchasing.png b/static/img/blockchain/packetpurchasing.png deleted file mode 100644 index 9edeb6a50..000000000 Binary files a/static/img/blockchain/packetpurchasing.png and /dev/null differ diff --git a/static/img/blockchain/primitives.png b/static/img/blockchain/primitives.png deleted file mode 100644 index 6f1953abf..000000000 Binary files a/static/img/blockchain/primitives.png and /dev/null differ diff --git a/static/img/blockchain/proofofcoverage.png b/static/img/blockchain/proofofcoverage.png deleted file mode 100644 index 0b1d1720f..000000000 Binary files a/static/img/blockchain/proofofcoverage.png and /dev/null differ diff --git a/static/img/community/community.png b/static/img/community/community.png deleted file mode 100644 index 51f20cdab..000000000 Binary files a/static/img/community/community.png and /dev/null differ diff --git a/static/img/dcportal/dcportal-main-new.png b/static/img/dcportal/dcportal-main-new.png new file mode 100644 index 000000000..d194e7aca Binary files /dev/null and b/static/img/dcportal/dcportal-main-new.png differ diff --git a/static/img/dcportal/invoice-new.png b/static/img/dcportal/invoice-new.png new file mode 100644 index 000000000..f7c746388 Binary files /dev/null and b/static/img/dcportal/invoice-new.png differ diff --git a/static/img/dcportal/link-onramp-new.png b/static/img/dcportal/link-onramp-new.png new file mode 100644 index 000000000..0ef033cf0 Binary files /dev/null and b/static/img/dcportal/link-onramp-new.png differ diff --git a/static/img/dcportal/loading.png b/static/img/dcportal/loading.png new file mode 100644 index 000000000..2caf34321 Binary files /dev/null and b/static/img/dcportal/loading.png differ diff --git a/static/img/dcportal/ouipreview-new.png b/static/img/dcportal/ouipreview-new.png new file mode 100644 index 000000000..95b7bbcc2 Binary files /dev/null and b/static/img/dcportal/ouipreview-new.png differ diff --git a/static/img/dcportal/purchase-confirmed.png b/static/img/dcportal/purchase-confirmed.png new file mode 100644 index 000000000..6670bd2a0 Binary files /dev/null and b/static/img/dcportal/purchase-confirmed.png differ diff --git a/static/img/dcportal/txn.png b/static/img/dcportal/txn.png new file mode 100644 index 000000000..9bcd19cd5 Binary files /dev/null and b/static/img/dcportal/txn.png differ diff --git a/static/img/home/blockchainicon.png b/static/img/home/blockchainicon.png deleted file mode 100644 index f30d2e5fd..000000000 Binary files a/static/img/home/blockchainicon.png and /dev/null differ diff --git a/static/img/home/cli.svg b/static/img/home/cli.svg deleted file mode 100644 index cffaf7950..000000000 --- a/static/img/home/cli.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/static/img/home/communityicon.png b/static/img/home/communityicon.png deleted file mode 100644 index aa262a099..000000000 Binary files a/static/img/home/communityicon.png and /dev/null differ diff --git a/static/img/home/console.svg b/static/img/home/console.svg deleted file mode 100644 index fadfd15ea..000000000 --- a/static/img/home/console.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/static/img/home/docsheader.png b/static/img/home/docsheader.png index 3cd4a9ded..af9147d2b 100644 Binary files a/static/img/home/docsheader.png and b/static/img/home/docsheader.png differ diff --git a/static/img/home/explorer.svg b/static/img/home/explorer.svg deleted file mode 100644 index beb00e687..000000000 --- a/static/img/home/explorer.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/home/insiders.svg b/static/img/home/insiders.svg deleted file mode 100644 index 2414fe84e..000000000 --- a/static/img/home/insiders.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/static/img/home/logo black.svg b/static/img/home/logo black.svg deleted file mode 100644 index 60a59e836..000000000 --- a/static/img/home/logo black.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/static/img/home/logo white.svg b/static/img/home/logo white.svg deleted file mode 100644 index e3edf955b..000000000 --- a/static/img/home/logo white.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/static/img/home/longfi.svg b/static/img/home/longfi.svg deleted file mode 100644 index 5765719c7..000000000 --- a/static/img/home/longfi.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/static/img/home/mappers.svg b/static/img/home/mappers.svg deleted file mode 100644 index 74f56ba7a..000000000 --- a/static/img/home/mappers.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/static/img/home/mineicon.png b/static/img/home/mineicon.png deleted file mode 100644 index d7eed100b..000000000 Binary files a/static/img/home/mineicon.png and /dev/null differ diff --git a/static/img/home/patrons.svg b/static/img/home/patrons.svg deleted file mode 100644 index d5e74d6b5..000000000 --- a/static/img/home/patrons.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/static/img/home/useicon.png b/static/img/home/useicon.png deleted file mode 100644 index 0b797b7ec..000000000 Binary files a/static/img/home/useicon.png and /dev/null differ diff --git a/static/img/home/walletapp.svg b/static/img/home/walletapp.svg deleted file mode 100644 index 92f5b3150..000000000 --- a/static/img/home/walletapp.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/static/img/icons/announcement.svg b/static/img/icons/announcement.svg deleted file mode 100644 index 794d74c11..000000000 --- a/static/img/icons/announcement.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/img/icons/docicon.svg b/static/img/icons/docicon.svg deleted file mode 100644 index 1fd9393a0..000000000 --- a/static/img/icons/docicon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/img/icons/dociconblue.svg b/static/img/icons/dociconblue.svg deleted file mode 100644 index e3c7b7a25..000000000 --- a/static/img/icons/dociconblue.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/static/img/icons/docicongreen.svg b/static/img/icons/docicongreen.svg deleted file mode 100644 index dccfe854b..000000000 --- a/static/img/icons/docicongreen.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/static/img/icons/dociconred.svg b/static/img/icons/dociconred.svg deleted file mode 100644 index 92968078a..000000000 --- a/static/img/icons/dociconred.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/static/img/icons/linkarrow.svg b/static/img/icons/linkarrow.svg index 12ad9fe37..46f8b1b7d 100644 --- a/static/img/icons/linkarrow.svg +++ b/static/img/icons/linkarrow.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/static/img/icons/linkarrowblue.svg b/static/img/icons/linkarrowblue.svg index 00673c8bd..2893024a7 100644 --- a/static/img/icons/linkarrowblue.svg +++ b/static/img/icons/linkarrowblue.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/static/img/icons/linkarrowgreen.svg b/static/img/icons/linkarrowgreen.svg index e831c6b8c..bf6e41056 100644 --- a/static/img/icons/linkarrowgreen.svg +++ b/static/img/icons/linkarrowgreen.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/static/img/icons/linkarrowred.svg b/static/img/icons/linkarrowred.svg index fdaccbae4..117ebc1ca 100644 --- a/static/img/icons/linkarrowred.svg +++ b/static/img/icons/linkarrowred.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/static/img/icons/linkarrowwhite.svg b/static/img/icons/linkarrowwhite.svg index 2c54b210a..625abbb52 100644 --- a/static/img/icons/linkarrowwhite.svg +++ b/static/img/icons/linkarrowwhite.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/static/img/icons/logo.svg b/static/img/icons/logo.svg index eb3e833c3..4a2d15d3a 100644 --- a/static/img/icons/logo.svg +++ b/static/img/icons/logo.svg @@ -1,9 +1 @@ - - - Combined Shape - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/static/img/icons/logo_docs_black.svg b/static/img/icons/logo_docs_black.svg new file mode 100644 index 000000000..743d4f0da --- /dev/null +++ b/static/img/icons/logo_docs_black.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/static/img/icons/logo_docs_white.svg b/static/img/icons/logo_docs_white.svg new file mode 100644 index 000000000..32288035a --- /dev/null +++ b/static/img/icons/logo_docs_white.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/static/img/icons/logoblack.svg b/static/img/icons/logoblack.svg index 270612dc2..e683f76cd 100644 --- a/static/img/icons/logoblack.svg +++ b/static/img/icons/logoblack.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/static/img/icons/logowhite.svg b/static/img/icons/logowhite.svg index e3edf955b..ee92e556e 100644 --- a/static/img/icons/logowhite.svg +++ b/static/img/icons/logowhite.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/static/img/icons/mode.svg b/static/img/icons/mode.svg index 8e2290536..35d4b6ac7 100644 --- a/static/img/icons/mode.svg +++ b/static/img/icons/mode.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/static/img/iot-data-only/dragino/dragino-guide-lora-config-US915.png b/static/img/iot-data-only/dragino/dragino-guide-lora-config-US915.png new file mode 100644 index 000000000..e8c74891f Binary files /dev/null and b/static/img/iot-data-only/dragino/dragino-guide-lora-config-US915.png differ diff --git a/static/img/iot-data-only/dragino/dragino-guide-lorawan-server-settings.png b/static/img/iot-data-only/dragino/dragino-guide-lorawan-server-settings.png new file mode 100644 index 000000000..ff2f9a741 Binary files /dev/null and b/static/img/iot-data-only/dragino/dragino-guide-lorawan-server-settings.png differ diff --git a/static/img/iot-data-only/rak-concentrators/rak-concentrators-guide-gateway-config-interface-region-plan.png b/static/img/iot-data-only/rak-concentrators/rak-concentrators-guide-gateway-config-interface-region-plan.png new file mode 100644 index 000000000..0b02b8cb3 Binary files /dev/null and b/static/img/iot-data-only/rak-concentrators/rak-concentrators-guide-gateway-config-interface-region-plan.png differ diff --git a/static/img/iot-data-only/rak-concentrators/rak-concentrators-guide-packet-forwarder-settings.png b/static/img/iot-data-only/rak-concentrators/rak-concentrators-guide-packet-forwarder-settings.png new file mode 100644 index 000000000..25300b79d Binary files /dev/null and b/static/img/iot-data-only/rak-concentrators/rak-concentrators-guide-packet-forwarder-settings.png differ diff --git a/static/img/link-image.png b/static/img/link-image.png new file mode 100644 index 000000000..5fa6e19d2 Binary files /dev/null and b/static/img/link-image.png differ diff --git a/static/img/linkarrowwhite.svg b/static/img/linkarrowwhite.svg deleted file mode 100644 index 2c54b210a..000000000 --- a/static/img/linkarrowwhite.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/img/lorawan-on-helium/lorawanheader.png b/static/img/lorawan-on-helium/lorawanheader.png deleted file mode 100644 index d28363ed4..000000000 Binary files a/static/img/lorawan-on-helium/lorawanheader.png and /dev/null differ diff --git a/static/img/lorawan-on-helium/roaming-arch.png b/static/img/lorawan-on-helium/roaming-arch.png deleted file mode 100644 index d1d9f1db6..000000000 Binary files a/static/img/lorawan-on-helium/roaming-arch.png and /dev/null differ diff --git a/static/img/mine-hnt/dev-timeline-light-hotspots.png b/static/img/mine-hnt/dev-timeline-light-hotspots.png deleted file mode 100644 index f61fe04d7..000000000 Binary files a/static/img/mine-hnt/dev-timeline-light-hotspots.png and /dev/null differ diff --git a/static/img/mine-hnt/guides/dragino-guide-lora-config-US915.png b/static/img/mine-hnt/guides/dragino-guide-lora-config-US915.png deleted file mode 100644 index 92e9afe8f..000000000 Binary files a/static/img/mine-hnt/guides/dragino-guide-lora-config-US915.png and /dev/null differ diff --git a/static/img/mine-hnt/guides/dragino-guide-lorawan-server-settings.png b/static/img/mine-hnt/guides/dragino-guide-lorawan-server-settings.png deleted file mode 100644 index 67f100bba..000000000 Binary files a/static/img/mine-hnt/guides/dragino-guide-lorawan-server-settings.png and /dev/null differ diff --git a/static/img/mine-hnt/guides/rak-concentrators-guide-console-events.png b/static/img/mine-hnt/guides/rak-concentrators-guide-console-events.png deleted file mode 100644 index 6472511ef..000000000 Binary files a/static/img/mine-hnt/guides/rak-concentrators-guide-console-events.png and /dev/null differ diff --git a/static/img/mine-hnt/guides/rak-concentrators-guide-gateway-config-interface-region-plan.png b/static/img/mine-hnt/guides/rak-concentrators-guide-gateway-config-interface-region-plan.png deleted file mode 100644 index db88a0763..000000000 Binary files a/static/img/mine-hnt/guides/rak-concentrators-guide-gateway-config-interface-region-plan.png and /dev/null differ diff --git a/static/img/mine-hnt/guides/rak-concentrators-guide-gateway-config-interface.png b/static/img/mine-hnt/guides/rak-concentrators-guide-gateway-config-interface.png deleted file mode 100644 index 2c7c00064..000000000 Binary files a/static/img/mine-hnt/guides/rak-concentrators-guide-gateway-config-interface.png and /dev/null differ diff --git a/static/img/mine-hnt/guides/rak-concentrators-guide-packet-forwarder-settings.png b/static/img/mine-hnt/guides/rak-concentrators-guide-packet-forwarder-settings.png deleted file mode 100644 index dab44e67b..000000000 Binary files a/static/img/mine-hnt/guides/rak-concentrators-guide-packet-forwarder-settings.png and /dev/null differ diff --git a/static/img/mine-hnt/light-hotspot-table.png b/static/img/mine-hnt/light-hotspot-table.png deleted file mode 100644 index 0d2f5ff01..000000000 Binary files a/static/img/mine-hnt/light-hotspot-table.png and /dev/null differ diff --git a/static/img/mine-hnt/mine-hnt-arch.png b/static/img/mine-hnt/mine-hnt-arch.png deleted file mode 100644 index 35dd5c690..000000000 Binary files a/static/img/mine-hnt/mine-hnt-arch.png and /dev/null differ diff --git a/static/img/mine-hnt/minehnticon.png b/static/img/mine-hnt/minehnticon.png deleted file mode 100644 index e3a2d4222..000000000 Binary files a/static/img/mine-hnt/minehnticon.png and /dev/null differ diff --git a/static/img/mine-hnt/mint-hnt-hotspot.jpg b/static/img/mine-hnt/mint-hnt-hotspot.jpg deleted file mode 100644 index 854ba2d3a..000000000 Binary files a/static/img/mine-hnt/mint-hnt-hotspot.jpg and /dev/null differ diff --git a/static/img/mine-hnt/prebuilt-hotspots/helium-hotspot.png b/static/img/mine-hnt/prebuilt-hotspots/helium-hotspot.png deleted file mode 100644 index 08aa1ee46..000000000 Binary files a/static/img/mine-hnt/prebuilt-hotspots/helium-hotspot.png and /dev/null differ diff --git a/static/img/mine-hnt/prebuilt-hotspots/rak-hotspot-miner.png b/static/img/mine-hnt/prebuilt-hotspots/rak-hotspot-miner.png deleted file mode 100644 index 689c4b151..000000000 Binary files a/static/img/mine-hnt/prebuilt-hotspots/rak-hotspot-miner.png and /dev/null differ diff --git a/static/img/mine-hnt/qr-onboarding-1.png b/static/img/mine-hnt/qr-onboarding-1.png deleted file mode 100644 index 30ad7e1d0..000000000 Binary files a/static/img/mine-hnt/qr-onboarding-1.png and /dev/null differ diff --git a/static/img/mine-hnt/qr-onboarding-2.png b/static/img/mine-hnt/qr-onboarding-2.png deleted file mode 100644 index 5f523f7f2..000000000 Binary files a/static/img/mine-hnt/qr-onboarding-2.png and /dev/null differ diff --git a/static/img/mine-hnt/run-a-miner-security-group.png b/static/img/mine-hnt/run-a-miner-security-group.png deleted file mode 100644 index 708b35375..000000000 Binary files a/static/img/mine-hnt/run-a-miner-security-group.png and /dev/null differ diff --git a/static/img/mine-hnt/validator-hotspot-dev.jpg b/static/img/mine-hnt/validator-hotspot-dev.jpg deleted file mode 100644 index 1013989cb..000000000 Binary files a/static/img/mine-hnt/validator-hotspot-dev.jpg and /dev/null differ diff --git a/static/img/mine-hnt/validators.png b/static/img/mine-hnt/validators.png deleted file mode 100644 index 4fabbc45a..000000000 Binary files a/static/img/mine-hnt/validators.png and /dev/null differ diff --git a/static/img/mobile-data-only/aruba-central/1-navigate-to-certs.png b/static/img/mobile-data-only/aruba-central/1-navigate-to-certs.png new file mode 100644 index 000000000..fdf8b4554 Binary files /dev/null and b/static/img/mobile-data-only/aruba-central/1-navigate-to-certs.png differ diff --git a/static/img/mobile-data-only/aruba-central/10-advanced-settings.png b/static/img/mobile-data-only/aruba-central/10-advanced-settings.png new file mode 100644 index 000000000..73f7fe69b Binary files /dev/null and b/static/img/mobile-data-only/aruba-central/10-advanced-settings.png differ diff --git a/static/img/mobile-data-only/aruba-central/2-certs-page.png b/static/img/mobile-data-only/aruba-central/2-certs-page.png new file mode 100644 index 000000000..c0117781a Binary files /dev/null and b/static/img/mobile-data-only/aruba-central/2-certs-page.png differ diff --git a/static/img/mobile-data-only/aruba-central/3-insert-certs.png b/static/img/mobile-data-only/aruba-central/3-insert-certs.png new file mode 100644 index 000000000..9bc38fcbb Binary files /dev/null and b/static/img/mobile-data-only/aruba-central/3-insert-certs.png differ diff --git a/static/img/mobile-data-only/aruba-central/4-insert-server-cert.png b/static/img/mobile-data-only/aruba-central/4-insert-server-cert.png new file mode 100644 index 000000000..74474fa3e Binary files /dev/null and b/static/img/mobile-data-only/aruba-central/4-insert-server-cert.png differ diff --git a/static/img/mobile-data-only/aruba-central/5-ssid-wlan.png b/static/img/mobile-data-only/aruba-central/5-ssid-wlan.png new file mode 100644 index 000000000..4786c097a Binary files /dev/null and b/static/img/mobile-data-only/aruba-central/5-ssid-wlan.png differ diff --git a/static/img/mobile-data-only/aruba-central/6-radius-server.png b/static/img/mobile-data-only/aruba-central/6-radius-server.png new file mode 100644 index 000000000..45d94cec9 Binary files /dev/null and b/static/img/mobile-data-only/aruba-central/6-radius-server.png differ diff --git a/static/img/mobile-data-only/aruba-central/7-passpoint-settings.png b/static/img/mobile-data-only/aruba-central/7-passpoint-settings.png new file mode 100644 index 000000000..5921f3d8b Binary files /dev/null and b/static/img/mobile-data-only/aruba-central/7-passpoint-settings.png differ diff --git a/static/img/mobile-data-only/aruba-central/8-nai-realms.png b/static/img/mobile-data-only/aruba-central/8-nai-realms.png new file mode 100644 index 000000000..4c0507759 Binary files /dev/null and b/static/img/mobile-data-only/aruba-central/8-nai-realms.png differ diff --git a/static/img/mobile-data-only/aruba-central/9-nai-realms-2.png b/static/img/mobile-data-only/aruba-central/9-nai-realms-2.png new file mode 100644 index 000000000..f96a7c961 Binary files /dev/null and b/static/img/mobile-data-only/aruba-central/9-nai-realms-2.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image1.png b/static/img/mobile-data-only/aruba/Aruba-image1.png new file mode 100644 index 000000000..53d6c9778 Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image1.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image10.png b/static/img/mobile-data-only/aruba/Aruba-image10.png new file mode 100644 index 000000000..4b5e2f9b7 Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image10.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image11.png b/static/img/mobile-data-only/aruba/Aruba-image11.png new file mode 100644 index 000000000..120859bd7 Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image11.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image12.png b/static/img/mobile-data-only/aruba/Aruba-image12.png new file mode 100644 index 000000000..e974775e4 Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image12.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image13.png b/static/img/mobile-data-only/aruba/Aruba-image13.png new file mode 100644 index 000000000..065152b88 Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image13.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image14.png b/static/img/mobile-data-only/aruba/Aruba-image14.png new file mode 100644 index 000000000..f9905d5dd Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image14.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image15.png b/static/img/mobile-data-only/aruba/Aruba-image15.png new file mode 100644 index 000000000..d8ed118b4 Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image15.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image16.png b/static/img/mobile-data-only/aruba/Aruba-image16.png new file mode 100644 index 000000000..4a74242cb Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image16.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image17.png b/static/img/mobile-data-only/aruba/Aruba-image17.png new file mode 100644 index 000000000..382fbd271 Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image17.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image18.png b/static/img/mobile-data-only/aruba/Aruba-image18.png new file mode 100644 index 000000000..a7e768f5c Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image18.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image2.png b/static/img/mobile-data-only/aruba/Aruba-image2.png new file mode 100644 index 000000000..c6d67e39e Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image2.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image3.png b/static/img/mobile-data-only/aruba/Aruba-image3.png new file mode 100644 index 000000000..55db17159 Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image3.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image4.png b/static/img/mobile-data-only/aruba/Aruba-image4.png new file mode 100644 index 000000000..e8a9b7f1e Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image4.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image5.png b/static/img/mobile-data-only/aruba/Aruba-image5.png new file mode 100644 index 000000000..1804386c1 Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image5.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image6.png b/static/img/mobile-data-only/aruba/Aruba-image6.png new file mode 100644 index 000000000..aea85773c Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image6.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image7.png b/static/img/mobile-data-only/aruba/Aruba-image7.png new file mode 100644 index 000000000..1c299378a Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image7.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image8.png b/static/img/mobile-data-only/aruba/Aruba-image8.png new file mode 100644 index 000000000..462d1f48f Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image8.png differ diff --git a/static/img/mobile-data-only/aruba/Aruba-image9.png b/static/img/mobile-data-only/aruba/Aruba-image9.png new file mode 100644 index 000000000..f57ef9a7d Binary files /dev/null and b/static/img/mobile-data-only/aruba/Aruba-image9.png differ diff --git a/static/img/mobile-data-only/cambium/cambium-aaa-settings.png b/static/img/mobile-data-only/cambium/cambium-aaa-settings.png new file mode 100644 index 000000000..5d833cbce Binary files /dev/null and b/static/img/mobile-data-only/cambium/cambium-aaa-settings.png differ diff --git a/static/img/mobile-data-only/cambium/cambium-ap-group.png b/static/img/mobile-data-only/cambium/cambium-ap-group.png new file mode 100644 index 000000000..0a692c044 Binary files /dev/null and b/static/img/mobile-data-only/cambium/cambium-ap-group.png differ diff --git a/static/img/mobile-data-only/cambium/cambium-final-step.png b/static/img/mobile-data-only/cambium/cambium-final-step.png new file mode 100644 index 000000000..5213afb07 Binary files /dev/null and b/static/img/mobile-data-only/cambium/cambium-final-step.png differ diff --git a/static/img/mobile-data-only/cambium/cambium-home-page.png b/static/img/mobile-data-only/cambium/cambium-home-page.png new file mode 100644 index 000000000..599ed4523 Binary files /dev/null and b/static/img/mobile-data-only/cambium/cambium-home-page.png differ diff --git a/static/img/mobile-data-only/cambium/cambium-ipv.png b/static/img/mobile-data-only/cambium/cambium-ipv.png new file mode 100644 index 000000000..b0158b799 Binary files /dev/null and b/static/img/mobile-data-only/cambium/cambium-ipv.png differ diff --git a/static/img/mobile-data-only/cambium/cambium-passpoint.png b/static/img/mobile-data-only/cambium/cambium-passpoint.png new file mode 100644 index 000000000..5311dbdb2 Binary files /dev/null and b/static/img/mobile-data-only/cambium/cambium-passpoint.png differ diff --git a/static/img/mobile-data-only/cambium/cambium-wlan-settings.png b/static/img/mobile-data-only/cambium/cambium-wlan-settings.png new file mode 100644 index 000000000..6ab693d78 Binary files /dev/null and b/static/img/mobile-data-only/cambium/cambium-wlan-settings.png differ diff --git a/static/img/mobile-data-only/cisco-5520/Cisco-5520-1.png b/static/img/mobile-data-only/cisco-5520/Cisco-5520-1.png new file mode 100644 index 000000000..bbb04edef Binary files /dev/null and b/static/img/mobile-data-only/cisco-5520/Cisco-5520-1.png differ diff --git a/static/img/mobile-data-only/cisco-5520/Cisco-5520-2.png b/static/img/mobile-data-only/cisco-5520/Cisco-5520-2.png new file mode 100644 index 000000000..e4a87fa04 Binary files /dev/null and b/static/img/mobile-data-only/cisco-5520/Cisco-5520-2.png differ diff --git a/static/img/mobile-data-only/cisco-5520/Cisco-5520-3.png b/static/img/mobile-data-only/cisco-5520/Cisco-5520-3.png new file mode 100644 index 000000000..12aebea19 Binary files /dev/null and b/static/img/mobile-data-only/cisco-5520/Cisco-5520-3.png differ diff --git a/static/img/mobile-data-only/cisco-5520/Cisco-5520-4.png b/static/img/mobile-data-only/cisco-5520/Cisco-5520-4.png new file mode 100644 index 000000000..562a3e034 Binary files /dev/null and b/static/img/mobile-data-only/cisco-5520/Cisco-5520-4.png differ diff --git a/static/img/mobile-data-only/cisco-5520/Cisco-5520-5.png b/static/img/mobile-data-only/cisco-5520/Cisco-5520-5.png new file mode 100644 index 000000000..fb46549fb Binary files /dev/null and b/static/img/mobile-data-only/cisco-5520/Cisco-5520-5.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-1.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-1.png new file mode 100644 index 000000000..a90a716ec Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-1.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-10.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-10.png new file mode 100644 index 000000000..4b35e4c86 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-10.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-11.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-11.png new file mode 100644 index 000000000..396430279 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-11.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-12.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-12.png new file mode 100644 index 000000000..c77bcd8cc Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-12.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-13.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-13.png new file mode 100644 index 000000000..5a8f0629f Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-13.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-14.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-14.png new file mode 100644 index 000000000..940f75742 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-14.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-15.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-15.png new file mode 100644 index 000000000..168255f09 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-15.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-16.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-16.png new file mode 100644 index 000000000..3053a87d1 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-16.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-17.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-17.png new file mode 100644 index 000000000..2e4dbcc60 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-17.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-18.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-18.png new file mode 100644 index 000000000..cccc0f0ca Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-18.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-19.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-19.png new file mode 100644 index 000000000..7d454a703 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-19.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-2.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-2.png new file mode 100644 index 000000000..ffe6e3a60 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-2.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-20.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-20.png new file mode 100644 index 000000000..3b1e7c204 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-20.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-21.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-21.png new file mode 100644 index 000000000..db49dd1b8 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-21.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-22.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-22.png new file mode 100644 index 000000000..61f2ea35e Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-22.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-23.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-23.png new file mode 100644 index 000000000..3a8028e1b Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-23.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-24.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-24.png new file mode 100644 index 000000000..1de301483 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-24.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-25.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-25.png new file mode 100644 index 000000000..2bd50c777 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-25.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-26.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-26.png new file mode 100644 index 000000000..177cc9b7b Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-26.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-27.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-27.png new file mode 100644 index 000000000..cf8cee7fa Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-27.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-28.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-28.png new file mode 100644 index 000000000..4e633fa8a Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-28.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-29.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-29.png new file mode 100644 index 000000000..9e6ad4369 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-29.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-3.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-3.png new file mode 100644 index 000000000..12833c1ea Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-3.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-30.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-30.png new file mode 100644 index 000000000..55b53b3f8 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-30.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-31.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-31.png new file mode 100644 index 000000000..d38fb171c Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-31.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-32.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-32.png new file mode 100644 index 000000000..0dcac1177 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-32.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-4.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-4.png new file mode 100644 index 000000000..315915d7b Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-4.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-5.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-5.png new file mode 100644 index 000000000..8f0dc4277 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-5.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-6.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-6.png new file mode 100644 index 000000000..07fcce38c Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-6.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-7.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-7.png new file mode 100644 index 000000000..f94500f43 Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-7.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-8.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-8.png new file mode 100644 index 000000000..934cb967b Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-8.png differ diff --git a/static/img/mobile-data-only/cisco-9800/Cisco-9800-9.png b/static/img/mobile-data-only/cisco-9800/Cisco-9800-9.png new file mode 100644 index 000000000..5d55d554b Binary files /dev/null and b/static/img/mobile-data-only/cisco-9800/Cisco-9800-9.png differ diff --git a/static/img/mobile-data-only/data-only-mobile-header.png b/static/img/mobile-data-only/data-only-mobile-header.png new file mode 100644 index 000000000..bb687d969 Binary files /dev/null and b/static/img/mobile-data-only/data-only-mobile-header.png differ diff --git a/static/img/mobile-data-only/juniper-mist/juniper-mist-create-passport.png b/static/img/mobile-data-only/juniper-mist/juniper-mist-create-passport.png new file mode 100644 index 000000000..e20206600 Binary files /dev/null and b/static/img/mobile-data-only/juniper-mist/juniper-mist-create-passport.png differ diff --git a/static/img/mobile-data-only/juniper-mist/juniper-mist-create-wlan.png b/static/img/mobile-data-only/juniper-mist/juniper-mist-create-wlan.png new file mode 100644 index 000000000..21968a758 Binary files /dev/null and b/static/img/mobile-data-only/juniper-mist/juniper-mist-create-wlan.png differ diff --git a/static/img/mobile-data-only/juniper-mist/juniper-mist-rad-sec-ap-cert.png b/static/img/mobile-data-only/juniper-mist/juniper-mist-rad-sec-ap-cert.png new file mode 100644 index 000000000..3ea0615f7 Binary files /dev/null and b/static/img/mobile-data-only/juniper-mist/juniper-mist-rad-sec-ap-cert.png differ diff --git a/static/img/mobile-data-only/juniper-mist/juniper-mist-radius-auth.png b/static/img/mobile-data-only/juniper-mist/juniper-mist-radius-auth.png new file mode 100644 index 000000000..bc7254bf0 Binary files /dev/null and b/static/img/mobile-data-only/juniper-mist/juniper-mist-radius-auth.png differ diff --git a/static/img/mobile-data-only/juniper-mist/juniper-mist-root-ca-cert.png b/static/img/mobile-data-only/juniper-mist/juniper-mist-root-ca-cert.png new file mode 100644 index 000000000..cd8042d7d Binary files /dev/null and b/static/img/mobile-data-only/juniper-mist/juniper-mist-root-ca-cert.png differ diff --git a/static/img/mobile-data-only/juniper-mist/juniper-mist-verify-connections.png b/static/img/mobile-data-only/juniper-mist/juniper-mist-verify-connections.png new file mode 100644 index 000000000..222845879 Binary files /dev/null and b/static/img/mobile-data-only/juniper-mist/juniper-mist-verify-connections.png differ diff --git a/static/img/mobile-data-only/meraki/Meraki-figure-1.png b/static/img/mobile-data-only/meraki/Meraki-figure-1.png new file mode 100644 index 000000000..022f30a15 Binary files /dev/null and b/static/img/mobile-data-only/meraki/Meraki-figure-1.png differ diff --git a/static/img/mobile-data-only/meraki/Meraki-figure-10.png b/static/img/mobile-data-only/meraki/Meraki-figure-10.png new file mode 100644 index 000000000..80a2d9bd4 Binary files /dev/null and b/static/img/mobile-data-only/meraki/Meraki-figure-10.png differ diff --git a/static/img/mobile-data-only/meraki/Meraki-figure-11.png b/static/img/mobile-data-only/meraki/Meraki-figure-11.png new file mode 100644 index 000000000..bf8846c87 Binary files /dev/null and b/static/img/mobile-data-only/meraki/Meraki-figure-11.png differ diff --git a/static/img/mobile-data-only/meraki/Meraki-figure-12.png b/static/img/mobile-data-only/meraki/Meraki-figure-12.png new file mode 100644 index 000000000..1f4340aaa Binary files /dev/null and b/static/img/mobile-data-only/meraki/Meraki-figure-12.png differ diff --git a/static/img/mobile-data-only/meraki/Meraki-figure-2.png b/static/img/mobile-data-only/meraki/Meraki-figure-2.png new file mode 100644 index 000000000..497d91b15 Binary files /dev/null and b/static/img/mobile-data-only/meraki/Meraki-figure-2.png differ diff --git a/static/img/mobile-data-only/meraki/Meraki-figure-3.png b/static/img/mobile-data-only/meraki/Meraki-figure-3.png new file mode 100644 index 000000000..e00141cf0 Binary files /dev/null and b/static/img/mobile-data-only/meraki/Meraki-figure-3.png differ diff --git a/static/img/mobile-data-only/meraki/Meraki-figure-4.png b/static/img/mobile-data-only/meraki/Meraki-figure-4.png new file mode 100644 index 000000000..5b468e410 Binary files /dev/null and b/static/img/mobile-data-only/meraki/Meraki-figure-4.png differ diff --git a/static/img/mobile-data-only/meraki/Meraki-figure-5.png b/static/img/mobile-data-only/meraki/Meraki-figure-5.png new file mode 100644 index 000000000..fbb7195c4 Binary files /dev/null and b/static/img/mobile-data-only/meraki/Meraki-figure-5.png differ diff --git a/static/img/mobile-data-only/meraki/Meraki-figure-6.png b/static/img/mobile-data-only/meraki/Meraki-figure-6.png new file mode 100644 index 000000000..d60310757 Binary files /dev/null and b/static/img/mobile-data-only/meraki/Meraki-figure-6.png differ diff --git a/static/img/mobile-data-only/meraki/Meraki-figure-7.png b/static/img/mobile-data-only/meraki/Meraki-figure-7.png new file mode 100644 index 000000000..e2072e3a3 Binary files /dev/null and b/static/img/mobile-data-only/meraki/Meraki-figure-7.png differ diff --git a/static/img/mobile-data-only/meraki/Meraki-figure-8.png b/static/img/mobile-data-only/meraki/Meraki-figure-8.png new file mode 100644 index 000000000..92fa38324 Binary files /dev/null and b/static/img/mobile-data-only/meraki/Meraki-figure-8.png differ diff --git a/static/img/mobile-data-only/mikrotik/add-radsec.png b/static/img/mobile-data-only/mikrotik/add-radsec.png new file mode 100644 index 000000000..78cb20541 Binary files /dev/null and b/static/img/mobile-data-only/mikrotik/add-radsec.png differ diff --git a/static/img/mobile-data-only/mikrotik/edit-aaa.png b/static/img/mobile-data-only/mikrotik/edit-aaa.png new file mode 100644 index 000000000..b754942cc Binary files /dev/null and b/static/img/mobile-data-only/mikrotik/edit-aaa.png differ diff --git a/static/img/mobile-data-only/mikrotik/interworking.png b/static/img/mobile-data-only/mikrotik/interworking.png new file mode 100644 index 000000000..4d96d6fa4 Binary files /dev/null and b/static/img/mobile-data-only/mikrotik/interworking.png differ diff --git a/static/img/mobile-data-only/mikrotik/new-radius.png b/static/img/mobile-data-only/mikrotik/new-radius.png new file mode 100644 index 000000000..5fdaf92af Binary files /dev/null and b/static/img/mobile-data-only/mikrotik/new-radius.png differ diff --git a/static/img/mobile-data-only/mikrotik/new-wifi.png b/static/img/mobile-data-only/mikrotik/new-wifi.png new file mode 100644 index 000000000..8632cea96 Binary files /dev/null and b/static/img/mobile-data-only/mikrotik/new-wifi.png differ diff --git a/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Independent sites many RSPs.png b/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Independent sites many RSPs.png new file mode 100644 index 000000000..12dcaf63b Binary files /dev/null and b/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Independent sites many RSPs.png differ diff --git a/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Independent sites many VPNs.png b/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Independent sites many VPNs.png new file mode 100644 index 000000000..00421cd33 Binary files /dev/null and b/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Independent sites many VPNs.png differ diff --git a/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Secure Sites Single RSP.png b/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Secure Sites Single RSP.png new file mode 100644 index 000000000..0c504259a Binary files /dev/null and b/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Secure Sites Single RSP.png differ diff --git a/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Secure Sites Single VPN.png b/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Secure Sites Single VPN.png new file mode 100644 index 000000000..a239d8f4f Binary files /dev/null and b/static/img/mobile-data-only/radsecproxy/Helium RADIUS Options-Secure Sites Single VPN.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-1.png b/static/img/mobile-data-only/ruckus/Ruckus-1.png new file mode 100644 index 000000000..40254d0da Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-1.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-10.png b/static/img/mobile-data-only/ruckus/Ruckus-10.png new file mode 100644 index 000000000..9b095885d Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-10.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-11.png b/static/img/mobile-data-only/ruckus/Ruckus-11.png new file mode 100644 index 000000000..db5f5e07f Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-11.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-12.png b/static/img/mobile-data-only/ruckus/Ruckus-12.png new file mode 100644 index 000000000..30f76c86d Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-12.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-13.png b/static/img/mobile-data-only/ruckus/Ruckus-13.png new file mode 100644 index 000000000..3d19ee505 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-13.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-14.png b/static/img/mobile-data-only/ruckus/Ruckus-14.png new file mode 100644 index 000000000..c8c2078d7 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-14.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-15.png b/static/img/mobile-data-only/ruckus/Ruckus-15.png new file mode 100644 index 000000000..cd37a7533 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-15.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-16.png b/static/img/mobile-data-only/ruckus/Ruckus-16.png new file mode 100644 index 000000000..84316b599 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-16.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-17.png b/static/img/mobile-data-only/ruckus/Ruckus-17.png new file mode 100644 index 000000000..4e9296b19 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-17.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-18.png b/static/img/mobile-data-only/ruckus/Ruckus-18.png new file mode 100644 index 000000000..227bb3d6a Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-18.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-19.png b/static/img/mobile-data-only/ruckus/Ruckus-19.png new file mode 100644 index 000000000..608669c3f Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-19.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-2.png b/static/img/mobile-data-only/ruckus/Ruckus-2.png new file mode 100644 index 000000000..5d38c4c71 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-2.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-20.png b/static/img/mobile-data-only/ruckus/Ruckus-20.png new file mode 100644 index 000000000..97518f9b1 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-20.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-21.png b/static/img/mobile-data-only/ruckus/Ruckus-21.png new file mode 100644 index 000000000..77b1001b9 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-21.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-22.png b/static/img/mobile-data-only/ruckus/Ruckus-22.png new file mode 100644 index 000000000..2b8f9cd0b Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-22.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-3.png b/static/img/mobile-data-only/ruckus/Ruckus-3.png new file mode 100644 index 000000000..d72dd65fd Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-3.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-4.png b/static/img/mobile-data-only/ruckus/Ruckus-4.png new file mode 100644 index 000000000..b5f4237d0 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-4.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-5.png b/static/img/mobile-data-only/ruckus/Ruckus-5.png new file mode 100644 index 000000000..5ac8922bc Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-5.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-6.png b/static/img/mobile-data-only/ruckus/Ruckus-6.png new file mode 100644 index 000000000..0fa57aa46 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-6.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-7.png b/static/img/mobile-data-only/ruckus/Ruckus-7.png new file mode 100644 index 000000000..00f2e46a1 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-7.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-8.png b/static/img/mobile-data-only/ruckus/Ruckus-8.png new file mode 100644 index 000000000..72253fed7 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-8.png differ diff --git a/static/img/mobile-data-only/ruckus/Ruckus-9.png b/static/img/mobile-data-only/ruckus/Ruckus-9.png new file mode 100644 index 000000000..7d4707461 Binary files /dev/null and b/static/img/mobile-data-only/ruckus/Ruckus-9.png differ diff --git a/static/img/mobile-data-only/ubiquiti/configure-controller.png b/static/img/mobile-data-only/ubiquiti/configure-controller.png new file mode 100644 index 000000000..70ae1046c Binary files /dev/null and b/static/img/mobile-data-only/ubiquiti/configure-controller.png differ diff --git a/static/img/mobile-data-only/ubiquiti/create-new-wifi.png b/static/img/mobile-data-only/ubiquiti/create-new-wifi.png new file mode 100644 index 000000000..a5858956a Binary files /dev/null and b/static/img/mobile-data-only/ubiquiti/create-new-wifi.png differ diff --git a/static/img/mobile-data-only/ubiquiti/data-only-ui-header.png b/static/img/mobile-data-only/ubiquiti/data-only-ui-header.png new file mode 100644 index 000000000..1f517ecca Binary files /dev/null and b/static/img/mobile-data-only/ubiquiti/data-only-ui-header.png differ diff --git a/static/img/mobile-data-only/ubiquiti/main-wifi-settings.png b/static/img/mobile-data-only/ubiquiti/main-wifi-settings.png new file mode 100644 index 000000000..e745c9cd3 Binary files /dev/null and b/static/img/mobile-data-only/ubiquiti/main-wifi-settings.png differ diff --git a/static/img/mobile-data-only/ubiquiti/nas-id-mac-addr.png b/static/img/mobile-data-only/ubiquiti/nas-id-mac-addr.png new file mode 100644 index 000000000..7b858a078 Binary files /dev/null and b/static/img/mobile-data-only/ubiquiti/nas-id-mac-addr.png differ diff --git a/static/img/mobile-data-only/ubiquiti/radius-keys.png b/static/img/mobile-data-only/ubiquiti/radius-keys.png new file mode 100644 index 000000000..48016dbfc Binary files /dev/null and b/static/img/mobile-data-only/ubiquiti/radius-keys.png differ diff --git a/static/img/mobile-data-only/ubiquiti/radius-properties.png b/static/img/mobile-data-only/ubiquiti/radius-properties.png new file mode 100644 index 000000000..d628e2c90 Binary files /dev/null and b/static/img/mobile-data-only/ubiquiti/radius-properties.png differ diff --git a/static/img/mobile-data-only/ubiquiti/radius-settings.gif b/static/img/mobile-data-only/ubiquiti/radius-settings.gif new file mode 100644 index 000000000..d6deaa4e9 Binary files /dev/null and b/static/img/mobile-data-only/ubiquiti/radius-settings.gif differ diff --git a/static/img/mobile-data-only/ubiquiti/udm-mac-addr.png b/static/img/mobile-data-only/ubiquiti/udm-mac-addr.png new file mode 100644 index 000000000..1e8bc62dc Binary files /dev/null and b/static/img/mobile-data-only/ubiquiti/udm-mac-addr.png differ diff --git a/static/img/network-iot/data-only-header.png b/static/img/network-iot/data-only-header.png new file mode 100644 index 000000000..38ec12c4b Binary files /dev/null and b/static/img/network-iot/data-only-header.png differ diff --git a/static/img/network-iot/data-only-onboarding-header.png b/static/img/network-iot/data-only-onboarding-header.png new file mode 100644 index 000000000..343d562b4 Binary files /dev/null and b/static/img/network-iot/data-only-onboarding-header.png differ diff --git a/static/img/network-iot/gateway-rs-first-run.png b/static/img/network-iot/gateway-rs-first-run.png new file mode 100644 index 000000000..9c9dede6f Binary files /dev/null and b/static/img/network-iot/gateway-rs-first-run.png differ diff --git a/static/img/network-iot/lorawanheader.png b/static/img/network-iot/lorawanheader.png new file mode 100644 index 000000000..ef8dd9efb Binary files /dev/null and b/static/img/network-iot/lorawanheader.png differ diff --git a/static/img/open-lns/chirpstack-aws-k8s-architecture.png b/static/img/open-lns/chirpstack-aws-k8s-architecture.png new file mode 100644 index 000000000..13ca1d01a Binary files /dev/null and b/static/img/open-lns/chirpstack-aws-k8s-architecture.png differ diff --git a/static/img/open-lns/chirpstack-device-and-join-eui.png b/static/img/open-lns/chirpstack-device-and-join-eui.png new file mode 100644 index 000000000..7d12643d6 Binary files /dev/null and b/static/img/open-lns/chirpstack-device-and-join-eui.png differ diff --git a/static/img/open-lns/chirpstack/chirpstack-001-dashboard.jpg b/static/img/open-lns/chirpstack/chirpstack-001-dashboard.jpg new file mode 100644 index 000000000..e233eb8d5 Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-001-dashboard.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-002-device-profile.jpg b/static/img/open-lns/chirpstack/chirpstack-002-device-profile.jpg new file mode 100644 index 000000000..627a54b0c Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-002-device-profile.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-003-device-profile.jpg b/static/img/open-lns/chirpstack/chirpstack-003-device-profile.jpg new file mode 100644 index 000000000..c464213e4 Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-003-device-profile.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-004-device-profile.jpg b/static/img/open-lns/chirpstack/chirpstack-004-device-profile.jpg new file mode 100644 index 000000000..e271d11a6 Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-004-device-profile.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-005-application.jpg b/static/img/open-lns/chirpstack/chirpstack-005-application.jpg new file mode 100644 index 000000000..8760ea1c4 Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-005-application.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-006-application.jpg b/static/img/open-lns/chirpstack/chirpstack-006-application.jpg new file mode 100644 index 000000000..fc5ed2668 Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-006-application.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-007-add-device.jpg b/static/img/open-lns/chirpstack/chirpstack-007-add-device.jpg new file mode 100644 index 000000000..9dfcf6472 Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-007-add-device.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-008-add-device.jpg b/static/img/open-lns/chirpstack/chirpstack-008-add-device.jpg new file mode 100644 index 000000000..23f9c851c Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-008-add-device.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-009-add-device.jpg b/static/img/open-lns/chirpstack/chirpstack-009-add-device.jpg new file mode 100644 index 000000000..67e607993 Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-009-add-device.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-010-add-device.jpg b/static/img/open-lns/chirpstack/chirpstack-010-add-device.jpg new file mode 100644 index 000000000..16b28832c Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-010-add-device.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-011-add-device.jpg b/static/img/open-lns/chirpstack/chirpstack-011-add-device.jpg new file mode 100644 index 000000000..09a8bc5ea Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-011-add-device.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-012-add-device.jpg b/static/img/open-lns/chirpstack/chirpstack-012-add-device.jpg new file mode 100644 index 000000000..93b54bada Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-012-add-device.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-013-add-api-key.jpg b/static/img/open-lns/chirpstack/chirpstack-013-add-api-key.jpg new file mode 100644 index 000000000..12aa910cf Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-013-add-api-key.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-014-add-api-key.jpg b/static/img/open-lns/chirpstack/chirpstack-014-add-api-key.jpg new file mode 100644 index 000000000..b834caa4d Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-014-add-api-key.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-015-add-api-key.jpg b/static/img/open-lns/chirpstack/chirpstack-015-add-api-key.jpg new file mode 100644 index 000000000..66c3b75cc Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-015-add-api-key.jpg differ diff --git a/static/img/open-lns/chirpstack/chirpstack-016-tenant-id.jpg b/static/img/open-lns/chirpstack/chirpstack-016-tenant-id.jpg new file mode 100644 index 000000000..f010b607d Binary files /dev/null and b/static/img/open-lns/chirpstack/chirpstack-016-tenant-id.jpg differ diff --git a/static/img/open-lns/open-lns-architecture.png b/static/img/open-lns/open-lns-architecture.png new file mode 100644 index 000000000..ce9c91718 Binary files /dev/null and b/static/img/open-lns/open-lns-architecture.png differ diff --git a/static/img/open-lns/openlns-header.png b/static/img/open-lns/openlns-header.png new file mode 100644 index 000000000..0c5de7489 Binary files /dev/null and b/static/img/open-lns/openlns-header.png differ diff --git a/static/img/open-lns/roaming-setup-generate-route.png b/static/img/open-lns/roaming-setup-generate-route.png new file mode 100644 index 000000000..677662bcd Binary files /dev/null and b/static/img/open-lns/roaming-setup-generate-route.png differ diff --git a/static/img/open-source/opensource.png b/static/img/open-source/opensource.png deleted file mode 100644 index 3b0fbeabd..000000000 Binary files a/static/img/open-source/opensource.png and /dev/null differ diff --git a/static/img/open-source/oss.svg b/static/img/open-source/oss.svg deleted file mode 100644 index 758e43a28..000000000 --- a/static/img/open-source/oss.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/static/img/projects/topic-agricultural.png b/static/img/projects/topic-agricultural.png deleted file mode 100644 index 3392218b3..000000000 Binary files a/static/img/projects/topic-agricultural.png and /dev/null differ diff --git a/static/img/projects/topic-dashboard.png b/static/img/projects/topic-dashboard.png deleted file mode 100644 index e8885b722..000000000 Binary files a/static/img/projects/topic-dashboard.png and /dev/null differ diff --git a/static/img/projects/topic-environmental.png b/static/img/projects/topic-environmental.png deleted file mode 100644 index bda283b73..000000000 Binary files a/static/img/projects/topic-environmental.png and /dev/null differ diff --git a/static/img/projects/topic-healthcare.png b/static/img/projects/topic-healthcare.png deleted file mode 100644 index 57ddc7c54..000000000 Binary files a/static/img/projects/topic-healthcare.png and /dev/null differ diff --git a/static/img/projects/topic-industrial.png b/static/img/projects/topic-industrial.png deleted file mode 100644 index 503f1a156..000000000 Binary files a/static/img/projects/topic-industrial.png and /dev/null differ diff --git a/static/img/projects/topic-misc.png b/static/img/projects/topic-misc.png deleted file mode 100644 index bc5c7f31a..000000000 Binary files a/static/img/projects/topic-misc.png and /dev/null differ diff --git a/static/img/projects/topic-security.png b/static/img/projects/topic-security.png deleted file mode 100644 index f719de19d..000000000 Binary files a/static/img/projects/topic-security.png and /dev/null differ diff --git a/static/img/projects/topic-tracking.png b/static/img/projects/topic-tracking.png deleted file mode 100644 index 831950399..000000000 Binary files a/static/img/projects/topic-tracking.png and /dev/null differ diff --git a/static/img/projects/topic-utilities.png b/static/img/projects/topic-utilities.png deleted file mode 100644 index 95b8a4057..000000000 Binary files a/static/img/projects/topic-utilities.png and /dev/null differ diff --git a/static/img/quicklinkarrow.svg b/static/img/quicklinkarrow.svg deleted file mode 100644 index a72b82163..000000000 --- a/static/img/quicklinkarrow.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/img/solana/dao-in-explorer.png b/static/img/solana/dao-in-explorer.png new file mode 100644 index 000000000..bf034d4d7 Binary files /dev/null and b/static/img/solana/dao-in-explorer.png differ diff --git a/static/img/solana/hpl-preview.png b/static/img/solana/hpl-preview.png new file mode 100644 index 000000000..c55b228c1 Binary files /dev/null and b/static/img/solana/hpl-preview.png differ diff --git a/static/img/solana/program-owner.png b/static/img/solana/program-owner.png new file mode 100644 index 000000000..3a205079d Binary files /dev/null and b/static/img/solana/program-owner.png differ diff --git a/static/img/solana/solanaheader.png b/static/img/solana/solanaheader.png new file mode 100644 index 000000000..40e025fde Binary files /dev/null and b/static/img/solana/solanaheader.png differ diff --git a/static/img/troubleshooting/hotspot-sd-card.jpg b/static/img/troubleshooting/hotspot-sd-card.jpg deleted file mode 100644 index 19eb731c6..000000000 Binary files a/static/img/troubleshooting/hotspot-sd-card.jpg and /dev/null differ diff --git a/static/img/troubleshooting/witnessed.jpg b/static/img/troubleshooting/witnessed.jpg deleted file mode 100644 index 3502ba69b..000000000 Binary files a/static/img/troubleshooting/witnessed.jpg and /dev/null differ diff --git a/static/img/use-the-network/console/console-add-device-icon.png b/static/img/use-the-network/console/console-add-device-icon.png deleted file mode 100644 index f3100b361..000000000 Binary files a/static/img/use-the-network/console/console-add-device-icon.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-add-device-label.png b/static/img/use-the-network/console/console-add-device-label.png deleted file mode 100644 index aa27901c6..000000000 Binary files a/static/img/use-the-network/console/console-add-device-label.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-add-device.png b/static/img/use-the-network/console/console-add-device.png deleted file mode 100644 index 4ff703f72..000000000 Binary files a/static/img/use-the-network/console/console-add-device.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-add-label.png b/static/img/use-the-network/console/console-add-label.png deleted file mode 100644 index a9fb0cc34..000000000 Binary files a/static/img/use-the-network/console/console-add-label.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-adr-label-settings-adr.png b/static/img/use-the-network/console/console-adr-label-settings-adr.png deleted file mode 100755 index 8692b63a5..000000000 Binary files a/static/img/use-the-network/console/console-adr-label-settings-adr.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-adr-label-settings.png b/static/img/use-the-network/console/console-adr-label-settings.png deleted file mode 100755 index 3419cde7c..000000000 Binary files a/static/img/use-the-network/console/console-adr-label-settings.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-debug-button.png b/static/img/use-the-network/console/console-debug-button.png deleted file mode 100644 index a6d0a5f84..000000000 Binary files a/static/img/use-the-network/console/console-debug-button.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-debug-event.png b/static/img/use-the-network/console/console-debug-event.png deleted file mode 100644 index a2f233f23..000000000 Binary files a/static/img/use-the-network/console/console-debug-event.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-debug-waiting.png b/static/img/use-the-network/console/console-debug-waiting.png deleted file mode 100644 index deec200a3..000000000 Binary files a/static/img/use-the-network/console/console-debug-waiting.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-device-details.png b/static/img/use-the-network/console/console-device-details.png deleted file mode 100644 index 81c5964ae..000000000 Binary files a/static/img/use-the-network/console/console-device-details.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-functions-create.png b/static/img/use-the-network/console/console-functions-create.png deleted file mode 100644 index 39daf96a0..000000000 Binary files a/static/img/use-the-network/console/console-functions-create.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-functions-enter-script.png b/static/img/use-the-network/console/console-functions-enter-script.png deleted file mode 100644 index cf632e52f..000000000 Binary files a/static/img/use-the-network/console/console-functions-enter-script.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-functions-label-save.png b/static/img/use-the-network/console/console-functions-label-save.png deleted file mode 100644 index 4250973c5..000000000 Binary files a/static/img/use-the-network/console/console-functions-label-save.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-import-device.png b/static/img/use-the-network/console/console-import-device.png deleted file mode 100644 index fe230f4e0..000000000 Binary files a/static/img/use-the-network/console/console-import-device.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-integrations-add.png b/static/img/use-the-network/console/console-integrations-add.png deleted file mode 100644 index f56d8bb32..000000000 Binary files a/static/img/use-the-network/console/console-integrations-add.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-register.png b/static/img/use-the-network/console/console-register.png deleted file mode 100644 index 426de8c39..000000000 Binary files a/static/img/use-the-network/console/console-register.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-swap-label-step01.png b/static/img/use-the-network/console/console-swap-label-step01.png deleted file mode 100644 index 61493a563..000000000 Binary files a/static/img/use-the-network/console/console-swap-label-step01.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-swap-label-step02.png b/static/img/use-the-network/console/console-swap-label-step02.png deleted file mode 100644 index 010735c23..000000000 Binary files a/static/img/use-the-network/console/console-swap-label-step02.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-swap-label-step03.png b/static/img/use-the-network/console/console-swap-label-step03.png deleted file mode 100644 index b6e7a5462..000000000 Binary files a/static/img/use-the-network/console/console-swap-label-step03.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-swap-label-step04.png b/static/img/use-the-network/console/console-swap-label-step04.png deleted file mode 100644 index e4f62a3eb..000000000 Binary files a/static/img/use-the-network/console/console-swap-label-step04.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-swap-label-step05.png b/static/img/use-the-network/console/console-swap-label-step05.png deleted file mode 100644 index 2a3a85f08..000000000 Binary files a/static/img/use-the-network/console/console-swap-label-step05.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-swap-label-step06.png b/static/img/use-the-network/console/console-swap-label-step06.png deleted file mode 100644 index de3fd4905..000000000 Binary files a/static/img/use-the-network/console/console-swap-label-step06.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-troubleshooting-label-greyed.png b/static/img/use-the-network/console/console-troubleshooting-label-greyed.png deleted file mode 100644 index 000d80ee0..000000000 Binary files a/static/img/use-the-network/console/console-troubleshooting-label-greyed.png and /dev/null differ diff --git a/static/img/use-the-network/console/console-troubleshooting-rxdelay.png b/static/img/use-the-network/console/console-troubleshooting-rxdelay.png deleted file mode 100644 index 28f95fbb8..000000000 Binary files a/static/img/use-the-network/console/console-troubleshooting-rxdelay.png and /dev/null differ diff --git a/static/img/use-the-network/console/coverage-alias.png b/static/img/use-the-network/console/coverage-alias.png deleted file mode 100644 index c044bba76..000000000 Binary files a/static/img/use-the-network/console/coverage-alias.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows-inspector-adr.png b/static/img/use-the-network/console/flows-inspector-adr.png deleted file mode 100644 index 14dec5ae4..000000000 Binary files a/static/img/use-the-network/console/flows-inspector-adr.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows-inspector-alerts.png b/static/img/use-the-network/console/flows-inspector-alerts.png deleted file mode 100644 index 944e96d39..000000000 Binary files a/static/img/use-the-network/console/flows-inspector-alerts.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows-inspector-cflist.png b/static/img/use-the-network/console/flows-inspector-cflist.png deleted file mode 100644 index 11f388cd0..000000000 Binary files a/static/img/use-the-network/console/flows-inspector-cflist.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows-inspector-packets.png b/static/img/use-the-network/console/flows-inspector-packets.png deleted file mode 100644 index e801c352d..000000000 Binary files a/static/img/use-the-network/console/flows-inspector-packets.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/flows-add-1.png b/static/img/use-the-network/console/flows/flows-add-1.png deleted file mode 100644 index 9046f3e8f..000000000 Binary files a/static/img/use-the-network/console/flows/flows-add-1.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/flows-add-label.png b/static/img/use-the-network/console/flows/flows-add-label.png deleted file mode 100644 index 780869965..000000000 Binary files a/static/img/use-the-network/console/flows/flows-add-label.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/flows-add.png b/static/img/use-the-network/console/flows/flows-add.png deleted file mode 100644 index 7d40bdfe8..000000000 Binary files a/static/img/use-the-network/console/flows/flows-add.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/flows-create.png b/static/img/use-the-network/console/flows/flows-create.png deleted file mode 100644 index b041865d4..000000000 Binary files a/static/img/use-the-network/console/flows/flows-create.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/flows-inspector.png b/static/img/use-the-network/console/flows/flows-inspector.png deleted file mode 100644 index 1e7755264..000000000 Binary files a/static/img/use-the-network/console/flows/flows-inspector.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/flows.png b/static/img/use-the-network/console/flows/flows.png deleted file mode 100644 index 182f3a0e6..000000000 Binary files a/static/img/use-the-network/console/flows/flows.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/node-connection.png b/static/img/use-the-network/console/flows/node-connection.png deleted file mode 100644 index 78aa6154e..000000000 Binary files a/static/img/use-the-network/console/flows/node-connection.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/node-device.png b/static/img/use-the-network/console/flows/node-device.png deleted file mode 100644 index 24c5cfe6d..000000000 Binary files a/static/img/use-the-network/console/flows/node-device.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/node-edges.png b/static/img/use-the-network/console/flows/node-edges.png deleted file mode 100644 index 1884b09bd..000000000 Binary files a/static/img/use-the-network/console/flows/node-edges.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/node-function.png b/static/img/use-the-network/console/flows/node-function.png deleted file mode 100644 index 9b79bf764..000000000 Binary files a/static/img/use-the-network/console/flows/node-function.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/node-integration.png b/static/img/use-the-network/console/flows/node-integration.png deleted file mode 100644 index 1ea3f66eb..000000000 Binary files a/static/img/use-the-network/console/flows/node-integration.png and /dev/null differ diff --git a/static/img/use-the-network/console/flows/node-label.png b/static/img/use-the-network/console/flows/node-label.png deleted file mode 100644 index 662ef0508..000000000 Binary files a/static/img/use-the-network/console/flows/node-label.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-adafruitio-choose-decoder.png b/static/img/use-the-network/console/integrations/integrations-adafruitio-choose-decoder.png deleted file mode 100644 index f2b90e339..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-adafruitio-choose-decoder.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-adafruitio-enter-user-key.png b/static/img/use-the-network/console/integrations/integrations-adafruitio-enter-user-key.png deleted file mode 100644 index f65edb09e..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-adafruitio-enter-user-key.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-adafruitio-get-user-key.png b/static/img/use-the-network/console/integrations/integrations-adafruitio-get-user-key.png deleted file mode 100644 index 73f9b1a59..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-adafruitio-get-user-key.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-adafruitio-label.png b/static/img/use-the-network/console/integrations/integrations-adafruitio-label.png deleted file mode 100644 index 29af573fe..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-adafruitio-label.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-adafruitio-mykey.png b/static/img/use-the-network/console/integrations/integrations-adafruitio-mykey.png deleted file mode 100644 index e373e7bc4..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-adafruitio-mykey.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-add-helium-console.png b/static/img/use-the-network/console/integrations/integrations-add-helium-console.png deleted file mode 100644 index eb3200eeb..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-add-helium-console.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-copy-secret-key.png b/static/img/use-the-network/console/integrations/integrations-akenza-copy-secret-key.png deleted file mode 100644 index 8a89695d9..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-copy-secret-key.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-create-data-flow.png b/static/img/use-the-network/console/integrations/integrations-akenza-create-data-flow.png deleted file mode 100644 index 09fca1bdc..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-create-data-flow.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-create-device-details.png b/static/img/use-the-network/console/integrations/integrations-akenza-create-device-details.png deleted file mode 100644 index fda769fea..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-create-device-details.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-create-device.png b/static/img/use-the-network/console/integrations/integrations-akenza-create-device.png deleted file mode 100644 index 979d4a5db..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-create-device.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-dev-eui.png b/static/img/use-the-network/console/integrations/integrations-akenza-dev-eui.png deleted file mode 100644 index a675c88bd..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-dev-eui.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-flow-connection.png b/static/img/use-the-network/console/integrations/integrations-akenza-flow-connection.png deleted file mode 100644 index 4f1ab3014..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-flow-connection.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-helium-connector.png b/static/img/use-the-network/console/integrations/integrations-akenza-helium-connector.png deleted file mode 100644 index 670d4aabf..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-helium-connector.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-http-connectivity.png b/static/img/use-the-network/console/integrations/integrations-akenza-http-connectivity.png deleted file mode 100644 index fd9caf41c..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-http-connectivity.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-paste-device-eui.png b/static/img/use-the-network/console/integrations/integrations-akenza-paste-device-eui.png deleted file mode 100644 index a57070a10..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-paste-device-eui.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-save-data-flow.png b/static/img/use-the-network/console/integrations/integrations-akenza-save-data-flow.png deleted file mode 100644 index b3bbed7eb..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-save-data-flow.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-select-integration.png b/static/img/use-the-network/console/integrations/integrations-akenza-select-integration.png deleted file mode 100644 index 0c387a784..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-select-integration.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-akenza-uplink-secret.png b/static/img/use-the-network/console/integrations/integrations-akenza-uplink-secret.png deleted file mode 100644 index f970afea9..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-akenza-uplink-secret.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-enter-details.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-enter-details.png deleted file mode 100644 index 9a3e47bd1..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-enter-details.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-find-services.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-find-services.png deleted file mode 100644 index 58e85ed69..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-find-services.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-iam.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-iam.png deleted file mode 100644 index bb26d9a02..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-iam.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-interact.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-interact.png deleted file mode 100644 index 35e615441..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-interact.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-monitor.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-monitor.png deleted file mode 100644 index d6e9c9a7c..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-monitor.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-mqtt-client.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-mqtt-client.png deleted file mode 100644 index 55547ae89..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-mqtt-client.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-mqtt-message.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-mqtt-message.png deleted file mode 100644 index f5a4aee36..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-mqtt-message.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-name.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-name.png deleted file mode 100644 index 8b8e66e38..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-name.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user-attach-policy.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user-attach-policy.png deleted file mode 100644 index 173e12684..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user-attach-policy.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user-details.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user-details.png deleted file mode 100644 index 96173f2f9..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user-details.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user-success.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user-success.png deleted file mode 100644 index 79f03d9d5..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user-success.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user.png deleted file mode 100644 index f114c2cd5..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-new-user.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-things.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-things.png deleted file mode 100644 index 8d4eb9b85..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-things.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-topics.png b/static/img/use-the-network/console/integrations/integrations-aws-iot-core-topics.png deleted file mode 100644 index 75a17d287..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-aws-iot-core-topics.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-azure-helium-console.png b/static/img/use-the-network/console/integrations/integrations-azure-helium-console.png deleted file mode 100644 index a4670f8be..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-azure-helium-console.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-create-new.png b/static/img/use-the-network/console/integrations/integrations-create-new.png deleted file mode 100644 index adcf6acc4..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-create-new.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-datacake-accessprofile.png b/static/img/use-the-network/console/integrations/integrations-datacake-accessprofile.png deleted file mode 100644 index 70f4ed9ee..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-datacake-accessprofile.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-datacake-enteraccesstoken.png b/static/img/use-the-network/console/integrations/integrations-datacake-enteraccesstoken.png deleted file mode 100644 index 9e389e529..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-datacake-enteraccesstoken.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-datacake-nameintegration.png b/static/img/use-the-network/console/integrations/integrations-datacake-nameintegration.png deleted file mode 100644 index f2158ce0b..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-datacake-nameintegration.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-datacake-selectdatacake.png b/static/img/use-the-network/console/integrations/integrations-datacake-selectdatacake.png deleted file mode 100644 index ead8cf142..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-datacake-selectdatacake.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-datacake-showapikey.png b/static/img/use-the-network/console/integrations/integrations-datacake-showapikey.png deleted file mode 100644 index 55a834640..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-datacake-showapikey.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-google-sheets-createform.png b/static/img/use-the-network/console/integrations/integrations-google-sheets-createform.png deleted file mode 100644 index 3dd03e934..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-google-sheets-createform.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-google-sheets-decoderbody.png b/static/img/use-the-network/console/integrations/integrations-google-sheets-decoderbody.png deleted file mode 100644 index 4a080afe2..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-google-sheets-decoderbody.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-google-sheets-getformfields.png b/static/img/use-the-network/console/integrations/integrations-google-sheets-getformfields.png deleted file mode 100644 index fe10feb39..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-google-sheets-getformfields.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-google-sheets-selectgooglesheets.png b/static/img/use-the-network/console/integrations/integrations-google-sheets-selectgooglesheets.png deleted file mode 100644 index b236c1d07..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-google-sheets-selectgooglesheets.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-google-sheets-sendtosheets.png b/static/img/use-the-network/console/integrations/integrations-google-sheets-sendtosheets.png deleted file mode 100644 index fe63f02fd..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-google-sheets-sendtosheets.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-google-sheets-settingsbutton.png b/static/img/use-the-network/console/integrations/integrations-google-sheets-settingsbutton.png deleted file mode 100644 index 72024a5d6..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-google-sheets-settingsbutton.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-google-sheets-sharelink.png b/static/img/use-the-network/console/integrations/integrations-google-sheets-sharelink.png deleted file mode 100644 index 2b09f5ec0..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-google-sheets-sharelink.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-google-sheets-unrestrict.png b/static/img/use-the-network/console/integrations/integrations-google-sheets-unrestrict.png deleted file mode 100644 index 846c49712..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-google-sheets-unrestrict.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-http-details.png b/static/img/use-the-network/console/integrations/integrations-http-details.png deleted file mode 100644 index e619eb9d9..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-http-details.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-http-downlink-button.png b/static/img/use-the-network/console/integrations/integrations-http-downlink-button.png deleted file mode 100644 index 1b8fad499..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-http-downlink-button.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-http-downlink-details.png b/static/img/use-the-network/console/integrations/integrations-http-downlink-details.png deleted file mode 100644 index 35b2d93e4..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-http-downlink-details.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-http-downlink-event.png b/static/img/use-the-network/console/integrations/integrations-http-downlink-event.png deleted file mode 100644 index d232ea01d..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-http-downlink-event.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-http-downlink-postman-example.png b/static/img/use-the-network/console/integrations/integrations-http-downlink-postman-example.png deleted file mode 100644 index f782dc617..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-http-downlink-postman-example.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-http-downlink-tool-expanded.png b/static/img/use-the-network/console/integrations/integrations-http-downlink-tool-expanded.png deleted file mode 100644 index 14b72b949..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-http-downlink-tool-expanded.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-http-request-bin.png b/static/img/use-the-network/console/integrations/integrations-http-request-bin.png deleted file mode 100644 index b88925285..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-http-request-bin.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-microshare-app.png b/static/img/use-the-network/console/integrations/integrations-microshare-app.png deleted file mode 100644 index e32f7508f..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-microshare-app.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-microshare-label.png b/static/img/use-the-network/console/integrations/integrations-microshare-label.png deleted file mode 100644 index d4dca96a1..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-microshare-label.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-microshare-newapp.png b/static/img/use-the-network/console/integrations/integrations-microshare-newapp.png deleted file mode 100644 index dfd6a1cca..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-microshare-newapp.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-microshare-newtoken.png b/static/img/use-the-network/console/integrations/integrations-microshare-newtoken.png deleted file mode 100644 index 3d7276f4e..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-microshare-newtoken.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-microshare-newtoken2.png b/static/img/use-the-network/console/integrations/integrations-microshare-newtoken2.png deleted file mode 100644 index 263b0cebb..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-microshare-newtoken2.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-microshare-newtoken3.png b/static/img/use-the-network/console/integrations/integrations-microshare-newtoken3.png deleted file mode 100644 index 45f49271b..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-microshare-newtoken3.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-add-new.jpg b/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-add-new.jpg deleted file mode 100644 index f2f6e0bed..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-add-new.jpg and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-device-details.png b/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-device-details.png deleted file mode 100644 index 676c012fc..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-device-details.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-search.png b/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-search.png deleted file mode 100644 index 1debc351c..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-search.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-select-st.png b/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-select-st.png deleted file mode 100644 index 57b00f176..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-select-st.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-title.png b/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-title.png deleted file mode 100644 index efa23e49a..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-mydevices-cayenne-title.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-select-adafruitio.png b/static/img/use-the-network/console/integrations/integrations-select-adafruitio.png deleted file mode 100644 index b377ac7d7..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-select-adafruitio.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-select-aws-iot-core.png b/static/img/use-the-network/console/integrations/integrations-select-aws-iot-core.png deleted file mode 100644 index c8bf8639d..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-select-aws-iot-core.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-select-cargo.png b/static/img/use-the-network/console/integrations/integrations-select-cargo.png deleted file mode 100644 index 6ca5d37b9..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-select-cargo.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-select-http.png b/static/img/use-the-network/console/integrations/integrations-select-http.png deleted file mode 100644 index a9f8241dc..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-select-http.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-select-microshare.png b/static/img/use-the-network/console/integrations/integrations-select-microshare.png deleted file mode 100644 index 26cd7aaa6..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-select-microshare.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-select-mqtt.png b/static/img/use-the-network/console/integrations/integrations-select-mqtt.png deleted file mode 100644 index cd41a20db..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-select-mqtt.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-select-mydevices.png b/static/img/use-the-network/console/integrations/integrations-select-mydevices.png deleted file mode 100644 index 0b19f894f..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-select-mydevices.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-select-ubidots.png b/static/img/use-the-network/console/integrations/integrations-select-ubidots.png deleted file mode 100644 index 1ac08f29a..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-select-ubidots.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-authorization-copy.png b/static/img/use-the-network/console/integrations/integrations-tago-authorization-copy.png deleted file mode 100644 index f412a1a4a..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-authorization-copy.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-authorization-generate.png b/static/img/use-the-network/console/integrations/integrations-tago-authorization-generate.png deleted file mode 100644 index 8f2e23fa4..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-authorization-generate.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-authorization-success.png b/static/img/use-the-network/console/integrations/integrations-tago-authorization-success.png deleted file mode 100644 index b5994c7e7..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-authorization-success.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-authorization.png b/static/img/use-the-network/console/integrations/integrations-tago-authorization.png deleted file mode 100644 index 0f7dc37e7..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-authorization.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-console.png b/static/img/use-the-network/console/integrations/integrations-tago-console.png deleted file mode 100644 index d2358966e..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-console.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-copy-token.png b/static/img/use-the-network/console/integrations/integrations-tago-copy-token.png deleted file mode 100644 index 9d210c7a9..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-copy-token.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-data-plugins01.png b/static/img/use-the-network/console/integrations/integrations-tago-data-plugins01.png deleted file mode 100644 index eeadd32cf..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-data-plugins01.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-data-plugins02.png b/static/img/use-the-network/console/integrations/integrations-tago-data-plugins02.png deleted file mode 100644 index b04392784..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-data-plugins02.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-data-plugins03.png b/static/img/use-the-network/console/integrations/integrations-tago-data-plugins03.png deleted file mode 100644 index 3798266a4..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-data-plugins03.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-data-plugins04.png b/static/img/use-the-network/console/integrations/integrations-tago-data-plugins04.png deleted file mode 100644 index a62ed79a7..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-data-plugins04.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-data-plugins05.png b/static/img/use-the-network/console/integrations/integrations-tago-data-plugins05.png deleted file mode 100644 index 67b16cb97..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-data-plugins05.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-devices.png b/static/img/use-the-network/console/integrations/integrations-tago-devices.png deleted file mode 100644 index 4751e355a..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-devices.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-generate-token.png b/static/img/use-the-network/console/integrations/integrations-tago-generate-token.png deleted file mode 100644 index 1f0b01a63..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-generate-token.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-integration-success.png b/static/img/use-the-network/console/integrations/integrations-tago-integration-success.png deleted file mode 100644 index fd08f1323..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-integration-success.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-integrations-create.png b/static/img/use-the-network/console/integrations/integrations-tago-integrations-create.png deleted file mode 100644 index eb1db290f..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-integrations-create.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-integrations-label.png b/static/img/use-the-network/console/integrations/integrations-tago-integrations-label.png deleted file mode 100644 index 60f4d54d3..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-integrations-label.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-integrations.png b/static/img/use-the-network/console/integrations/integrations-tago-integrations.png deleted file mode 100644 index 7d2f35c91..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-integrations.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-tago-login.png b/static/img/use-the-network/console/integrations/integrations-tago-login.png deleted file mode 100644 index d3298dee0..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-tago-login.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins01.png b/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins01.png deleted file mode 100644 index d7110c16d..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins01.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins02.png b/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins02.png deleted file mode 100644 index edabc08c9..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins02.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins03.png b/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins03.png deleted file mode 100644 index fc67b1f3c..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins03.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins04.png b/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins04.png deleted file mode 100644 index 0a5f2bb33..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins04.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins05.png b/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins05.png deleted file mode 100644 index a5cfc85bd..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins05.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins06.png b/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins06.png deleted file mode 100644 index 6dc420c1a..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins06.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins07.png b/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins07.png deleted file mode 100644 index ef01037de..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins07.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins08.png b/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins08.png deleted file mode 100644 index d96ef476a..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins08.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins09.png b/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins09.png deleted file mode 100644 index dddc00eb2..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins09.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins10.png b/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins10.png deleted file mode 100644 index 5c1153421..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins10.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins11.png b/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins11.png deleted file mode 100644 index 586cfe5ed..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-data-plugins11.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console01.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console01.png deleted file mode 100644 index e1d137437..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console01.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console02.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console02.png deleted file mode 100644 index 12be8b7a0..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console02.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console03.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console03.png deleted file mode 100644 index 8dccbe374..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console03.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console04.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console04.png deleted file mode 100644 index 74ff7ed5f..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console04.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console05.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console05.png deleted file mode 100644 index d5c977da9..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console05.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console06.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console06.png deleted file mode 100644 index b27eedf64..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console06.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console07.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console07.png deleted file mode 100644 index a746073aa..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console07.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console08.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console08.png deleted file mode 100644 index 753ad25de..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console08.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console09.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console09.png deleted file mode 100644 index d2bc8eed9..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console09.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console10.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console10.png deleted file mode 100644 index caf00bff0..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console10.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console11.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console11.png deleted file mode 100644 index 8c5eca29e..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console11.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console12.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console12.png deleted file mode 100644 index 8f0914cb0..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console12.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console13.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console13.png deleted file mode 100644 index b0e088394..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console13.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console14.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console14.png deleted file mode 100644 index e23c78892..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console14.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console15.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console15.png deleted file mode 100644 index d07ebf0fd..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console15.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console16.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console16.png deleted file mode 100644 index 8c2d63d87..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console16.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console17.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console17.png deleted file mode 100644 index c46865b4f..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console17.png and /dev/null differ diff --git a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console18.png b/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console18.png deleted file mode 100644 index e7e83f701..000000000 Binary files a/static/img/use-the-network/console/integrations/integrations-ubidots-helium-console18.png and /dev/null differ diff --git a/static/img/use-the-network/console/label-settings.png b/static/img/use-the-network/console/label-settings.png deleted file mode 100644 index d4bc85cf5..000000000 Binary files a/static/img/use-the-network/console/label-settings.png and /dev/null differ diff --git a/static/img/use-the-network/console/labels-notification-settings.png b/static/img/use-the-network/console/labels-notification-settings.png deleted file mode 100644 index c732145a5..000000000 Binary files a/static/img/use-the-network/console/labels-notification-settings.png and /dev/null differ diff --git a/static/img/use-the-network/console/labels-packet-settings.png b/static/img/use-the-network/console/labels-packet-settings.png deleted file mode 100644 index cbbbf2122..000000000 Binary files a/static/img/use-the-network/console/labels-packet-settings.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/console-import-device.png b/static/img/use-the-network/console/migrating-devices/console-import-device.png deleted file mode 100644 index fe230f4e0..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/console-import-device.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-import-access-code.png b/static/img/use-the-network/console/migrating-devices/ttn-import-access-code.png deleted file mode 100644 index e04f32f03..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-import-access-code.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-import-console-details.png b/static/img/use-the-network/console/migrating-devices/ttn-import-console-details.png deleted file mode 100644 index 91b9e65b8..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-import-console-details.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-import-console-devices.png b/static/img/use-the-network/console/migrating-devices/ttn-import-console-devices.png deleted file mode 100644 index 4cd8edabf..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-import-console-devices.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-import-console-input-access-code-2.png b/static/img/use-the-network/console/migrating-devices/ttn-import-console-input-access-code-2.png deleted file mode 100644 index 110a30e86..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-import-console-input-access-code-2.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-import-console-input-access-code.png b/static/img/use-the-network/console/migrating-devices/ttn-import-console-input-access-code.png deleted file mode 100644 index d618d4972..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-import-console-input-access-code.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-import-console-org.png b/static/img/use-the-network/console/migrating-devices/ttn-import-console-org.png deleted file mode 100644 index 50425523c..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-import-console-org.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-import-find-access-code.png b/static/img/use-the-network/console/migrating-devices/ttn-import-find-access-code.png deleted file mode 100644 index d4302cac2..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-import-find-access-code.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-import-label.png b/static/img/use-the-network/console/migrating-devices/ttn-import-label.png deleted file mode 100644 index 5b944a004..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-import-label.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-import-login.png b/static/img/use-the-network/console/migrating-devices/ttn-import-login.png deleted file mode 100644 index f92c61aaa..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-import-login.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-import-select-applications-1.png b/static/img/use-the-network/console/migrating-devices/ttn-import-select-applications-1.png deleted file mode 100644 index c9306d520..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-import-select-applications-1.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-import-select-applications-2.png b/static/img/use-the-network/console/migrating-devices/ttn-import-select-applications-2.png deleted file mode 100644 index 8f1a17255..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-import-select-applications-2.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-manual-console.png b/static/img/use-the-network/console/migrating-devices/ttn-manual-console.png deleted file mode 100644 index 4192d7bfa..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-manual-console.png and /dev/null differ diff --git a/static/img/use-the-network/console/migrating-devices/ttn-manual-keys.png b/static/img/use-the-network/console/migrating-devices/ttn-manual-keys.png deleted file mode 100644 index 0baa73a92..000000000 Binary files a/static/img/use-the-network/console/migrating-devices/ttn-manual-keys.png and /dev/null differ diff --git a/static/img/use-the-network/console/multiple-packets.png b/static/img/use-the-network/console/multiple-packets.png deleted file mode 100644 index de601c474..000000000 Binary files a/static/img/use-the-network/console/multiple-packets.png and /dev/null differ diff --git a/static/img/use-the-network/console/multiple-packets1.png b/static/img/use-the-network/console/multiple-packets1.png deleted file mode 100644 index d63b5d993..000000000 Binary files a/static/img/use-the-network/console/multiple-packets1.png and /dev/null differ diff --git a/static/img/use-the-network/console/organizations.png b/static/img/use-the-network/console/organizations.png deleted file mode 100644 index 02295cdb1..000000000 Binary files a/static/img/use-the-network/console/organizations.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-cargo-rssi.png b/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-cargo-rssi.png deleted file mode 100644 index 1841bd993..000000000 Binary files a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-cargo-rssi.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-cargo-seq.png b/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-cargo-seq.png deleted file mode 100644 index 57a92da42..000000000 Binary files a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-cargo-seq.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-cargo.png b/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-cargo.png deleted file mode 100644 index dd304626a..000000000 Binary files a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-cargo.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-charging.png b/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-charging.png deleted file mode 100644 index f541c019d..000000000 Binary files a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-charging.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-gps.png b/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-gps.png deleted file mode 100644 index 272465f6e..000000000 Binary files a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-gps.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-join.png b/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-join.png deleted file mode 100644 index 082c22a09..000000000 Binary files a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-join.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-packet.png b/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-packet.png deleted file mode 100644 index 819ab2c5d..000000000 Binary files a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-packet.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-push-button-2.png b/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-push-button-2.png deleted file mode 100644 index a5a3fb97c..000000000 Binary files a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-push-button-2.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-rear-view.png b/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-rear-view.png deleted file mode 100644 index 09f03216f..000000000 Binary files a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-rear-view.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-start.png b/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-start.png deleted file mode 100644 index 1c9880144..000000000 Binary files a/static/img/use-the-network/coverage-mapping/adeunis-mapper-adeunis-start.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/header.png b/static/img/use-the-network/coverage-mapping/header.png deleted file mode 100644 index b38d12452..000000000 Binary files a/static/img/use-the-network/coverage-mapping/header.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/mappers-quickstart-attach-label.png b/static/img/use-the-network/coverage-mapping/mappers-quickstart-attach-label.png deleted file mode 100644 index 3d95f068d..000000000 Binary files a/static/img/use-the-network/coverage-mapping/mappers-quickstart-attach-label.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-decoder.png b/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-decoder.png deleted file mode 100644 index bbaa27026..000000000 Binary files a/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-decoder.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-flow-basic.png b/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-flow-basic.png deleted file mode 100644 index 05a693c0e..000000000 Binary files a/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-flow-basic.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-flow-nodes.png b/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-flow-nodes.png deleted file mode 100644 index 9cc264e7a..000000000 Binary files a/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-flow-nodes.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-flow-with-cargo.png b/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-flow-with-cargo.png deleted file mode 100644 index 657395c77..000000000 Binary files a/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-flow-with-cargo.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-http-integration.png b/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-http-integration.png deleted file mode 100644 index a5fb41d08..000000000 Binary files a/static/img/use-the-network/coverage-mapping/mappers-quickstart-create-http-integration.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/mappers-quickstart-device-event.png b/static/img/use-the-network/coverage-mapping/mappers-quickstart-device-event.png deleted file mode 100644 index 7214b8119..000000000 Binary files a/static/img/use-the-network/coverage-mapping/mappers-quickstart-device-event.png and /dev/null differ diff --git a/static/img/use-the-network/coverage-mapping/mappers-quickstart-device-page.png b/static/img/use-the-network/coverage-mapping/mappers-quickstart-device-page.png deleted file mode 100644 index e340382bb..000000000 Binary files a/static/img/use-the-network/coverage-mapping/mappers-quickstart-device-page.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-adafruitio-breadboard.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-adafruitio-breadboard.png deleted file mode 100644 index 4680c6191..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-adafruitio-breadboard.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-adafruitio-feeds.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-adafruitio-feeds.png deleted file mode 100644 index 82960ac63..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-adafruitio-feeds.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-add-cayennelpp-library.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-add-cayennelpp-library.png deleted file mode 100644 index aca103910..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-add-cayennelpp-library.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-add-dht22-library.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-add-dht22-library.png deleted file mode 100644 index 07f2af9fc..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-add-dht22-library.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-add-library.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-add-library.png deleted file mode 100644 index 9bfccebc2..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-add-library.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-pref.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-pref.png deleted file mode 100644 index d94ec7ef1..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-pref.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-serial.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-serial.png deleted file mode 100644 index 2f359196c..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-serial.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-sketch-keys.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-sketch-keys.png deleted file mode 100644 index c57ca2bbe..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-sketch-keys.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-terminal.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-terminal.png deleted file mode 100644 index d10ee3815..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-arduino-terminal.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-add-label.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-add-label.png deleted file mode 100644 index 2f2b0d46b..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-add-label.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-event-graph.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-event-graph.png deleted file mode 100644 index b8d7a5119..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-event-graph.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-keys.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-keys.png deleted file mode 100644 index 59563d0d0..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-keys.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-select-label.png b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-select-label.png deleted file mode 100644 index e4199bfa7..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-console-select-label.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-jumper-pins.jpg b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-jumper-pins.jpg deleted file mode 100644 index 2b1b313bf..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95-jumper-pins.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95.jpg b/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95.jpg deleted file mode 100644 index 337c435dc..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-feather-m0-rfm95/adafruit-feather-m0-rfm95.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/adafruit/adafruit-logo.png b/static/img/use-the-network/devices/development/adafruit/adafruit-logo.png deleted file mode 100644 index 8b9c3329a..000000000 Binary files a/static/img/use-the-network/devices/development/adafruit/adafruit-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/arduino/arduino-logo.png b/static/img/use-the-network/devices/development/arduino/arduino-logo.png deleted file mode 100644 index a57bc14ba..000000000 Binary files a/static/img/use-the-network/devices/development/arduino/arduino-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/arduino/camera_shield1.jpg b/static/img/use-the-network/devices/development/arduino/camera_shield1.jpg deleted file mode 100644 index 934989015..000000000 Binary files a/static/img/use-the-network/devices/development/arduino/camera_shield1.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/arduino/mkrwan1310_1.jpg b/static/img/use-the-network/devices/development/arduino/mkrwan1310_1.jpg deleted file mode 100644 index c1265ab8d..000000000 Binary files a/static/img/use-the-network/devices/development/arduino/mkrwan1310_1.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/embit/emb-lr1280-mpcie-top.jpg b/static/img/use-the-network/devices/development/embit/emb-lr1280-mpcie-top.jpg deleted file mode 100644 index e626ccdc9..000000000 Binary files a/static/img/use-the-network/devices/development/embit/emb-lr1280-mpcie-top.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/embit/emb-lr1280s-top.jpg b/static/img/use-the-network/devices/development/embit/emb-lr1280s-top.jpg deleted file mode 100644 index 0207ec7c3..000000000 Binary files a/static/img/use-the-network/devices/development/embit/emb-lr1280s-top.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/embit/emb-lr1302-mpcie-top.jpg b/static/img/use-the-network/devices/development/embit/emb-lr1302-mpcie-top.jpg deleted file mode 100644 index 7082581ee..000000000 Binary files a/static/img/use-the-network/devices/development/embit/emb-lr1302-mpcie-top.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/embit/emb-lrwl55-top.jpg b/static/img/use-the-network/devices/development/embit/emb-lrwl55-top.jpg deleted file mode 100644 index d2c8b587b..000000000 Binary files a/static/img/use-the-network/devices/development/embit/emb-lrwl55-top.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/embit/embit-logo.png b/static/img/use-the-network/devices/development/embit/embit-logo.png deleted file mode 100644 index 1e46fc5dd..000000000 Binary files a/static/img/use-the-network/devices/development/embit/embit-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-board-support-json.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-board-support-json.png deleted file mode 100644 index 36ad6f220..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-board-support-json.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-board-support-search.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-board-support-search.png deleted file mode 100644 index 96c651ec5..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-board-support-search.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-serial.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-serial.png deleted file mode 100644 index 64c01c719..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-serial.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-upload.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-upload.png deleted file mode 100644 index db88d41b9..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-arduino-upload.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-console-details.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-console-details.png deleted file mode 100644 index 8fec54c15..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-console-details.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-console-event-graph.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-console-event-graph.png deleted file mode 100644 index e5a157514..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-console-event-graph.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-console-keys.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-console-keys.png deleted file mode 100644 index 12c8b50da..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/arduino/heltec-cubecell-htcc-ab01-console-keys.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/heltec-cubecell-htcc-ab01.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/heltec-cubecell-htcc-ab01.png deleted file mode 100644 index 26c6ab6aa..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/heltec-cubecell-htcc-ab01.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-build-button.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-build-button.png deleted file mode 100644 index 0379a256d..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-build-button.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-build-output_1.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-build-output_1.png deleted file mode 100644 index f211755a3..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-build-output_1.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-build-output_2.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-build-output_2.png deleted file mode 100644 index 75fe562e2..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-build-output_2.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-console-details.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-console-details.png deleted file mode 100644 index fa1d7b0b6..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-console-details.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-console-event-graph.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-console-event-graph.png deleted file mode 100644 index 9c58fb794..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-console-event-graph.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-console-keys.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-console-keys.png deleted file mode 100644 index 12c8b50da..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-console-keys.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-devices.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-devices.png deleted file mode 100644 index 6b2c10818..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-devices.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-home-button.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-home-button.png deleted file mode 100644 index 3ed794f83..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-home-button.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-main-cpp.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-main-cpp.png deleted file mode 100644 index 67a4b0aa4..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-main-cpp.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-platform-ini.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-platform-ini.png deleted file mode 100644 index 7a1b1c1fa..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-platform-ini.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-platformio-exten.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-platformio-exten.png deleted file mode 100644 index 7e1a64cce..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-platformio-exten.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-platformio-welcome.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-platformio-welcome.png deleted file mode 100644 index 8322840c6..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-platformio-welcome.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-serial-debug.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-serial-debug.png deleted file mode 100644 index 64c01c719..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-serial-debug.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-serial-monitor.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-serial-monitor.png deleted file mode 100644 index b6aa84986..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-serial-monitor.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-upload-button.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-upload-button.png deleted file mode 100644 index 4d62b0cab..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-upload-button.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-upload.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-upload.png deleted file mode 100644 index 1166f2ff6..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-upload.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-wizard-board.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-wizard-board.png deleted file mode 100644 index 7076db1a1..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-wizard-board.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-wizard-complete.png b/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-wizard-complete.png deleted file mode 100644 index 276f9ec72..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-cubecell-htcc-ab01/platformio/heltec-cubecell-htcc-ab0x-wizard-complete.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-board-support.png b/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-board-support.png deleted file mode 100644 index e2d2b4667..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-board-support.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-debug-terminal.png b/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-debug-terminal.png deleted file mode 100644 index fb6ded8d7..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-debug-terminal.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-library.png b/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-library.png deleted file mode 100644 index 14e095560..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-library.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-preferences.png b/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-preferences.png deleted file mode 100644 index 7d5e683fa..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-preferences.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-sketch-keys.png b/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-sketch-keys.png deleted file mode 100644 index 6e2ebad0e..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-sketch-keys.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-upload-sketch.png b/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-upload-sketch.png deleted file mode 100644 index d2b4d7513..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-arduino-upload-sketch.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-console-device-details.png b/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-console-device-details.png deleted file mode 100644 index 8c1ce7049..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-console-device-details.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-console-event-graph.png b/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-console-event-graph.png deleted file mode 100644 index e5a157514..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2-console-event-graph.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2.png b/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2.png deleted file mode 100644 index 1cf0ecba6..000000000 Binary files a/static/img/use-the-network/devices/development/heltec-wifi-lora-32-v2/heltec-wifi-lora-32-v2.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/cubecell-1-2-aa-node.png b/static/img/use-the-network/devices/development/heltec/cubecell-1-2-aa-node.png deleted file mode 100644 index c734624d8..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/cubecell-1-2-aa-node.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/cubecell-capsule-sensor.png b/static/img/use-the-network/devices/development/heltec/cubecell-capsule-sensor.png deleted file mode 100644 index a825f8e43..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/cubecell-capsule-sensor.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/cubecell-dev-board-plus.png b/static/img/use-the-network/devices/development/heltec/cubecell-dev-board-plus.png deleted file mode 100644 index f0fe09b4d..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/cubecell-dev-board-plus.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/cubecell-dev-board.png b/static/img/use-the-network/devices/development/heltec/cubecell-dev-board.png deleted file mode 100644 index 26c6ab6aa..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/cubecell-dev-board.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/cubecell-gps-6502.png b/static/img/use-the-network/devices/development/heltec/cubecell-gps-6502.png deleted file mode 100644 index e6f2a2df4..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/cubecell-gps-6502.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/cubecell-module-plus.png b/static/img/use-the-network/devices/development/heltec/cubecell-module-plus.png deleted file mode 100644 index 02d3c5f26..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/cubecell-module-plus.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/cubecell-module.png b/static/img/use-the-network/devices/development/heltec/cubecell-module.png deleted file mode 100644 index 3f48df6e3..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/cubecell-module.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/cubecell-solar-sensor.png b/static/img/use-the-network/devices/development/heltec/cubecell-solar-sensor.png deleted file mode 100644 index 2aa1e9205..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/cubecell-solar-sensor.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/heltec-logo.png b/static/img/use-the-network/devices/development/heltec/heltec-logo.png deleted file mode 100644 index 960725acc..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/heltec-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/lora-kit-151.png b/static/img/use-the-network/devices/development/heltec/lora-kit-151.png deleted file mode 100644 index cf61cbed0..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/lora-kit-151.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/lora-node-151.png b/static/img/use-the-network/devices/development/heltec/lora-node-151.png deleted file mode 100644 index 04174ea7a..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/lora-node-151.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/turtle-board.png b/static/img/use-the-network/devices/development/heltec/turtle-board.png deleted file mode 100644 index da82d1896..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/turtle-board.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/wifi-lora-32.png b/static/img/use-the-network/devices/development/heltec/wifi-lora-32.png deleted file mode 100644 index b80e4b0c5..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/wifi-lora-32.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/wireless-shell.png b/static/img/use-the-network/devices/development/heltec/wireless-shell.png deleted file mode 100644 index 5d110aeaf..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/wireless-shell.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/wireless-stick-lite.png b/static/img/use-the-network/devices/development/heltec/wireless-stick-lite.png deleted file mode 100644 index c853cac0f..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/wireless-stick-lite.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/heltec/wireless-stick.png b/static/img/use-the-network/devices/development/heltec/wireless-stick.png deleted file mode 100644 index ea9905662..000000000 Binary files a/static/img/use-the-network/devices/development/heltec/wireless-stick.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/catena4430.jpg b/static/img/use-the-network/devices/development/mcci/catena4430.jpg deleted file mode 100644 index 8397f1cf4..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/catena4430.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/catena4450.jpg b/static/img/use-the-network/devices/development/mcci/catena4450.jpg deleted file mode 100644 index 7bb3fb999..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/catena4450.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/catena4470.jpg b/static/img/use-the-network/devices/development/mcci/catena4470.jpg deleted file mode 100644 index 8cf36573b..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/catena4470.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/catena4610.jpg b/static/img/use-the-network/devices/development/mcci/catena4610.jpg deleted file mode 100644 index 465178071..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/catena4610.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/catena4612.jpg b/static/img/use-the-network/devices/development/mcci/catena4612.jpg deleted file mode 100644 index 7685a0b43..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/catena4612.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/catena4618.jpg b/static/img/use-the-network/devices/development/mcci/catena4618.jpg deleted file mode 100644 index 963e0622e..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/catena4618.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/catena4801.jpg b/static/img/use-the-network/devices/development/mcci/catena4801.jpg deleted file mode 100644 index 7a27e37c2..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/catena4801.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/catena4802.jpg b/static/img/use-the-network/devices/development/mcci/catena4802.jpg deleted file mode 100644 index 131827743..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/catena4802.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/mcci-logo.png b/static/img/use-the-network/devices/development/mcci/mcci-logo.png deleted file mode 100644 index 392e2a828..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/mcci-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/model4811.jpg b/static/img/use-the-network/devices/development/mcci/model4811.jpg deleted file mode 100644 index f9a44c206..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/model4811.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/model482x.jpg b/static/img/use-the-network/devices/development/mcci/model482x.jpg deleted file mode 100644 index 6ee8730e6..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/model482x.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/model483x-closed.jpg b/static/img/use-the-network/devices/development/mcci/model483x-closed.jpg deleted file mode 100644 index d33e03201..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/model483x-closed.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/mcci/model4841.jpg b/static/img/use-the-network/devices/development/mcci/model4841.jpg deleted file mode 100644 index e54a4ff01..000000000 Binary files a/static/img/use-the-network/devices/development/mcci/model4841.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/midatronics/midatronics-logo.png b/static/img/use-the-network/devices/development/midatronics/midatronics-logo.png deleted file mode 100644 index 05c69fab9..000000000 Binary files a/static/img/use-the-network/devices/development/midatronics/midatronics-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/midatronics/sharky-module.png b/static/img/use-the-network/devices/development/midatronics/sharky-module.png deleted file mode 100644 index de0a9bda0..000000000 Binary files a/static/img/use-the-network/devices/development/midatronics/sharky-module.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/midatronics/windy-mkr.png b/static/img/use-the-network/devices/development/midatronics/windy-mkr.png deleted file mode 100644 index 4ad2c8523..000000000 Binary files a/static/img/use-the-network/devices/development/midatronics/windy-mkr.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/midatronics/windy-module.png b/static/img/use-the-network/devices/development/midatronics/windy-module.png deleted file mode 100644 index 6831f030c..000000000 Binary files a/static/img/use-the-network/devices/development/midatronics/windy-module.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/multi-tech/multi-tech-logo.webp b/static/img/use-the-network/devices/development/multi-tech/multi-tech-logo.webp deleted file mode 100644 index dc62cfb12..000000000 Binary files a/static/img/use-the-network/devices/development/multi-tech/multi-tech-logo.webp and /dev/null differ diff --git a/static/img/use-the-network/devices/development/multi-tech/multi-tech-xdot.png b/static/img/use-the-network/devices/development/multi-tech/multi-tech-xdot.png deleted file mode 100644 index 7746eabb1..000000000 Binary files a/static/img/use-the-network/devices/development/multi-tech/multi-tech-xdot.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-board-manager.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-board-manager.png deleted file mode 100644 index bbabb17d0..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-board-manager.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-board-select.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-board-select.png deleted file mode 100644 index 07c3e289d..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-board-select.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-console-details.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-console-details.png deleted file mode 100644 index 6c8434db0..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-console-details.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-console-event-graph.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-console-event-graph.png deleted file mode 100644 index 9c58fb794..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-console-event-graph.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-console-keys.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-console-keys.png deleted file mode 100644 index 12c8b50da..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-console-keys.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-debug-output.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-debug-output.png deleted file mode 100644 index ca0a40d5d..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-debug-output.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-include-library.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-include-library.png deleted file mode 100644 index a5de6b6a4..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-include-library.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-library-manager.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-library-manager.png deleted file mode 100644 index 6d39c446c..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-library-manager.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-preferences.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-preferences.png deleted file mode 100644 index f295d396e..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-preferences.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-region-select.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-region-select.png deleted file mode 100644 index b3d902485..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-region-select.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-serial-monitor.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-serial-monitor.png deleted file mode 100644 index 9aad5d08c..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-serial-monitor.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-sketch-upload.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-sketch-upload.png deleted file mode 100644 index 2d2f2299a..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/arduino/rak-wisblock-sketch-upload.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-build-button.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-build-button.png deleted file mode 100644 index 0379a256d..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-build-button.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-build-output-1.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-build-output-1.png deleted file mode 100644 index ab3255616..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-build-output-1.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-build-output-2.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-build-output-2.png deleted file mode 100644 index f37849d11..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-build-output-2.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-console-details.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-console-details.png deleted file mode 100644 index 10cf18e77..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-console-details.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-console-event-graph.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-console-event-graph.png deleted file mode 100644 index 9c58fb794..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-console-event-graph.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-console-keys.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-console-keys.png deleted file mode 100644 index 12c8b50da..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-console-keys.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-devices.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-devices.png deleted file mode 100644 index b3fd7587f..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-devices.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-home-button.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-home-button.png deleted file mode 100644 index 3ed794f83..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-home-button.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-install-platform-1.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-install-platform-1.png deleted file mode 100644 index 96f41b270..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-install-platform-1.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-install-platform-2.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-install-platform-2.png deleted file mode 100644 index badbd7d5f..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-install-platform-2.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-install-platform-3.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-install-platform-3.png deleted file mode 100644 index 740f76b48..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-install-platform-3.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-main-cpp.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-main-cpp.png deleted file mode 100644 index 37b84f59e..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-main-cpp.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-platformio-exten.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-platformio-exten.png deleted file mode 100644 index 14763a544..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-platformio-exten.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-platformio-ini.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-platformio-ini.png deleted file mode 100644 index 9752949b3..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-platformio-ini.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-platformio-welcome.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-platformio-welcome.png deleted file mode 100644 index 8322840c6..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-platformio-welcome.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-serial-debug.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-serial-debug.png deleted file mode 100644 index 1a8abd4be..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-serial-debug.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-serial-monitor.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-serial-monitor.png deleted file mode 100644 index b6aa84986..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-serial-monitor.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-stlink.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-stlink.png deleted file mode 100644 index 97cd3b81b..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-stlink.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-upload-button.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-upload-button.png deleted file mode 100644 index 4d62b0cab..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-upload-button.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-upload.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-upload.png deleted file mode 100644 index b0488fb97..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-upload.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-wizard-board.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-wizard-board.png deleted file mode 100644 index e5665abd0..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-wizard-board.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-wizard-complete.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-wizard-complete.png deleted file mode 100644 index 8c716e596..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/platformio/rak-wisblock-wizard-complete.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rak-wisblock-starter/rak-wisblock-starter-board.png b/static/img/use-the-network/devices/development/rak-wisblock-starter/rak-wisblock-starter-board.png deleted file mode 100644 index 2b0afb28e..000000000 Binary files a/static/img/use-the-network/devices/development/rak-wisblock-starter/rak-wisblock-starter-board.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rakwireless/rak7431.png b/static/img/use-the-network/devices/development/rakwireless/rak7431.png deleted file mode 100644 index b83cf1d43..000000000 Binary files a/static/img/use-the-network/devices/development/rakwireless/rak7431.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rakwireless/rakwireless-logo.png b/static/img/use-the-network/devices/development/rakwireless/rakwireless-logo.png deleted file mode 100644 index 596c53f27..000000000 Binary files a/static/img/use-the-network/devices/development/rakwireless/rakwireless-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/rakwireless/wisblock-starter-kit.png b/static/img/use-the-network/devices/development/rakwireless/wisblock-starter-kit.png deleted file mode 100644 index f21a5f213..000000000 Binary files a/static/img/use-the-network/devices/development/rakwireless/wisblock-starter-kit.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5-devkit.png b/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5-devkit.png deleted file mode 100644 index 32b07217b..000000000 Binary files a/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5-devkit.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5-grove.webp b/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5-grove.webp deleted file mode 100644 index 710d82a30..000000000 Binary files a/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5-grove.webp and /dev/null differ diff --git a/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5-mini.webp b/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5-mini.webp deleted file mode 100644 index b13602af7..000000000 Binary files a/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5-mini.webp and /dev/null differ diff --git a/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5.jpg b/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5.jpg deleted file mode 100644 index c24d8042d..000000000 Binary files a/static/img/use-the-network/devices/development/seeed-studio/loramodule-e5.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-antenna-ufl.jpg b/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-antenna-ufl.jpg deleted file mode 100644 index 9b87d0f58..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-antenna-ufl.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-antenna-wire.jpg b/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-antenna-wire.jpg deleted file mode 100644 index 7485c800e..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-antenna-wire.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-add-board.png b/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-add-board.png deleted file mode 100644 index f9ee76edf..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-add-board.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-add-library.png b/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-add-library.png deleted file mode 100644 index 9bfccebc2..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-add-library.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-terminal.png b/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-terminal.png deleted file mode 100644 index 773e58edc..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-terminal.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-upload.png b/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-upload.png deleted file mode 100644 index 7b3c1be23..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-arduino-upload.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-console-event-graph.png b/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-console-event-graph.png deleted file mode 100644 index b8d7a5119..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-console-event-graph.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-console.png b/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-console.png deleted file mode 100644 index 2c27f1862..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-console.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-lorawan-jumpers.jpg b/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-lorawan-jumpers.jpg deleted file mode 100644 index a2dce9271..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-lorawan-jumpers.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-sketch-keys.png b/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-sketch-keys.png deleted file mode 100644 index 0021f57d0..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf-sketch-keys.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf.jpg b/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf.jpg deleted file mode 100644 index 9ae93f457..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun-pro-rf/sparkfun-pro-rf.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/sparkfun/sparkfun-logo.png b/static/img/use-the-network/devices/development/sparkfun/sparkfun-logo.png deleted file mode 100644 index 6f0ea9b7f..000000000 Binary files a/static/img/use-the-network/devices/development/sparkfun/sparkfun-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-arduino-code.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-arduino-code.png deleted file mode 100644 index 9937d702e..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-arduino-code.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-board.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-board.png deleted file mode 100644 index 24c04d46c..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-board.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-console-events.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-console-events.png deleted file mode 100644 index f5c8204a1..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-console-events.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-console.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-console.png deleted file mode 100644 index eca98f8db..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-console.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-core-pref-arduino.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-core-pref-arduino.png deleted file mode 100644 index 8af06c096..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-core-pref-arduino.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-resistor.jpg b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-resistor.jpg deleted file mode 100644 index 027126d8d..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-resistor.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-serial.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-serial.png deleted file mode 100644 index 731fd892e..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-serial.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-upload.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-upload.png deleted file mode 100644 index f24e884d0..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/arduino/st-disco-upload.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-boards.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-boards.png deleted file mode 100644 index 53b9390c4..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-boards.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-build-btn.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-build-btn.png deleted file mode 100644 index 70f2976d2..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-build-btn.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-build-out-1.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-build-out-1.png deleted file mode 100644 index 76ceb6456..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-build-out-1.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-build-out-2.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-build-out-2.png deleted file mode 100644 index f6292a051..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-build-out-2.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-devices.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-devices.png deleted file mode 100644 index cc26fd9e8..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-devices.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-explorer.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-explorer.png deleted file mode 100644 index bb879990f..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-explorer.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-exten.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-exten.png deleted file mode 100644 index c07800125..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-exten.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-full-view.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-full-view.png deleted file mode 100644 index 8b10f8538..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-full-view.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-home.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-home.png deleted file mode 100644 index d761cb750..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-home.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-jlink-terms.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-jlink-terms.png deleted file mode 100644 index bb73512b6..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-jlink-terms.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-main-cpp.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-main-cpp.png deleted file mode 100644 index 4cf8be62b..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-main-cpp.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-platformio-ini.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-platformio-ini.png deleted file mode 100644 index 2580e1ace..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-platformio-ini.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-stlink-cvt.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-stlink-cvt.png deleted file mode 100644 index 9109300cd..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-stlink-cvt.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-upload-fail.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-upload-fail.png deleted file mode 100644 index 541d85da4..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-upload-fail.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-upload-protcol.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-upload-protcol.png deleted file mode 100644 index 4e23dacfb..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-upload-protcol.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-wizard.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-wizard.png deleted file mode 100644 index 878403647..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/platformio/st-disco-platformio-wizard.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/st-b-l072z-lrwan1.png b/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/st-b-l072z-lrwan1.png deleted file mode 100644 index 7186f6cbe..000000000 Binary files a/static/img/use-the-network/devices/development/st-b-l072z-lrwan1/st-b-l072z-lrwan1.png and /dev/null differ diff --git a/static/img/use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc.jpg b/static/img/use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc.jpg deleted file mode 100644 index 73debc3f6..000000000 Binary files a/static/img/use-the-network/devices/development/stmicroelectronics/nucleo-wl55jc.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/development/stmicroelectronics/stmicroelectronics-logo.png b/static/img/use-the-network/devices/development/stmicroelectronics/stmicroelectronics-logo.png deleted file mode 100644 index b4d8ed70b..000000000 Binary files a/static/img/use-the-network/devices/development/stmicroelectronics/stmicroelectronics-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-compact-tracker.png b/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-compact-tracker.png deleted file mode 100644 index 24e266d95..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-compact-tracker.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-geolocation-module.png b/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-geolocation-module.png deleted file mode 100644 index a7ca8104b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-geolocation-module.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-industrial-tracker.png b/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-industrial-tracker.png deleted file mode 100644 index c56b7a02c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-industrial-tracker.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-logo.png b/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-logo.png deleted file mode 100644 index a484fb6e4..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-micro-tracker.png b/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-micro-tracker.png deleted file mode 100644 index 898663fc9..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-micro-tracker.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-smart-badge.png b/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-smart-badge.png deleted file mode 100644 index fde5259de..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/abeeway/abeeway-smart-badge.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/adeunis-field-test-device.png b/static/img/use-the-network/devices/ready-to-use/adeunis-field-test-device.png deleted file mode 100644 index fe605fd78..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/adeunis-field-test-device.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/adeunis/adeunis-logo.jpg b/static/img/use-the-network/devices/ready-to-use/adeunis/adeunis-logo.jpg deleted file mode 100644 index cfbd027de..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/adeunis/adeunis-logo.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/aquascope/aquascope-logo.png b/static/img/use-the-network/devices/ready-to-use/aquascope/aquascope-logo.png deleted file mode 100644 index 13380e462..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/aquascope/aquascope-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/aquascope/bvs.jpg b/static/img/use-the-network/devices/ready-to-use/aquascope/bvs.jpg deleted file mode 100644 index 66c949364..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/aquascope/bvs.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/aquascope/wwd.jpg b/static/img/use-the-network/devices/ready-to-use/aquascope/wwd.jpg deleted file mode 100644 index 2c9647140..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/aquascope/wwd.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/beiselen/beiselen-logo.png b/static/img/use-the-network/devices/ready-to-use/beiselen/beiselen-logo.png deleted file mode 100644 index 66242bf6c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/beiselen/beiselen-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/beiselen/radar.jpg b/static/img/use-the-network/devices/ready-to-use/beiselen/radar.jpg deleted file mode 100644 index 2e03bf159..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/beiselen/radar.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/boatofficer/boatofficer-logo.png b/static/img/use-the-network/devices/ready-to-use/boatofficer/boatofficer-logo.png deleted file mode 100644 index 605d17669..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/boatofficer/boatofficer-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/boatofficer/boatofficerblue_leftside.png b/static/img/use-the-network/devices/ready-to-use/boatofficer/boatofficerblue_leftside.png deleted file mode 100644 index 1d49d86cc..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/boatofficer/boatofficerblue_leftside.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/bosch/bosch-logo.png b/static/img/use-the-network/devices/ready-to-use/bosch/bosch-logo.png deleted file mode 100644 index 0c0c307a7..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/bosch/bosch-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/bosch/tps110.jpg b/static/img/use-the-network/devices/ready-to-use/bosch/tps110.jpg deleted file mode 100644 index 863835197..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/bosch/tps110.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/comtac/comtac-logo.png b/static/img/use-the-network/devices/ready-to-use/comtac/comtac-logo.png deleted file mode 100644 index 4399a2c27..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/comtac/comtac-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/comtac/lpn-km-foto.jpg b/static/img/use-the-network/devices/ready-to-use/comtac/lpn-km-foto.jpg deleted file mode 100644 index 001b1addc..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/comtac/lpn-km-foto.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/comtac/lpn-td1-foto.jpg b/static/img/use-the-network/devices/ready-to-use/comtac/lpn-td1-foto.jpg deleted file mode 100644 index d8922b8f8..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/comtac/lpn-td1-foto.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/comtac/lpn-tsm-foto.jpg b/static/img/use-the-network/devices/ready-to-use/comtac/lpn-tsm-foto.jpg deleted file mode 100644 index 4352f2b24..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/comtac/lpn-tsm-foto.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/console-output.png b/static/img/use-the-network/devices/ready-to-use/console-output.png deleted file mode 100644 index 7d19871d4..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/console-output.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/decentlab-logo.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/decentlab-logo.jpg deleted file mode 100644 index 3e3c0c177..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/decentlab-logo.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-5tm.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-5tm.jpg deleted file mode 100644 index 763b38bcf..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-5tm.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-atm22.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-atm22.jpg deleted file mode 100644 index ca197361d..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-atm22.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-atm41.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-atm41.jpg deleted file mode 100644 index 6031b1dd1..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-atm41.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-ctd10.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-ctd10.jpg deleted file mode 100644 index bfcc8aacc..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-ctd10.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-dlr2.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-dlr2.jpg deleted file mode 100644 index 11ee21151..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-dlr2.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-ds18.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-ds18.jpg deleted file mode 100644 index 6c966d866..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-ds18.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-dws.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-dws.jpg deleted file mode 100644 index 42217e756..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-dws.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-iam.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-iam.jpg deleted file mode 100644 index c2bad3eff..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-iam.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-itst.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-itst.jpg deleted file mode 100644 index a0fd1d828..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-itst.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-kl66.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-kl66.jpg deleted file mode 100644 index ed151fd5b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-kl66.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-lid.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-lid.jpg deleted file mode 100644 index 954ca3392..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-lid.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-lp8p.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-lp8p.jpg deleted file mode 100644 index a7abcc78d..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-lp8p.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-mbx.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-mbx.jpg deleted file mode 100644 index ac66d2a1b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-mbx.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-optod.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-optod.jpg deleted file mode 100644 index 392568f0b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-optod.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pm.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pm.jpg deleted file mode 100644 index 778333550..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pm.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr21.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr21.jpg deleted file mode 100644 index 027c0ed19..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr21.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr26.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr26.jpg deleted file mode 100644 index 9049db76c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr26.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr36.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr36.jpg deleted file mode 100644 index a4ba915c3..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr36.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr36ctd.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr36ctd.jpg deleted file mode 100644 index c747f0eb2..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pr36ctd.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pxr.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pxr.jpg deleted file mode 100644 index f2e72825b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-pxr.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-rhc.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-rhc.jpg deleted file mode 100644 index daf9e841d..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-rhc.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-sht35-001.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-sht35-001.jpg deleted file mode 100644 index 88975861d..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-sht35-001.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-sht35-002.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-sht35-002.jpg deleted file mode 100644 index c1f3fb24e..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-sht35-002.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-smtp.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-smtp.jpg deleted file mode 100644 index be991bbce..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-smtp.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-tbrg.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-tbrg.jpg deleted file mode 100644 index 4c18cf1e7..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-tbrg.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-trs1x.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-trs1x.jpg deleted file mode 100644 index 41eb039c0..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-trs1x.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-trs21.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-trs21.jpg deleted file mode 100644 index 2a4b81f76..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-trs21.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-wrm.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-wrm.jpg deleted file mode 100644 index 73128b273..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-wrm.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-znx.jpg b/static/img/use-the-network/devices/ready-to-use/decentlab/dl-znx.jpg deleted file mode 100644 index 80ea9e8ae..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/decentlab/dl-znx.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/develiot/develiot-logo.png b/static/img/use-the-network/devices/ready-to-use/develiot/develiot-logo.png deleted file mode 100644 index d8314d0c6..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/develiot/develiot-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/develiot/main.png b/static/img/use-the-network/devices/ready-to-use/develiot/main.png deleted file mode 100644 index 19fb2efdc..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/develiot/main.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/develiot/station.jpg b/static/img/use-the-network/devices/ready-to-use/develiot/station.jpg deleted file mode 100644 index 60e0916d1..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/develiot/station.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/digital-matter-oyster-cable.png b/static/img/use-the-network/devices/ready-to-use/digital-matter-oyster-cable.png deleted file mode 100644 index 8d09e869c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/digital-matter-oyster-cable.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/digital-matter-oyster.png b/static/img/use-the-network/devices/ready-to-use/digital-matter-oyster.png deleted file mode 100644 index ed64d8660..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/digital-matter-oyster.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/digital-matter-yabby-cable.png b/static/img/use-the-network/devices/ready-to-use/digital-matter-yabby-cable.png deleted file mode 100644 index c515eaede..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/digital-matter-yabby-cable.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/digital-matter-yabby.png b/static/img/use-the-network/devices/ready-to-use/digital-matter-yabby.png deleted file mode 100644 index c835f0db3..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/digital-matter-yabby.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/digital-matter/digital-matter-logo.png b/static/img/use-the-network/devices/ready-to-use/digital-matter/digital-matter-logo.png deleted file mode 100644 index e864c8ee6..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/digital-matter/digital-matter-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/digital-matter/oyster.png b/static/img/use-the-network/devices/ready-to-use/digital-matter/oyster.png deleted file mode 100644 index b26b537dc..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/digital-matter/oyster.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/digital-matter/yabby-edge.png b/static/img/use-the-network/devices/ready-to-use/digital-matter/yabby-edge.png deleted file mode 100644 index 9993c721a..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/digital-matter/yabby-edge.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-activation.png b/static/img/use-the-network/devices/ready-to-use/dragino-lht65-activation.png deleted file mode 100644 index 411d44289..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-activation.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-attach-decoder.png b/static/img/use-the-network/devices/ready-to-use/dragino-lht65-attach-decoder.png deleted file mode 100644 index 8b783e558..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-attach-decoder.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-banner.jpg b/static/img/use-the-network/devices/ready-to-use/dragino-lht65-banner.jpg deleted file mode 100644 index f5c2b3d0f..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-banner.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-byte-packing.png b/static/img/use-the-network/devices/ready-to-use/dragino-lht65-byte-packing.png deleted file mode 100644 index 1abfde4a9..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-byte-packing.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-decoded-payload.png b/static/img/use-the-network/devices/ready-to-use/dragino-lht65-decoded-payload.png deleted file mode 100644 index c434f8609..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-decoded-payload.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-decoder.png b/static/img/use-the-network/devices/ready-to-use/dragino-lht65-decoder.png deleted file mode 100644 index 3df4ec7b5..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-decoder.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-diagram.png b/static/img/use-the-network/devices/ready-to-use/dragino-lht65-diagram.png deleted file mode 100644 index 7e153d7e0..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino-lht65-diagram.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/LDS02_00.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/LDS02_00.jpg deleted file mode 100644 index 4303589a8..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/LDS02_00.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/dragino-lds02-byte-packing.png b/static/img/use-the-network/devices/ready-to-use/dragino/dragino-lds02-byte-packing.png deleted file mode 100644 index f23185283..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/dragino-lds02-byte-packing.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/dragino-logo.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/dragino-logo.jpg deleted file mode 100644 index faf48a3e1..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/dragino-logo.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/lbt1.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/lbt1.jpg deleted file mode 100644 index 8f9409a6b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/lbt1.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/ldds20.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/ldds20.jpg deleted file mode 100644 index 078339a41..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/ldds20.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/ldds75.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/ldds75.jpg deleted file mode 100644 index e13015834..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/ldds75.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/lds01.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/lds01.jpg deleted file mode 100644 index 172319520..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/lds01.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/lgt92.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/lgt92.jpg deleted file mode 100644 index 8f9409a6b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/lgt92.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/lht65.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/lht65.jpg deleted file mode 100644 index 83d780daf..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/lht65.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/lse01.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/lse01.jpg deleted file mode 100644 index 175447971..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/lse01.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/lsn50-v2.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/lsn50-v2.jpg deleted file mode 100644 index cdb839cae..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/lsn50-v2.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/lsn50v2-d20-00.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/lsn50v2-d20-00.jpg deleted file mode 100644 index 7c75482c5..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/lsn50v2-d20-00.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/lsn50v2-s31-00.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/lsn50v2-s31-00.jpg deleted file mode 100644 index e0424e335..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/lsn50v2-s31-00.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/lt22222-l.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/lt22222-l.jpg deleted file mode 100644 index e16c1fdda..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/lt22222-l.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/lt33222-l.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/lt33222-l.jpg deleted file mode 100644 index 7276a1b7c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/lt33222-l.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/lwl01.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/lwl01.jpg deleted file mode 100644 index 40fc6a24c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/lwl01.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/rs485-bl.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/rs485-bl.jpg deleted file mode 100644 index ac0c43585..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/rs485-bl.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/dragino/rs485-ln.jpg b/static/img/use-the-network/devices/ready-to-use/dragino/rs485-ln.jpg deleted file mode 100644 index d9600be91..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/dragino/rs485-ln.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/enthutech/enthutech-logo.png b/static/img/use-the-network/devices/ready-to-use/enthutech/enthutech-logo.png deleted file mode 100644 index 15414d145..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/enthutech/enthutech-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/enthutech/lbt1.jpg b/static/img/use-the-network/devices/ready-to-use/enthutech/lbt1.jpg deleted file mode 100644 index 8f9409a6b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/enthutech/lbt1.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/enthutech/ldds75.jpg b/static/img/use-the-network/devices/ready-to-use/enthutech/ldds75.jpg deleted file mode 100644 index e13015834..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/enthutech/ldds75.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/enthutech/lds01.jpg b/static/img/use-the-network/devices/ready-to-use/enthutech/lds01.jpg deleted file mode 100644 index 172319520..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/enthutech/lds01.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/enthutech/ldss20.jpg b/static/img/use-the-network/devices/ready-to-use/enthutech/ldss20.jpg deleted file mode 100644 index 078339a41..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/enthutech/ldss20.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/enthutech/lse01.jpg b/static/img/use-the-network/devices/ready-to-use/enthutech/lse01.jpg deleted file mode 100644 index 175447971..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/enthutech/lse01.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/enthutech/lsn50v2-d20-00.jpg b/static/img/use-the-network/devices/ready-to-use/enthutech/lsn50v2-d20-00.jpg deleted file mode 100644 index 7c75482c5..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/enthutech/lsn50v2-d20-00.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/enthutech/lsn50v2-s31-00.jpg b/static/img/use-the-network/devices/ready-to-use/enthutech/lsn50v2-s31-00.jpg deleted file mode 100644 index e0424e335..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/enthutech/lsn50v2-s31-00.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/enthutech/lwl01.jpg b/static/img/use-the-network/devices/ready-to-use/enthutech/lwl01.jpg deleted file mode 100644 index 40fc6a24c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/enthutech/lwl01.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/enthutech/rs485-bl.jpg b/static/img/use-the-network/devices/ready-to-use/enthutech/rs485-bl.jpg deleted file mode 100644 index ac0c43585..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/enthutech/rs485-bl.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/enthutech/rs485-ln.jpg b/static/img/use-the-network/devices/ready-to-use/enthutech/rs485-ln.jpg deleted file mode 100644 index d9600be91..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/enthutech/rs485-ln.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/imst/imst-logo.jfif b/static/img/use-the-network/devices/ready-to-use/imst/imst-logo.jfif deleted file mode 100644 index a9eb53aa9..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/imst/imst-logo.jfif and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/imst/io881a.jpg b/static/img/use-the-network/devices/ready-to-use/imst/io881a.jpg deleted file mode 100644 index 87b2c44c7..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/imst/io881a.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/imst/range-extender.jpg b/static/img/use-the-network/devices/ready-to-use/imst/range-extender.jpg deleted file mode 100644 index e1b0efdac..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/imst/range-extender.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/iotsens/airquality-device.png b/static/img/use-the-network/devices/ready-to-use/iotsens/airquality-device.png deleted file mode 100644 index 66569fa1b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/iotsens/airquality-device.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/iotsens/iotsens-logo.png b/static/img/use-the-network/devices/ready-to-use/iotsens/iotsens-logo.png deleted file mode 100644 index 1b80cf18b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/iotsens/iotsens-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/iotsens/lidar-device.png b/static/img/use-the-network/devices/ready-to-use/iotsens/lidar-device.png deleted file mode 100644 index 646899117..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/iotsens/lidar-device.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/iotsens/sound-device.png b/static/img/use-the-network/devices/ready-to-use/iotsens/sound-device.png deleted file mode 100644 index 0302b7d73..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/iotsens/sound-device.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/izinto/izi-io-4840-front-tr.png b/static/img/use-the-network/devices/ready-to-use/izinto/izi-io-4840-front-tr.png deleted file mode 100644 index 7ea44ca14..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/izinto/izi-io-4840-front-tr.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/izinto/izinto-logo.png b/static/img/use-the-network/devices/ready-to-use/izinto/izinto-logo.png deleted file mode 100644 index bdab4a986..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/izinto/izinto-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/laird/laird-logo.jpg b/static/img/use-the-network/devices/ready-to-use/laird/laird-logo.jpg deleted file mode 100644 index 29a061204..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/laird/laird-logo.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/laird/rs1xx-ext-sensor.jpg b/static/img/use-the-network/devices/ready-to-use/laird/rs1xx-ext-sensor.jpg deleted file mode 100644 index ade5025f7..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/laird/rs1xx-ext-sensor.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/laird/rs1xx-temp-rh-sensor.jpg b/static/img/use-the-network/devices/ready-to-use/laird/rs1xx-temp-rh-sensor.jpg deleted file mode 100644 index 8f5c9328d..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/laird/rs1xx-temp-rh-sensor.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12co2.jpg b/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12co2.jpg deleted file mode 100644 index bdaf3f475..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12co2.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12met.jpg b/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12met.jpg deleted file mode 100644 index 211acb4ca..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12met.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12plg.jpg b/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12plg.jpg deleted file mode 100644 index 8d02f2063..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12plg.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12ter.jpg b/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12ter.jpg deleted file mode 100644 index 831803fe5..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12ter.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terpm.jpg b/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terpm.jpg deleted file mode 100644 index e3b9e9c1a..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terpm.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terwp.jpg b/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terwp.jpg deleted file mode 100644 index 7f43c9d3f..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12terwp.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12voc.jpg b/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12voc.jpg deleted file mode 100644 index 831803fe5..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw12voc.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw13io.jpg b/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw13io.jpg deleted file mode 100644 index 338efe3b3..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw13io.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw13mio.jpg b/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw13mio.jpg deleted file mode 100644 index f340220e8..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lw13mio.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.jpg b/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.jpg deleted file mode 100644 index 6974c69fb..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf-lwws00.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf88-logo.png b/static/img/use-the-network/devices/ready-to-use/mcf88/mcf88-logo.png deleted file mode 100644 index 792dcfaad..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mcf88/mcf88-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mclimate/aqi-sensor.jpg b/static/img/use-the-network/devices/ready-to-use/mclimate/aqi-sensor.jpg deleted file mode 100644 index 412ac632a..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mclimate/aqi-sensor.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mclimate/flood-sensor.jpg b/static/img/use-the-network/devices/ready-to-use/mclimate/flood-sensor.jpg deleted file mode 100644 index 6599cf788..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mclimate/flood-sensor.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mclimate/ht-sensor.jpg b/static/img/use-the-network/devices/ready-to-use/mclimate/ht-sensor.jpg deleted file mode 100644 index 0ecee9817..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mclimate/ht-sensor.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mclimate/mclimate-logo.png b/static/img/use-the-network/devices/ready-to-use/mclimate/mclimate-logo.png deleted file mode 100644 index fff477093..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mclimate/mclimate-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mclimate/t-valve.jpg b/static/img/use-the-network/devices/ready-to-use/mclimate/t-valve.jpg deleted file mode 100644 index 09d72c478..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mclimate/t-valve.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/mclimate/vicki.jpg b/static/img/use-the-network/devices/ready-to-use/mclimate/vicki.jpg deleted file mode 100644 index c157d6123..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/mclimate/vicki.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/milesight-iot/am107.png b/static/img/use-the-network/devices/ready-to-use/milesight-iot/am107.png deleted file mode 100644 index 729864872..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/milesight-iot/am107.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/milesight-iot/em300-th.png b/static/img/use-the-network/devices/ready-to-use/milesight-iot/em300-th.png deleted file mode 100644 index 300be04b1..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/milesight-iot/em300-th.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/milesight-iot/em500-co2.jpg b/static/img/use-the-network/devices/ready-to-use/milesight-iot/em500-co2.jpg deleted file mode 100644 index 7a98b02ad..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/milesight-iot/em500-co2.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/milesight-iot/em500-udl.jpg b/static/img/use-the-network/devices/ready-to-use/milesight-iot/em500-udl.jpg deleted file mode 100644 index 477c823ee..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/milesight-iot/em500-udl.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/milesight-iot/milesight-iot-logo.png b/static/img/use-the-network/devices/ready-to-use/milesight-iot/milesight-iot-logo.png deleted file mode 100644 index 47a2919ba..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/milesight-iot/milesight-iot-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/moko/lw001-bg-1.png b/static/img/use-the-network/devices/ready-to-use/moko/lw001-bg-1.png deleted file mode 100644 index 03f072334..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/moko/lw001-bg-1.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/moko/lw003-b-1.png b/static/img/use-the-network/devices/ready-to-use/moko/lw003-b-1.png deleted file mode 100644 index e8dd51254..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/moko/lw003-b-1.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/moko/lw004.jpg b/static/img/use-the-network/devices/ready-to-use/moko/lw004.jpg deleted file mode 100644 index 4d849e12c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/moko/lw004.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/moko/lw005.jpg b/static/img/use-the-network/devices/ready-to-use/moko/lw005.jpg deleted file mode 100644 index aed20af50..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/moko/lw005.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/moko/moko-logo.png b/static/img/use-the-network/devices/ready-to-use/moko/moko-logo.png deleted file mode 100644 index bb6e36a87..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/moko/moko-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/netvox-logo.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/netvox-logo.jpg deleted file mode 100644 index 7dd071db2..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/netvox-logo.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311a.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311a.jpg deleted file mode 100644 index 71c77ab62..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311a.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311b.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311b.jpg deleted file mode 100644 index 89d3ae069..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311b.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311g.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311g.jpg deleted file mode 100644 index 4264d95b0..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311g.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311w.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311w.jpg deleted file mode 100644 index 75d528119..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r311w.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r312.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r312.jpg deleted file mode 100644 index 61be2fd0c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r312.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r312a.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r312a.jpg deleted file mode 100644 index 8a6d118f2..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r312a.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r711.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r711.jpg deleted file mode 100644 index 7e09302f4..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r711.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718a.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718a.jpg deleted file mode 100644 index d8a407abe..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718a.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718ab.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718ab.jpg deleted file mode 100644 index d8a407abe..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718ab.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718b.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718b.jpg deleted file mode 100644 index f634fbcfc..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718b.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718ck.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718ck.jpg deleted file mode 100644 index 637911fd7..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718ck.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718ct.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718ct.jpg deleted file mode 100644 index 3b3c14b8b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718ct.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718e.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718e.jpg deleted file mode 100644 index 84b849cff..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718e.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718f.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718f.jpg deleted file mode 100644 index 94501e40b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718f.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718n1.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718n1.jpg deleted file mode 100644 index f7408318c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718n1.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718n3.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718n3.jpg deleted file mode 100644 index bcc5a4ece..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718n3.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718t.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718t.jpg deleted file mode 100644 index a2cebcaf7..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r718t.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r720a.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r720a.jpg deleted file mode 100644 index c5d1fadc5..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r720a.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r72615.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r72615.jpg deleted file mode 100644 index a8f46285f..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r72615.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r72615a.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/r72615a.jpg deleted file mode 100644 index a04bdf6cc..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/r72615a.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/ra0715.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/ra0715.jpg deleted file mode 100644 index 5201b6664..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/ra0715.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/ra0715y.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/ra0715y.jpg deleted file mode 100644 index c639f5b6a..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/ra0715y.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/rb02i.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/rb02i.jpg deleted file mode 100644 index 553201623..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/rb02i.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/netvox/photos/rb11e.jpg b/static/img/use-the-network/devices/ready-to-use/netvox/photos/rb11e.jpg deleted file mode 100644 index 8996f2ac4..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/netvox/photos/rb11e.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/nwave/nps310sm.png b/static/img/use-the-network/devices/ready-to-use/nwave/nps310sm.png deleted file mode 100644 index bed59a243..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/nwave/nps310sm.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/nwave/nwave-logo.png b/static/img/use-the-network/devices/ready-to-use/nwave/nwave-logo.png deleted file mode 100644 index c91ee5ca1..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/nwave/nwave-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/origo/ED20W.jpg b/static/img/use-the-network/devices/ready-to-use/origo/ED20W.jpg deleted file mode 100644 index 594aecf8f..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/origo/ED20W.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/origo/origo-logo.png b/static/img/use-the-network/devices/ready-to-use/origo/origo-logo.png deleted file mode 100644 index ab0b7a1fc..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/origo/origo-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/origo/smartbadges.jpg b/static/img/use-the-network/devices/ready-to-use/origo/smartbadges.jpg deleted file mode 100644 index dd067cf6c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/origo/smartbadges.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/realterm-at-commands.png b/static/img/use-the-network/devices/ready-to-use/realterm-at-commands.png deleted file mode 100644 index a05462942..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/realterm-at-commands.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/realterm-settings.png b/static/img/use-the-network/devices/ready-to-use/realterm-settings.png deleted file mode 100644 index b6e4d19e9..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/realterm-settings.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-cable-connector.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-cable-connector.png deleted file mode 100644 index 47b0e4caa..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-cable-connector.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-certs.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-certs.png deleted file mode 100644 index ac9829a58..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-certs.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-config-tool.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-config-tool.png deleted file mode 100644 index cc673452f..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-config-tool.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-console.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-console.png deleted file mode 100644 index 54be6af95..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-console.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-debug.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-debug.png deleted file mode 100644 index 1495fc049..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-debug.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-internals.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-internals.png deleted file mode 100644 index a6f292081..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-internals.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-label.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-label.png deleted file mode 100644 index f0d31cdcd..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-label.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-layout.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-layout.png deleted file mode 100644 index 6016f2497..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-layout.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-mount.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-mount.png deleted file mode 100644 index cacea1fc3..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-mount.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-new-device.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-new-device.png deleted file mode 100644 index 0ea2d1123..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-new-device.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-switch.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-switch.png deleted file mode 100644 index 8ed6b218f..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap-switch.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap.png b/static/img/use-the-network/devices/ready-to-use/seeed-sensecap.png deleted file mode 100644 index 1dc74451b..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-sensecap.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-studio/seeed-studio-logo.webp b/static/img/use-the-network/devices/ready-to-use/seeed-studio/seeed-studio-logo.webp deleted file mode 100644 index 5c63dbfbc..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-studio/seeed-studio-logo.webp and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-air-th-deployment.jpg b/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-air-th-deployment.jpg deleted file mode 100644 index 35688fe8c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-air-th-deployment.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-co2-deployment.jpg b/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-co2-deployment.jpg deleted file mode 100644 index ae02fad53..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-co2-deployment.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-light-deployment.jpg b/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-light-deployment.jpg deleted file mode 100644 index 66c2bb311..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-light-deployment.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-pressure-deployment.jpg b/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-pressure-deployment.jpg deleted file mode 100644 index 35688fe8c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-pressure-deployment.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-soil-th-deployment.jpg b/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-soil-th-deployment.jpg deleted file mode 100644 index 65471532a..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/seeed-studio/sensecap-soil-th-deployment.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/send-ascii.png b/static/img/use-the-network/devices/ready-to-use/send-ascii.png deleted file mode 100644 index 15c3a068c..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/send-ascii.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/send-button.png b/static/img/use-the-network/devices/ready-to-use/send-button.png deleted file mode 100644 index 0c4c5da71..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/send-button.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/sensedge/sensedge-logo.svg b/static/img/use-the-network/devices/ready-to-use/sensedge/sensedge-logo.svg deleted file mode 100644 index 2d6b9c9e1..000000000 --- a/static/img/use-the-network/devices/ready-to-use/sensedge/sensedge-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/use-the-network/devices/ready-to-use/sensedge/senstick-pro.jpg b/static/img/use-the-network/devices/ready-to-use/sensedge/senstick-pro.jpg deleted file mode 100644 index 2e14ce282..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/sensedge/senstick-pro.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/sensedge/senstick-pure.jpg b/static/img/use-the-network/devices/ready-to-use/sensedge/senstick-pure.jpg deleted file mode 100644 index 86a7f7871..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/sensedge/senstick-pure.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/tektelic/smart-room-sensor.jpg b/static/img/use-the-network/devices/ready-to-use/tektelic/smart-room-sensor.jpg deleted file mode 100644 index 1846f17b3..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/tektelic/smart-room-sensor.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/tektelic/tektelic-logo.png b/static/img/use-the-network/devices/ready-to-use/tektelic/tektelic-logo.png deleted file mode 100644 index e27487d31..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/tektelic/tektelic-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/tekzitel/tekzipark.png b/static/img/use-the-network/devices/ready-to-use/tekzitel/tekzipark.png deleted file mode 100644 index 4554f6358..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/tekzitel/tekzipark.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/tekzitel/tekzitel-logo.png b/static/img/use-the-network/devices/ready-to-use/tekzitel/tekzitel-logo.png deleted file mode 100644 index d9fe45ef3..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/tekzitel/tekzitel-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/the-things-products/the-things-node.jpg b/static/img/use-the-network/devices/ready-to-use/the-things-products/the-things-node.jpg deleted file mode 100644 index 898a59583..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/the-things-products/the-things-node.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/the-things-products/the-things-uno.jpg b/static/img/use-the-network/devices/ready-to-use/the-things-products/the-things-uno.jpg deleted file mode 100644 index 429512f7a..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/the-things-products/the-things-uno.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/the-things-products/ttn-logo.png b/static/img/use-the-network/devices/ready-to-use/the-things-products/ttn-logo.png deleted file mode 100644 index 51f5dce10..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/the-things-products/ttn-logo.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-add-label-window.png b/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-add-label-window.png deleted file mode 100644 index 432d2725e..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-add-label-window.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-add-label.png b/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-add-label.png deleted file mode 100644 index 99186d7d2..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-add-label.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-flows.png b/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-flows.png deleted file mode 100644 index 9a0f04ff5..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-flows.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-http-integration.png b/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-http-integration.png deleted file mode 100644 index 113403544..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx-http-integration.png and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx.jpg b/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx.jpg deleted file mode 100644 index 816131395..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/victor-trap-v4xx.jpg and /dev/null differ diff --git a/static/img/use-the-network/devices/ready-to-use/victor/victor-logo.png b/static/img/use-the-network/devices/ready-to-use/victor/victor-logo.png deleted file mode 100644 index 958db34cc..000000000 Binary files a/static/img/use-the-network/devices/ready-to-use/victor/victor-logo.png and /dev/null differ diff --git a/static/img/use-the-network/run-a-network-server/run-console/run-console-auth0-create-app.png b/static/img/use-the-network/run-a-network-server/run-console/run-console-auth0-create-app.png deleted file mode 100644 index 9537b1250..000000000 Binary files a/static/img/use-the-network/run-a-network-server/run-console/run-console-auth0-create-app.png and /dev/null differ diff --git a/static/img/use-the-network/run-a-network-server/run-console/run-console-auth0-creds.png b/static/img/use-the-network/run-a-network-server/run-console/run-console-auth0-creds.png deleted file mode 100644 index 3b4b2349d..000000000 Binary files a/static/img/use-the-network/run-a-network-server/run-console/run-console-auth0-creds.png and /dev/null differ diff --git a/static/img/use-the-network/run-a-network-server/run-console/run-console-auth0-uris.png b/static/img/use-the-network/run-a-network-server/run-console/run-console-auth0-uris.png deleted file mode 100644 index 1859f9820..000000000 Binary files a/static/img/use-the-network/run-a-network-server/run-console/run-console-auth0-uris.png and /dev/null differ diff --git a/static/img/use-the-network/setup-a-packet-forwarder/packet-forwarder-arch.png b/static/img/use-the-network/setup-a-packet-forwarder/packet-forwarder-arch.png deleted file mode 100644 index aea54158c..000000000 Binary files a/static/img/use-the-network/setup-a-packet-forwarder/packet-forwarder-arch.png and /dev/null differ diff --git a/static/img/use-the-network/use1.svg b/static/img/use-the-network/use1.svg deleted file mode 100644 index ce79a006e..000000000 --- a/static/img/use-the-network/use1.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/static/img/use-the-network/use2.svg b/static/img/use-the-network/use2.svg deleted file mode 100644 index 4e54f2391..000000000 --- a/static/img/use-the-network/use2.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/static/img/use-the-network/use3.svg b/static/img/use-the-network/use3.svg deleted file mode 100644 index daafa3df2..000000000 --- a/static/img/use-the-network/use3.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/static/img/use-the-network/use4.png b/static/img/use-the-network/use4.png deleted file mode 100644 index cd358cffa..000000000 Binary files a/static/img/use-the-network/use4.png and /dev/null differ diff --git a/static/img/use-the-network/use4.svg b/static/img/use-the-network/use4.svg deleted file mode 100644 index 9a511cbf1..000000000 --- a/static/img/use-the-network/use4.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/static/img/use-the-network/useheader.png b/static/img/use-the-network/useheader.png deleted file mode 100644 index 605cba28a..000000000 Binary files a/static/img/use-the-network/useheader.png and /dev/null differ diff --git a/static/img/validators/faucet.png b/static/img/validators/faucet.png deleted file mode 100644 index 22ad731a3..000000000 Binary files a/static/img/validators/faucet.png and /dev/null differ diff --git a/static/img/validators/green.png b/static/img/validators/green.png deleted file mode 100644 index df14b7d96..000000000 Binary files a/static/img/validators/green.png and /dev/null differ diff --git a/static/img/validators/red.png b/static/img/validators/red.png deleted file mode 100644 index 72d0f7d5b..000000000 Binary files a/static/img/validators/red.png and /dev/null differ diff --git a/static/img/validators/runvalidator.png b/static/img/validators/runvalidator.png deleted file mode 100644 index f4418e190..000000000 Binary files a/static/img/validators/runvalidator.png and /dev/null differ diff --git a/static/img/validators/schematic.png b/static/img/validators/schematic.png deleted file mode 100644 index 9f4424732..000000000 Binary files a/static/img/validators/schematic.png and /dev/null differ diff --git a/static/img/validators/yellow.png b/static/img/validators/yellow.png deleted file mode 100644 index 910dd3cb1..000000000 Binary files a/static/img/validators/yellow.png and /dev/null differ diff --git a/static/img/wallets/header.png b/static/img/wallets/header.png index 8eb707195..72d42d8ca 100644 Binary files a/static/img/wallets/header.png and b/static/img/wallets/header.png differ diff --git a/static/img/wallets/helium-app/account-nav.png b/static/img/wallets/helium-app/account-nav.png deleted file mode 100644 index be4625742..000000000 Binary files a/static/img/wallets/helium-app/account-nav.png and /dev/null differ diff --git a/static/img/wallets/helium-app/beaconer-relayed.png b/static/img/wallets/helium-app/beaconer-relayed.png deleted file mode 100644 index 8656fa420..000000000 Binary files a/static/img/wallets/helium-app/beaconer-relayed.png and /dev/null differ diff --git a/static/img/wallets/helium-app/challenger-relayed.png b/static/img/wallets/helium-app/challenger-relayed.png deleted file mode 100644 index cc7ff29ce..000000000 Binary files a/static/img/wallets/helium-app/challenger-relayed.png and /dev/null differ diff --git a/static/img/wallets/helium-app/copy-icon.png b/static/img/wallets/helium-app/copy-icon.png deleted file mode 100644 index 8645066b0..000000000 Binary files a/static/img/wallets/helium-app/copy-icon.png and /dev/null differ diff --git a/static/img/wallets/helium-app/disco-architecture.png b/static/img/wallets/helium-app/disco-architecture.png deleted file mode 100644 index 38290aca9..000000000 Binary files a/static/img/wallets/helium-app/disco-architecture.png and /dev/null differ diff --git a/static/img/wallets/helium-app/disco-entry.png b/static/img/wallets/helium-app/disco-entry.png deleted file mode 100644 index fa1455867..000000000 Binary files a/static/img/wallets/helium-app/disco-entry.png and /dev/null differ diff --git a/static/img/wallets/helium-app/fleet-mode-features.png b/static/img/wallets/helium-app/fleet-mode-features.png deleted file mode 100644 index 92eef8111..000000000 Binary files a/static/img/wallets/helium-app/fleet-mode-features.png and /dev/null differ diff --git a/static/img/wallets/helium-app/fleet-mode-settings.png b/static/img/wallets/helium-app/fleet-mode-settings.png deleted file mode 100644 index 68b205d09..000000000 Binary files a/static/img/wallets/helium-app/fleet-mode-settings.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hexagons.png b/static/img/wallets/helium-app/hexagons.png deleted file mode 100644 index 3c95f9a3a..000000000 Binary files a/static/img/wallets/helium-app/hexagons.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspot-address.png b/static/img/wallets/helium-app/hotspot-address.png deleted file mode 100644 index 3f7b39a46..000000000 Binary files a/static/img/wallets/helium-app/hotspot-address.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspot-app-assert.png b/static/img/wallets/helium-app/hotspot-app-assert.png deleted file mode 100644 index 22bd943d0..000000000 Binary files a/static/img/wallets/helium-app/hotspot-app-assert.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspot-app-content-pill.png b/static/img/wallets/helium-app/hotspot-app-content-pill.png deleted file mode 100644 index 15f7f7dcd..000000000 Binary files a/static/img/wallets/helium-app/hotspot-app-content-pill.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspot-app-disco-results.png b/static/img/wallets/helium-app/hotspot-app-disco-results.png deleted file mode 100644 index b662115e8..000000000 Binary files a/static/img/wallets/helium-app/hotspot-app-disco-results.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspot-app-map-filters.png b/static/img/wallets/helium-app/hotspot-app-map-filters.png deleted file mode 100644 index a448d5484..000000000 Binary files a/static/img/wallets/helium-app/hotspot-app-map-filters.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspot-app-owned-followed.png b/static/img/wallets/helium-app/hotspot-app-owned-followed.png deleted file mode 100644 index 2e36292e5..000000000 Binary files a/static/img/wallets/helium-app/hotspot-app-owned-followed.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspot-app-scaling.png b/static/img/wallets/helium-app/hotspot-app-scaling.png deleted file mode 100644 index a02e9bf42..000000000 Binary files a/static/img/wallets/helium-app/hotspot-app-scaling.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspot-app-witness.png b/static/img/wallets/helium-app/hotspot-app-witness.png deleted file mode 100644 index beaab5dda..000000000 Binary files a/static/img/wallets/helium-app/hotspot-app-witness.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspot-tab-hex.png b/static/img/wallets/helium-app/hotspot-tab-hex.png deleted file mode 100644 index 358367bfb..000000000 Binary files a/static/img/wallets/helium-app/hotspot-tab-hex.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspot-tab-witnesses-hex.png b/static/img/wallets/helium-app/hotspot-tab-witnesses-hex.png deleted file mode 100644 index 6807681f7..000000000 Binary files a/static/img/wallets/helium-app/hotspot-tab-witnesses-hex.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspot-tab-witnesses.png b/static/img/wallets/helium-app/hotspot-tab-witnesses.png deleted file mode 100644 index a36ae2829..000000000 Binary files a/static/img/wallets/helium-app/hotspot-tab-witnesses.png and /dev/null differ diff --git a/static/img/wallets/helium-app/hotspots-nav.png b/static/img/wallets/helium-app/hotspots-nav.png deleted file mode 100644 index 5fabae497..000000000 Binary files a/static/img/wallets/helium-app/hotspots-nav.png and /dev/null differ diff --git a/static/img/wallets/helium-app/map-filters.png b/static/img/wallets/helium-app/map-filters.png deleted file mode 100644 index 03d9a4c8f..000000000 Binary files a/static/img/wallets/helium-app/map-filters.png and /dev/null differ diff --git a/static/img/wallets/helium-app/notifications-nav.png b/static/img/wallets/helium-app/notifications-nav.png deleted file mode 100644 index 5c3d66c59..000000000 Binary files a/static/img/wallets/helium-app/notifications-nav.png and /dev/null differ diff --git a/static/img/wallets/helium-app/settings-nav.png b/static/img/wallets/helium-app/settings-nav.png deleted file mode 100644 index 8d406b67c..000000000 Binary files a/static/img/wallets/helium-app/settings-nav.png and /dev/null differ diff --git a/static/img/wallets/helium-app/transfer-complete-transaction.png b/static/img/wallets/helium-app/transfer-complete-transaction.png deleted file mode 100644 index bb14cd671..000000000 Binary files a/static/img/wallets/helium-app/transfer-complete-transaction.png and /dev/null differ diff --git a/static/img/wallets/helium-app/transfer-completed-transaction-v2.png b/static/img/wallets/helium-app/transfer-completed-transaction-v2.png deleted file mode 100644 index 0b8f202b4..000000000 Binary files a/static/img/wallets/helium-app/transfer-completed-transaction-v2.png and /dev/null differ diff --git a/static/img/wallets/helium-app/transfer-entry-v2.png b/static/img/wallets/helium-app/transfer-entry-v2.png deleted file mode 100644 index 089812262..000000000 Binary files a/static/img/wallets/helium-app/transfer-entry-v2.png and /dev/null differ diff --git a/static/img/wallets/helium-app/transfer-entry.png b/static/img/wallets/helium-app/transfer-entry.png deleted file mode 100644 index f3d673da4..000000000 Binary files a/static/img/wallets/helium-app/transfer-entry.png and /dev/null differ diff --git a/static/img/wallets/helium-app/transfer-initiate.png b/static/img/wallets/helium-app/transfer-initiate.png deleted file mode 100644 index 57b80f61f..000000000 Binary files a/static/img/wallets/helium-app/transfer-initiate.png and /dev/null differ diff --git a/static/img/wallets/helium-app/transfer-notification.png b/static/img/wallets/helium-app/transfer-notification.png deleted file mode 100644 index 0ac1b2c17..000000000 Binary files a/static/img/wallets/helium-app/transfer-notification.png and /dev/null differ diff --git a/static/img/wallets/helium-app/transfer-send-confirm-v2.png b/static/img/wallets/helium-app/transfer-send-confirm-v2.png deleted file mode 100644 index 2fa4e18a0..000000000 Binary files a/static/img/wallets/helium-app/transfer-send-confirm-v2.png and /dev/null differ diff --git a/static/img/wallets/helium-app/transfer-send-confirm.png b/static/img/wallets/helium-app/transfer-send-confirm.png deleted file mode 100644 index 6b44051dc..000000000 Binary files a/static/img/wallets/helium-app/transfer-send-confirm.png and /dev/null differ diff --git a/static/img/wallets/helium-app/witness-relayed.png b/static/img/wallets/helium-app/witness-relayed.png deleted file mode 100644 index 78b29adff..000000000 Binary files a/static/img/wallets/helium-app/witness-relayed.png and /dev/null differ diff --git a/static/img/wallets/helium-wallet-app/address-book-banner.png b/static/img/wallets/helium-wallet-app/address-book-banner.png new file mode 100644 index 000000000..6659a4d64 Binary files /dev/null and b/static/img/wallets/helium-wallet-app/address-book-banner.png differ diff --git a/static/img/wallets/helium-wallet-app/header.png b/static/img/wallets/helium-wallet-app/header.png new file mode 100644 index 000000000..488060664 Binary files /dev/null and b/static/img/wallets/helium-wallet-app/header.png differ diff --git a/static/img/wallets/helium-wallet-app/import-account-banner.png b/static/img/wallets/helium-wallet-app/import-account-banner.png new file mode 100644 index 000000000..85b5f4b30 Binary files /dev/null and b/static/img/wallets/helium-wallet-app/import-account-banner.png differ diff --git a/static/img/wallets/helium-wallet-app/new-account-banner.png b/static/img/wallets/helium-wallet-app/new-account-banner.png new file mode 100644 index 000000000..6adbf82bf Binary files /dev/null and b/static/img/wallets/helium-wallet-app/new-account-banner.png differ diff --git a/static/img/wallets/helium-wallet-app/send-request-banner.png b/static/img/wallets/helium-wallet-app/send-request-banner.png new file mode 100644 index 000000000..5cb284e94 Binary files /dev/null and b/static/img/wallets/helium-wallet-app/send-request-banner.png differ diff --git a/static/img/wallets/helium-wallet-app/settings-app-banner.png b/static/img/wallets/helium-wallet-app/settings-app-banner.png new file mode 100644 index 000000000..60390ab13 Binary files /dev/null and b/static/img/wallets/helium-wallet-app/settings-app-banner.png differ diff --git a/static/img/wallets/helium-wallet-app/settings-security-banner.png b/static/img/wallets/helium-wallet-app/settings-security-banner.png new file mode 100644 index 000000000..9951acbf7 Binary files /dev/null and b/static/img/wallets/helium-wallet-app/settings-security-banner.png differ diff --git a/static/img/wallets/helium-wallet-app/settings-wallet-account-banner.png b/static/img/wallets/helium-wallet-app/settings-wallet-account-banner.png new file mode 100644 index 000000000..cc3ad64b8 Binary files /dev/null and b/static/img/wallets/helium-wallet-app/settings-wallet-account-banner.png differ diff --git a/static/img/wallets/ledger/click_ledger.jpg b/static/img/wallets/ledger/click_ledger.jpg deleted file mode 100644 index 3fed544c1..000000000 Binary files a/static/img/wallets/ledger/click_ledger.jpg and /dev/null differ diff --git a/static/img/wallets/ledger/ledger-dev-mode.png b/static/img/wallets/ledger/ledger-dev-mode.png deleted file mode 100644 index bdb9715ee..000000000 Binary files a/static/img/wallets/ledger/ledger-dev-mode.png and /dev/null differ diff --git a/static/img/wallets/ledger/ledger-error.png b/static/img/wallets/ledger/ledger-error.png deleted file mode 100644 index 34209d87c..000000000 Binary files a/static/img/wallets/ledger/ledger-error.png and /dev/null differ diff --git a/static/img/wallets/ledger/ledger-installed.png b/static/img/wallets/ledger/ledger-installed.png deleted file mode 100644 index ed5401bc4..000000000 Binary files a/static/img/wallets/ledger/ledger-installed.png and /dev/null differ diff --git a/static/img/wallets/ledger/macos-zip-warning2.png b/static/img/wallets/ledger/macos-zip-warning2.png deleted file mode 100644 index b9a188286..000000000 Binary files a/static/img/wallets/ledger/macos-zip-warning2.png and /dev/null differ diff --git a/static/img/wallets/third-party/import-key.png b/static/img/wallets/third-party/import-key.png new file mode 100644 index 000000000..057a0a5ee Binary files /dev/null and b/static/img/wallets/third-party/import-key.png differ diff --git a/static/img/wallets/third-party/imported-account.jpeg b/static/img/wallets/third-party/imported-account.jpeg new file mode 100644 index 000000000..ba4d6af04 Binary files /dev/null and b/static/img/wallets/third-party/imported-account.jpeg differ diff --git a/static/img/wallets/third-party/reveal-private-key-tap.png b/static/img/wallets/third-party/reveal-private-key-tap.png new file mode 100644 index 000000000..368fbc13f Binary files /dev/null and b/static/img/wallets/third-party/reveal-private-key-tap.png differ diff --git a/static/img/wallets/third-party/reveal-private-key.png b/static/img/wallets/third-party/reveal-private-key.png new file mode 100644 index 000000000..fcd3d7787 Binary files /dev/null and b/static/img/wallets/third-party/reveal-private-key.png differ diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..a9e419620 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "@tsconfig/docusaurus/tsconfig.json", + "compilerOptions": { + "jsx": "react", + "baseUrl": "." + } +} diff --git a/yarn.lock b/yarn.lock index 02ab50456..6a78ae5e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,583 +2,420 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.0.0-alpha.44": - version "1.0.0-alpha.44" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.44.tgz#e626dba45f5f3950d6beb0ab055395ef0f7e8bb2" - integrity sha512-2iMXthldMIDXtlbg9omRKLgg1bLo2ZzINAEqwhNjUeyj1ceEyL1ck6FY0VnJpf2LsjmNthHCz2BuFk+nYUeDNA== - dependencies: - "@algolia/autocomplete-shared" "1.0.0-alpha.44" +"@algolia/abtesting@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@algolia/abtesting/-/abtesting-1.14.0.tgz#62595446edec2570a26c32c54641f413107b5c1d" + integrity sha512-cZfj+1Z1dgrk3YPtNQNt0H9Rr67P8b4M79JjUKGS0d7/EbFbGxGgSu6zby5f22KXo3LT0LZa4O2c6VVbupJuDg== + dependencies: + "@algolia/client-common" "5.48.0" + "@algolia/requester-browser-xhr" "5.48.0" + "@algolia/requester-fetch" "5.48.0" + "@algolia/requester-node-http" "5.48.0" + +"@algolia/autocomplete-core@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz#702df67a08cb3cfe8c33ee1111ef136ec1a9e232" + integrity sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw== + dependencies: + "@algolia/autocomplete-plugin-algolia-insights" "1.19.2" + "@algolia/autocomplete-shared" "1.19.2" + +"@algolia/autocomplete-plugin-algolia-insights@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz#3584b625b9317e333d1ae43664d02358e175c52d" + integrity sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg== + dependencies: + "@algolia/autocomplete-shared" "1.19.2" + +"@algolia/autocomplete-shared@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz#c0b7b8dc30a5c65b70501640e62b009535e4578f" + integrity sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w== + +"@algolia/client-abtesting@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.48.0.tgz#fb21e4da18f0de6ac3d782409cd4985bc83deb9b" + integrity sha512-n17WSJ7vazmM6yDkWBAjY12J8ERkW9toOqNgQ1GEZu/Kc4dJDJod1iy+QP5T/UlR3WICgZDi/7a/VX5TY5LAPQ== + dependencies: + "@algolia/client-common" "5.48.0" + "@algolia/requester-browser-xhr" "5.48.0" + "@algolia/requester-fetch" "5.48.0" + "@algolia/requester-node-http" "5.48.0" + +"@algolia/client-analytics@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.48.0.tgz#dcad13a3e41f7cfa6c2a548ab7534b4360051cd5" + integrity sha512-v5bMZMEqW9U2l40/tTAaRyn4AKrYLio7KcRuHmLaJtxuJAhvZiE7Y62XIsF070juz4MN3eyvfQmI+y5+OVbZuA== + dependencies: + "@algolia/client-common" "5.48.0" + "@algolia/requester-browser-xhr" "5.48.0" + "@algolia/requester-fetch" "5.48.0" + "@algolia/requester-node-http" "5.48.0" + +"@algolia/client-common@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.48.0.tgz#fb1009f6a0e5afdf7a37d0c50c0b6394f94bf81a" + integrity sha512-7H3DgRyi7UByScc0wz7EMrhgNl7fKPDjKX9OcWixLwCj7yrRXDSIzwunykuYUUO7V7HD4s319e15FlJ9CQIIFQ== + +"@algolia/client-insights@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.48.0.tgz#fa2262e21494ffb57543089323e44572f711a3b0" + integrity sha512-tXmkB6qrIGAXrtRYHQNpfW0ekru/qymV02bjT0w5QGaGw0W91yT+53WB6dTtRRsIrgS30Al6efBvyaEosjZ5uw== + dependencies: + "@algolia/client-common" "5.48.0" + "@algolia/requester-browser-xhr" "5.48.0" + "@algolia/requester-fetch" "5.48.0" + "@algolia/requester-node-http" "5.48.0" + +"@algolia/client-personalization@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.48.0.tgz#4561437595b0a6b17741bbaa2a535c9473ef623f" + integrity sha512-4tXEsrdtcBZbDF73u14Kb3otN+xUdTVGop1tBjict+Rc/FhsJQVIwJIcTrOJqmvhtBfc56Bu65FiVOnpAZCxcw== + dependencies: + "@algolia/client-common" "5.48.0" + "@algolia/requester-browser-xhr" "5.48.0" + "@algolia/requester-fetch" "5.48.0" + "@algolia/requester-node-http" "5.48.0" + +"@algolia/client-query-suggestions@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.48.0.tgz#f99cb237395954b62c9517352143fd04d10ac8f6" + integrity sha512-unzSUwWFpsDrO8935RhMAlyK0Ttua/5XveVIwzfjs5w+GVBsHgIkbOe8VbBJccMU/z1LCwvu1AY3kffuSLAR5Q== + dependencies: + "@algolia/client-common" "5.48.0" + "@algolia/requester-browser-xhr" "5.48.0" + "@algolia/requester-fetch" "5.48.0" + "@algolia/requester-node-http" "5.48.0" + +"@algolia/client-search@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.48.0.tgz#6ff8781ee219b0f1d7a19dfb86c5b9f85db90532" + integrity sha512-RB9bKgYTVUiOcEb5bOcZ169jiiVW811dCsJoLT19DcbbFmU4QaK0ghSTssij35QBQ3SCOitXOUrHcGgNVwS7sQ== + dependencies: + "@algolia/client-common" "5.48.0" + "@algolia/requester-browser-xhr" "5.48.0" + "@algolia/requester-fetch" "5.48.0" + "@algolia/requester-node-http" "5.48.0" + +"@algolia/events@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" + integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== -"@algolia/autocomplete-preset-algolia@1.0.0-alpha.44": - version "1.0.0-alpha.44" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.44.tgz#0ea0b255d0be10fbe262e281472dd6e4619b62ba" - integrity sha512-DCHwo5ovzg9k2ejUolGNTLFnIA7GpsrkbNJTy1sFbMnYfBmeK8egZPZnEl7lBTr27OaZu7IkWpTepLVSztZyng== - dependencies: - "@algolia/autocomplete-shared" "1.0.0-alpha.44" +"@algolia/ingestion@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.48.0.tgz#7cb21c20ae57f6dbb035cd2bf85bd9ab3a2e1c4a" + integrity sha512-rhoSoPu+TDzDpvpk3cY/pYgbeWXr23DxnAIH/AkN0dUC+GCnVIeNSQkLaJ+CL4NZ51cjLIjksrzb4KC5Xu+ktw== + dependencies: + "@algolia/client-common" "5.48.0" + "@algolia/requester-browser-xhr" "5.48.0" + "@algolia/requester-fetch" "5.48.0" + "@algolia/requester-node-http" "5.48.0" -"@algolia/autocomplete-shared@1.0.0-alpha.44": - version "1.0.0-alpha.44" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.44.tgz#db13902ad1667e455711b77d08cae1a0feafaa48" - integrity sha512-2oQZPERYV+yNx/yoVWYjZZdOqsitJ5dfxXJjL18yczOXH6ujnsq+DTczSrX+RjzjQdVeJ1UAG053EJQF/FOiMg== +"@algolia/monitoring@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.48.0.tgz#10f2251f890171c778d7d23a28c1d21d73b15c05" + integrity sha512-aSe6jKvWt+8VdjOaq2ERtsXp9+qMXNJ3mTyTc1VMhNfgPl7ArOhRMRSQ8QBnY8ZL4yV5Xpezb7lAg8pdGrrulg== + dependencies: + "@algolia/client-common" "5.48.0" + "@algolia/requester-browser-xhr" "5.48.0" + "@algolia/requester-fetch" "5.48.0" + "@algolia/requester-node-http" "5.48.0" -"@algolia/cache-browser-local-storage@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.1.tgz#784e91580dcca00a8280b0905197f5abbbdf4b48" - integrity sha512-bAUU9vKCy45uTTlzJw0LYu1IjoZsmzL6lgjaVFaW1crhX/4P+JD5ReQv3n/wpiXSFaHq1WEO3WyH2g3ymzeipQ== - dependencies: - "@algolia/cache-common" "4.9.1" - -"@algolia/cache-common@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.9.1.tgz#2d5f37ba7aab7db76627c4a4fce51a7fd137fa65" - integrity sha512-tcvw4mOfFy44V4ZxDEy9wNGr6vFROZKRpXKTEBgdw/WBn6mX51H1ar4RWtceDEcDU4H5fIv5tsY3ip2hU+fTPg== +"@algolia/recommend@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.48.0.tgz#e37737bb91bcc7000d2718d88d666e1e738a6223" + integrity sha512-p9tfI1bimAaZrdiVExL/dDyGUZ8gyiSHsktP1ZWGzt5hXpM3nhv4tSjyHtXjEKtA0UvsaHKwSfFE8aAAm1eIQA== + dependencies: + "@algolia/client-common" "5.48.0" + "@algolia/requester-browser-xhr" "5.48.0" + "@algolia/requester-fetch" "5.48.0" + "@algolia/requester-node-http" "5.48.0" -"@algolia/cache-in-memory@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.9.1.tgz#3fd1d67aec804b6cc8439015b8b9c712a45c7ae0" - integrity sha512-IEJrHonvdymW2CnRfJtsTVWyfAH05xPEFkGXGCw00+6JNCj8Dln3TeaRLiaaY1srlyGedkemekQm1/Xb46CGOQ== - dependencies: - "@algolia/cache-common" "4.9.1" +"@algolia/requester-browser-xhr@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.48.0.tgz#d7e65692b96e90a1db0faf1b580dd8e8b5b6d6de" + integrity sha512-XshyfpsQB7BLnHseMinp3fVHOGlTv6uEHOzNK/3XrEF9mjxoZAcdVfY1OCXObfwRWX5qXZOq8FnrndFd44iVsQ== + dependencies: + "@algolia/client-common" "5.48.0" -"@algolia/client-account@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.9.1.tgz#f2c1b3e49de2ee1fca44b8b5e64e1ce0dbdff0db" - integrity sha512-Shpjeuwb7i2LR5QuWREb6UbEQLGB+Pl/J5+wPgILJDP/uWp7jpl0ase9mYNQGKj7TjztpSpQCPZ3dSHPnzZPfw== +"@algolia/requester-fetch@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.48.0.tgz#8a8f44b1b417c0cfa8f06742e04b77e3b188ffba" + integrity sha512-Q4XNSVQU89bKNAPuvzSYqTH9AcbOOiIo6AeYMQTxgSJ2+uvT78CLPMG89RIIloYuAtSfE07s40OLV50++l1Bbw== dependencies: - "@algolia/client-common" "4.9.1" - "@algolia/client-search" "4.9.1" - "@algolia/transporter" "4.9.1" + "@algolia/client-common" "5.48.0" -"@algolia/client-analytics@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.9.1.tgz#56972496526910c53c5ce7844f4571efba63eb5f" - integrity sha512-/g6OkOSIA+A0t/tjvbL6iG/zV4El4LPFgv/tcAYHTH27BmlNtnEXw+iFpGjeUlQoPily9WVB3QNLMJkaNwL3HA== - dependencies: - "@algolia/client-common" "4.9.1" - "@algolia/client-search" "4.9.1" - "@algolia/requester-common" "4.9.1" - "@algolia/transporter" "4.9.1" - -"@algolia/client-common@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.9.1.tgz#ae313b65d3249efcb4fafd2e92ed1fa2fd075482" - integrity sha512-UziRTZ8km3qwoVPIyEre8TV6V+MX7UtbfVqPmSafZ0xu41UUZ+sL56YoKjOXkbKuybeIC9prXMGy/ID5bXkTqg== - dependencies: - "@algolia/requester-common" "4.9.1" - "@algolia/transporter" "4.9.1" - -"@algolia/client-recommendation@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/client-recommendation/-/client-recommendation-4.9.1.tgz#217af2a38d37ab12cf23a419cc9a576af9d15b13" - integrity sha512-Drtvvm1PNIOpYf4HFlkPFstFQ3IsN+TRmxur2F7y6Faplb5ybISa8ithu1tmlTdyTf3A78hQUQjgJet6qD2XZw== - dependencies: - "@algolia/client-common" "4.9.1" - "@algolia/requester-common" "4.9.1" - "@algolia/transporter" "4.9.1" - -"@algolia/client-search@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.9.1.tgz#a2fbc47a1b343dade9a8b06310231d51ff675b1b" - integrity sha512-r9Cw2r8kJr45iYncFDht6EshARghU265wuY8Q8oHrpFHjAziEYdsUOdNmQKbsSH5J3gLjDPx1EI5DzVd6ivn3w== - dependencies: - "@algolia/client-common" "4.9.1" - "@algolia/requester-common" "4.9.1" - "@algolia/transporter" "4.9.1" - -"@algolia/logger-common@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.9.1.tgz#3323834095f2916338d2535d2df91c4723ac19f2" - integrity sha512-9mPrbFlFyPT7or/7PXTiJjyOewWB9QRkZKVXkt5zHAUiUzGxmmdpJIGpPv3YQnDur8lXrXaRI0MHXUuIDMY1ng== - -"@algolia/logger-console@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.9.1.tgz#c324ef26843dbed06b44586309331dbb949744ad" - integrity sha512-74VUwjtFjFpjZpi3QoHIPv0kcr3vWUSHX/Vs8PJW3lPsD4CgyhFenQbG9v+ZnyH0JrJwiYTtzfmrVh7IMWZGrQ== - dependencies: - "@algolia/logger-common" "4.9.1" - -"@algolia/requester-browser-xhr@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.1.tgz#0812f3c7c4105a4646c0fba8429b172b2d0e01c5" - integrity sha512-zc46tk5o0ikOAz3uYiRAMxC2iVKAMFKT7nNZnLB5IzT0uqAh7pz/+D/UvIxP4bKmsllpBSnPcpfQF+OI4Ag/BA== - dependencies: - "@algolia/requester-common" "4.9.1" - -"@algolia/requester-common@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.9.1.tgz#50fcf4c7c1ed7ae13159167ac1da2844d036a630" - integrity sha512-9hPgXnlCSbqJqF69M5x5WN3h51Dc+mk/iWNeJSVxExHGvCDfBBZd0v6S15i8q2a9cD1I2RnhMpbnX5BmGtabVA== - -"@algolia/requester-node-http@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.9.1.tgz#70054a0aa5643072404fcb68042eec97c7abd1c8" - integrity sha512-vYNVbSCuyrCSCjHBQJk+tLZtWCjvvDf5tSbRJjyJYMqpnXuIuP7gZm24iHil4NPYBhbBj5NU2ZDAhc/gTn75Ag== - dependencies: - "@algolia/requester-common" "4.9.1" - -"@algolia/transporter@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.9.1.tgz#63ef3d9ae3b6556fa1ff1e6265bbab482bd084b7" - integrity sha512-AbjFfGzX+cAuj7Qyc536OxIQzjFOA5FU2ANGStx8LBH+AKXScwfkx67C05riuaRR5adSCLMSEbVvUscH0nF+6A== - dependencies: - "@algolia/cache-common" "4.9.1" - "@algolia/logger-common" "4.9.1" - "@algolia/requester-common" "4.9.1" - -"@babel/code-frame@7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.5.5": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== - dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" - integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q== - -"@babel/core@7.12.9": - version "7.12.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" - integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.9" - "@babel/types" "^7.12.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.12.16", "@babel/core@^7.12.3": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.2.tgz#54e45334ffc0172048e5c93ded36461d3ad4c417" - integrity sha512-OgC1mON+l4U4B4wiohJlQNUU3H73mpTyYY3j/c8U9dr9UagGGSm+WFpzjy/YLdoyjiG++c1kIDgxCo/mLwQJeQ== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.2" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helpers" "^7.14.0" - "@babel/parser" "^7.14.2" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" - convert-source-map "^1.7.0" +"@algolia/requester-node-http@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.48.0.tgz#53f421da09c064850b3395f72cc520ce958954b0" + integrity sha512-ZgxV2+5qt3NLeUYBTsi6PLyHcENQWC0iFppFZekHSEDA2wcLdTUjnaJzimTEULHIvJuLRCkUs4JABdhuJktEag== + dependencies: + "@algolia/client-common" "5.48.0" + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@antfu/install-pkg@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-1.1.0.tgz#78fa036be1a6081b5a77a5cf59f50c7752b6ba26" + integrity sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ== + dependencies: + package-manager-detector "^1.3.0" + tinyexec "^1.0.1" + +"@antfu/utils@^9.2.0": + version "9.2.0" + resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-9.2.0.tgz#0f55b14d51408413dee17bbffb2cf06a0dd3f60b" + integrity sha512-Oq1d9BGZakE/FyoEtcNeSwM7MpDO2vUBi11RWBZXf75zPsbUVWmUs03EqkRFrcgbXyKTas0BdZWC1wcuSoqSAw== + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.5", "@babel/compat-data@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== + +"@babel/core@^7.21.3", "@babel/core@^7.25.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.9.tgz#71838542a4b1e49dfed353d7acbc6eb89f4a76f2" + integrity sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.9" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.9" + "@babel/parser" "^7.26.9" + "@babel/template" "^7.26.9" + "@babel/traverse" "^7.26.9" + "@babel/types" "^7.26.9" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.12.15", "@babel/generator@^7.12.5", "@babel/generator@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.2.tgz#d5773e8b557d421fd6ce0d5efa5fd7fc22567c30" - integrity sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ== - dependencies: - "@babel/types" "^7.14.2" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" - integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== - dependencies: - "@babel/compat-data" "^7.13.15" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.14.5" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.2.tgz#4e455b0329af29c2d3ad254b5dd5aed34595385d" - integrity sha512-6YctwVsmlkchxfGUogvVrrhzyD3grFJyluj5JgDlQrwfMLJSt5tdAzFZfPf4H2Xoi5YLcQ6BxfJlaOBHuctyIw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - -"@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" - integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - regexpu-core "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz#a640051772045fedaaecc6f0c6c69f02bdd34bf1" - integrity sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.25.9", "@babel/generator@^7.26.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.9.tgz#75a9482ad3d0cc7188a537aa4910bc59db67cbca" + integrity sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg== + dependencies: + "@babel/parser" "^7.26.9" + "@babel/types" "^7.26.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" + integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== + dependencies: + "@babel/compat-data" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz#d6f83e3039547fbb39967e78043cd3c8b7820c71" + integrity sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.26.9" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" + integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.2", "@babel/helper-define-polyfill-provider@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21" + integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== - dependencies: - "@babel/types" "^7.13.0" - -"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2" - integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ== - dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.14.2" - -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" - integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== - dependencies: - "@babel/traverse" "^7.13.15" - "@babel/types" "^7.13.16" - -"@babel/helper-member-expression-to-functions@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" - integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" - integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA== - dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-simple-access" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.14.0" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" - -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-plugin-utils@7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== - -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" - integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.12" - -"@babel/helper-simple-access@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" - integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" - integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== - -"@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== - -"@babel/helper-wrap-function@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helpers@^7.12.5", "@babel/helpers@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" - integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== - dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" - integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - chalk "^2.0.0" - js-tokens "^4.0.0" -"@babel/parser@^7.12.13", "@babel/parser@^7.12.16", "@babel/parser@^7.12.7", "@babel/parser@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.2.tgz#0c1680aa44ad4605b16cbdcc5c341a61bde9c746" - integrity sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ== +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" - integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" - -"@babel/plugin-proposal-async-generator-functions@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz#3a2085abbf5d5f962d480dbc81347385ed62eb1e" - integrity sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ== + "@babel/types" "^7.25.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" + integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== + +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" - "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-proposal-class-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" - integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== +"@babel/helper-replace-supers@^7.25.9", "@babel/helper-replace-supers@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d" + integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.26.5" -"@babel/plugin-proposal-class-static-block@^7.13.11": - version "7.13.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz#6fcbba4a962702c17e5371a0c7b39afde186d703" - integrity sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg== +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-class-static-block" "^7.12.13" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== -"@babel/plugin-proposal-dynamic-import@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz#01ebabd7c381cff231fa43e302939a9de5be9d9f" - integrity sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA== +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/plugin-proposal-export-namespace-from@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz#62542f94aa9ce8f6dba79eec698af22112253791" - integrity sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz#830b4e2426a782e8b2878fbfe2cba85b70cbf98c" - integrity sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz#222348c080a1678e0e74ea63fe76f275882d1fd7" - integrity sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz#425b11dc62fc26939a2ab42cbba680bdf5734546" - integrity sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz#82b4cc06571143faf50626104b335dd71baa4f9e" - integrity sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" - integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.12.1" - -"@babel/plugin-proposal-object-rest-spread@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz#e17d418f81cc103fedd4ce037e181c8056225abc" - integrity sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw== - dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.2" - -"@babel/plugin-proposal-optional-catch-binding@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz#150d4e58e525b16a9a1431bd5326c4eed870d717" - integrity sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz#df8171a8b9c43ebf4c1dabe6311b432d83e1b34e" - integrity sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" - integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-proposal-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz#b1a1f2030586b9d3489cc26179d2eb5883277636" - integrity sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-create-class-features-plugin" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" - integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== +"@babel/helpers@^7.26.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.9.tgz#28f3fb45252fc88ef2dc547c8a911c255fc9fef6" + integrity sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/template" "^7.26.9" + "@babel/types" "^7.26.9" -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== +"@babel/parser@^7.26.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.9.tgz#d9e78bee6dc80f9efd8f2349dcfbbcdace280fd5" + integrity sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/types" "^7.26.9" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + 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.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-class-static-block@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz#8e3d674b0613e67975ceac2776c97b60cafc5c9c" - integrity sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -587,1361 +424,3762 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== +"@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-jsx@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" - integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-jsx@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" - integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== +"@babel/plugin-syntax-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== +"@babel/plugin-transform-async-generator-functions@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8" + integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.26.8" -"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== +"@babel/plugin-transform-block-scoped-functions@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" + integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz#762a4babec61176fec6c88480dec40372b140c0b" - integrity sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w== +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-top-level-await@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" - integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-typescript@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz#9dff111ca64154cef0f4dc52cf843d9f12ce4474" - integrity sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w== +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" + globals "^11.1.0" -"@babel/plugin-transform-arrow-functions@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" -"@babel/plugin-transform-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-block-scoped-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-block-scoping@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz#761cb12ab5a88d640ad4af4aa81f820e6b5fdf5c" - integrity sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg== +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-classes@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz#3f1196c5709f064c252ad056207d87b7aeb2d03d" - integrity sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - globals "^11.1.0" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-computed-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-destructuring@^7.13.17": - version "7.13.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27" - integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA== +"@babel/plugin-transform-exponentiation-operator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" - integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-keys@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== +"@babel/plugin-transform-for-of@^7.26.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz#27231f79d5170ef33b5111f07fe5cafeb2c96a56" + integrity sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-exponentiation-operator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-for-of@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-member-expression-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-amd@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz#6622806fe1a7c07a1388444222ef9535f2ca17b0" - integrity sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw== +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== dependencies: - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helper-plugin-utils" "^7.13.0" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-commonjs@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" - integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== +"@babel/plugin-transform-modules-commonjs@^7.25.9", "@babel/plugin-transform-modules-commonjs@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.13.12" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-systemjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-modules-umd@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz#2f8179d1bbc9263665ce4a65f305526b2ea8ac34" - integrity sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw== +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-new-target@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-object-super@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== +"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": + version "7.26.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" + integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz#e4290f72e0e9e831000d066427c4667098decc31" - integrity sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A== +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-property-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" -"@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz#0208b1d942bf939cd4f7aa5b255d42602aa4a920" - integrity sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ== +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" -"@babel/plugin-transform-react-display-name@^7.12.13": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.2.tgz#2e854544d42ab3bb9c21f84e153d62e800fbd593" - integrity sha512-zCubvP+jjahpnFJvPaHPiGVfuVUjXHhFvJKQdNnsmSsiU9kR/rCZ41jHc++tERD2zV+p7Hr6is+t5b6iWTCqSw== +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx-development@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" - integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== dependencies: - "@babel/plugin-transform-react-jsx" "^7.12.17" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" - integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.13.12" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-pure-annotations@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" - integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-regenerator@^7.13.15": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" - integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-runtime@^7.12.15": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.2.tgz#4e24389bd680dd94ea1b871465d00112ae974425" - integrity sha512-LyA2AiPkaYzI7G5e2YI4NCasTfFe7mZvlupNprDOB7CdNUHb2DQC4uV6oeZ0396gOcicUzUCh0MShL6wiUgk+Q== - dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - babel-plugin-polyfill-corejs2 "^0.2.0" - babel-plugin-polyfill-corejs3 "^0.2.0" - babel-plugin-polyfill-regenerator "^0.2.0" - semver "^6.3.0" - -"@babel/plugin-transform-shorthand-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-spread@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - -"@babel/plugin-transform-sticky-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-template-literals@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-typeof-symbol@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-typescript@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853" - integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-typescript" "^7.12.13" - -"@babel/plugin-transform-unicode-escapes@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" - integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-unicode-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.12.16": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.2.tgz#e80612965da73579c84ad2f963c2359c71524ed5" - integrity sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ== - dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-async-generator-functions" "^7.14.2" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-class-static-block" "^7.13.11" - "@babel/plugin-proposal-dynamic-import" "^7.14.2" - "@babel/plugin-proposal-export-namespace-from" "^7.14.2" - "@babel/plugin-proposal-json-strings" "^7.14.2" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.2" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2" - "@babel/plugin-proposal-numeric-separator" "^7.14.2" - "@babel/plugin-proposal-object-rest-spread" "^7.14.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.2" - "@babel/plugin-proposal-optional-chaining" "^7.14.2" - "@babel/plugin-proposal-private-methods" "^7.13.0" - "@babel/plugin-proposal-private-property-in-object" "^7.14.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.12.13" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@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.0" - "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.13.0" - "@babel/plugin-transform-async-to-generator" "^7.13.0" - "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.14.2" - "@babel/plugin-transform-classes" "^7.14.2" - "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.13.17" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.13.0" - "@babel/plugin-transform-function-name" "^7.12.13" - "@babel/plugin-transform-literals" "^7.12.13" - "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.14.2" - "@babel/plugin-transform-modules-commonjs" "^7.14.0" - "@babel/plugin-transform-modules-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.14.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" - "@babel/plugin-transform-new-target" "^7.12.13" - "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.14.2" - "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.13.15" - "@babel/plugin-transform-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.13.0" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.13.0" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@babel/plugin-transform-unicode-escapes" "^7.12.13" - "@babel/plugin-transform-unicode-regex" "^7.12.13" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.2" - babel-plugin-polyfill-corejs2 "^0.2.0" - babel-plugin-polyfill-corejs3 "^0.2.0" - babel-plugin-polyfill-regenerator "^0.2.0" - core-js-compat "^3.9.0" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@^7.12.13", "@babel/preset-react@^7.12.5": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.13.13.tgz#fa6895a96c50763fe693f9148568458d5a839761" - integrity sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-react-display-name" "^7.12.13" - "@babel/plugin-transform-react-jsx" "^7.13.12" - "@babel/plugin-transform-react-jsx-development" "^7.12.17" - "@babel/plugin-transform-react-pure-annotations" "^7.12.1" - -"@babel/preset-typescript@^7.12.16": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz#ab107e5f050609d806fbb039bec553b33462c60a" - integrity sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-typescript" "^7.13.0" - -"@babel/runtime-corejs3@^7.12.13": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz#6bf5fbc0b961f8e3202888cb2cd0fb7a0a9a3f66" - integrity sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg== - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" - integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.12.13", "@babel/template@^7.12.7": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/traverse@^7.12.13", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" - integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.2" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.14.2" - "@babel/types" "^7.14.2" - debug "^4.1.0" - globals "^11.1.0" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.4.4": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.2.tgz#4208ae003107ef8a057ea8333e56eb64d2f6a2c3" - integrity sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw== +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - to-fast-properties "^2.0.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@docsearch/css@3.0.0-alpha.36": - version "3.0.0-alpha.36" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.0.0-alpha.36.tgz#0af69a86b845974d0f8cab62db0218f66b6ad2d6" - integrity sha512-zSN2SXuZPDqQaSFzYa1kOwToukqzhLHG7c66iO+/PlmWb6/RZ5cjTkG6VCJynlohRWea7AqZKWS/ptm8kM2Dmg== - -"@docsearch/react@^3.0.0-alpha.33": - version "3.0.0-alpha.36" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.0.0-alpha.36.tgz#f2dbd53ba9c389bc19aea89a3ad21782fa6b4bb5" - integrity sha512-synYZDHalvMzesFiy7kK+uoz4oTdWSTbe2cU+iiUjwFMyQ+WWjWwGVnvcvk+cjj9pRCVaZo5y5WpqNXq1j8k9Q== +"@babel/plugin-transform-react-constant-elements@^7.21.3": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz#08a1de35a301929b60fdf2788a54b46cd8ecd0ef" + integrity sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow== dependencies: - "@algolia/autocomplete-core" "1.0.0-alpha.44" - "@algolia/autocomplete-preset-algolia" "1.0.0-alpha.44" - "@docsearch/css" "3.0.0-alpha.36" - algoliasearch "^4.0.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@docusaurus/core@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.0.tgz#05506ee02e7d40e9f4c8d7b4f918d26d3b191159" - integrity sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q== +"@babel/plugin-transform-react-display-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== dependencies: - "@babel/core" "^7.12.16" - "@babel/generator" "^7.12.15" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.12.15" - "@babel/preset-env" "^7.12.16" - "@babel/preset-react" "^7.12.13" - "@babel/preset-typescript" "^7.12.16" - "@babel/runtime" "^7.12.5" - "@babel/runtime-corejs3" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@docusaurus/cssnano-preset" "2.0.0-beta.0" - "@docusaurus/react-loadable" "5.5.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - "@endiliey/static-site-generator-webpack-plugin" "^4.0.0" - "@svgr/webpack" "^5.5.0" - autoprefixer "^10.2.5" - babel-loader "^8.2.2" - babel-plugin-dynamic-import-node "2.3.0" - boxen "^5.0.0" - chalk "^4.1.0" - chokidar "^3.5.1" - clean-css "^5.1.1" - commander "^5.1.0" - copy-webpack-plugin "^8.1.0" - core-js "^3.9.1" - css-loader "^5.1.1" - css-minimizer-webpack-plugin "^2.0.0" - cssnano "^5.0.1" - del "^6.0.0" - detect-port "^1.3.0" - eta "^1.12.1" - express "^4.17.1" - file-loader "^6.2.0" - fs-extra "^9.1.0" - github-slugger "^1.3.0" - globby "^11.0.2" - html-minifier-terser "^5.1.1" - html-tags "^3.1.0" - html-webpack-plugin "^5.2.0" - import-fresh "^3.3.0" - is-root "^2.1.0" - leven "^3.1.0" - lodash "^4.17.20" - mini-css-extract-plugin "^1.4.0" - module-alias "^2.2.2" - nprogress "^0.2.0" - postcss "^8.2.10" - postcss-loader "^5.2.0" - prompts "^2.4.0" - react-dev-utils "^11.0.1" - react-error-overlay "^6.0.9" - react-helmet "^6.1.0" - react-loadable "^5.5.0" - react-loadable-ssr-addon-v5-slorber "^1.0.1" - react-router "^5.2.0" - react-router-config "^5.1.1" - react-router-dom "^5.2.0" - resolve-pathname "^3.0.0" - rtl-detect "^1.0.2" - semver "^7.3.4" - serve-handler "^6.1.3" - shelljs "^0.8.4" - std-env "^2.2.1" - strip-ansi "^6.0.0" - terser-webpack-plugin "^5.1.1" - tslib "^2.1.0" - update-notifier "^5.1.0" - url-loader "^4.1.1" - wait-on "^5.2.1" - webpack "^5.28.0" - webpack-bundle-analyzer "^4.4.0" - webpack-dev-server "^3.11.2" - webpack-merge "^5.7.3" - webpackbar "^5.0.0-3" - -"@docusaurus/cssnano-preset@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz#a79223479666059565d60a505bed2bbcac770384" - integrity sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw== - dependencies: - cssnano-preset-advanced "^5.0.0" - postcss "^8.2.10" - postcss-sort-media-queries "^3.8.9" - -"@docusaurus/mdx-loader@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.0.tgz#7a58933994b2face62e34698db2f9c88c53c6d61" - integrity sha512-oQLS2ZeUnqw79CV37glglZpaYgFfA5Az5lT83m5tJfMUZjoK4ehG1XWBeUzWy8QQNI452yAID8jz8jihEQeCcw== - dependencies: - "@babel/parser" "^7.12.16" - "@babel/traverse" "^7.12.13" - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@mdx-js/mdx" "^1.6.21" - "@mdx-js/react" "^1.6.21" - escape-html "^1.0.3" - file-loader "^6.2.0" - fs-extra "^9.1.0" - github-slugger "^1.3.0" - gray-matter "^4.0.2" - mdast-util-to-string "^2.0.0" - remark-emoji "^2.1.0" - stringify-object "^3.3.0" - unist-util-visit "^2.0.2" - url-loader "^4.1.1" - webpack "^5.28.0" - -"@docusaurus/plugin-content-blog@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.0.tgz#ea7d3679ab252e8f0e58aaf80f1fc6001c72c755" - integrity sha512-lz63i5k/23RJ3Rk/2fIsYAoD8Wua3b5b0AbH2JoOhQu1iAIQiV8m91Z3XALBSzA3nBtAOIweNI7yzWL+JFSTvw== - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/mdx-loader" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - chalk "^4.1.0" - feed "^4.2.2" - fs-extra "^9.1.0" - globby "^11.0.2" - loader-utils "^2.0.0" - lodash "^4.17.20" - reading-time "^1.3.0" - remark-admonitions "^1.2.1" - tslib "^2.1.0" - webpack "^5.28.0" - -"@docusaurus/plugin-content-docs@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.0.tgz#a5a1e0e95e499eefee53e4f61aeb99ac4a669648" - integrity sha512-WdDQUh2rRCbfJswVc0vY9EaAspxgziqpVEZja8+BmQR/TZh7HuLplT6GJbiFbE4RvwM3+PwG/jHMPglYDK60kw== - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/mdx-loader" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - chalk "^4.1.0" - combine-promises "^1.1.0" - execa "^5.0.0" - fs-extra "^9.1.0" - globby "^11.0.2" - import-fresh "^3.2.2" - js-yaml "^4.0.0" - loader-utils "^1.2.3" - lodash "^4.17.20" - remark-admonitions "^1.2.1" - shelljs "^0.8.4" - tslib "^2.1.0" - utility-types "^3.10.0" - webpack "^5.28.0" - -"@docusaurus/plugin-content-pages@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.0.tgz#1cab3ebe0a08be74576f10c95675291bf84f848e" - integrity sha512-mk5LVVSvn+HJPKBaAs/Pceq/hTGxF2LVBvJEquuQz0NMAW3QdBWaYRRpOrL9CO8v+ygn5RuLslXsyZBsDNuhww== - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/mdx-loader" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - globby "^11.0.2" - lodash "^4.17.20" - minimatch "^3.0.4" - remark-admonitions "^1.2.1" - slash "^3.0.0" - tslib "^2.1.0" - webpack "^5.28.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@docusaurus/plugin-debug@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.0.tgz#bee672b8858d88bdb229d4301785ff4692ebd17f" - integrity sha512-m75sZdF8Yccxfih3qfdQg9DucMTrYBnmeTA8GNmdVaK701Ip8t50d1pDJchtu0FSEh6vzVB9C6D2YD5YgVFp8A== +"@babel/plugin-transform-react-jsx-development@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7" + integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - react-json-view "^1.21.1" - tslib "^2.1.0" + "@babel/plugin-transform-react-jsx" "^7.25.9" -"@docusaurus/plugin-google-analytics@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.0.tgz#ee287fb991202d8e9b792129dcc5542ef3ccd6c9" - integrity sha512-7lHrg1L+adc8VbiaLexa15i4fdq4MRPUTLMxRPAWz+QskhisW89Ryi2/gDmfMNqLblX84Qg2RASa+2gqO4wepw== +"@babel/plugin-transform-react-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== dependencies: - "@docusaurus/core" "2.0.0-beta.0" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" -"@docusaurus/plugin-google-gtag@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.0.tgz#4836770130cf54ff2cd83affbff9644ee7293e9e" - integrity sha512-V7zaYbhAMv0jexm5H/5sAnoM1GHibcn9QQk5UWC++x1kE0KRuLDZHV+9OyvW5wr0wWFajod/b88SpUpSMF5u+g== +"@babel/plugin-transform-react-pure-annotations@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62" + integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== dependencies: - "@docusaurus/core" "2.0.0-beta.0" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@docusaurus/plugin-sitemap@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.0.tgz#985d4cc3af86499f616ced024ba1fab8329e601d" - integrity sha512-dvmk8Sr+6pBkiKDb7Rjdp0GeFDWPUlayoJWK3fN3g0Fno6uxFfYhNZyXJ+ObyCA7HoW5rzeBMiO+uAja19JXTg== +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - fs-extra "^9.1.0" - sitemap "^6.3.6" - tslib "^2.1.0" + "@babel/helper-plugin-utils" "^7.25.9" + regenerator-transform "^0.15.2" -"@docusaurus/preset-classic@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.0.tgz#79eb4366e6b5eb7061370019127e40172432d770" - integrity sha512-cFpR0UaAeUt5qVx1bpidhlar6tiRNITIQlxP4bOVsjbxVTZhZ/cNuIz7C+2zFPCuKIflGXdTIQOrucPmd7z51Q== - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/plugin-content-blog" "2.0.0-beta.0" - "@docusaurus/plugin-content-docs" "2.0.0-beta.0" - "@docusaurus/plugin-content-pages" "2.0.0-beta.0" - "@docusaurus/plugin-debug" "2.0.0-beta.0" - "@docusaurus/plugin-google-analytics" "2.0.0-beta.0" - "@docusaurus/plugin-google-gtag" "2.0.0-beta.0" - "@docusaurus/plugin-sitemap" "2.0.0-beta.0" - "@docusaurus/theme-classic" "2.0.0-beta.0" - "@docusaurus/theme-search-algolia" "2.0.0-beta.0" - -"@docusaurus/react-loadable@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz#6d6f0c8fd9a434b62a1ab1f8645ee7bde5a9ec21" - integrity sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg== +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== dependencies: - prop-types "^15.6.2" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@docusaurus/theme-classic@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.0.tgz#0ad74264dc592590bd7d8a6f6327cb83bbabc665" - integrity sha512-cBNtwAyg3be7Gk41FazMtgyibAcfuYaGHhGHIDRsXfc/qp3RhbiGiei7tyh200QT0NgKZxiVQy/r4d0mtjC++Q== - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/plugin-content-blog" "2.0.0-beta.0" - "@docusaurus/plugin-content-docs" "2.0.0-beta.0" - "@docusaurus/plugin-content-pages" "2.0.0-beta.0" - "@docusaurus/theme-common" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - "@mdx-js/mdx" "^1.6.21" - "@mdx-js/react" "^1.6.21" - chalk "^4.1.0" - clsx "^1.1.1" - copy-text-to-clipboard "^3.0.0" - fs-extra "^9.1.0" - globby "^11.0.2" - infima "0.2.0-alpha.23" - lodash "^4.17.20" - parse-numeric-range "^1.2.0" - postcss "^8.2.10" - prism-react-renderer "^1.1.1" - prismjs "^1.23.0" - prop-types "^15.7.2" - react-router-dom "^5.2.0" - rtlcss "^3.1.2" - -"@docusaurus/theme-common@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-beta.0.tgz#3674ef6482cc39efa034fd8d8b1c831588896329" - integrity sha512-2rcVmQpvbdAgnzTWuM7Bfpu+2TQm928bhlvxn226jQy7IYz8ySRlIode63HhCtpx03hpdMCkrK6HxhfEcvHjQg== - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/plugin-content-blog" "2.0.0-beta.0" - "@docusaurus/plugin-content-docs" "2.0.0-beta.0" - "@docusaurus/plugin-content-pages" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - tslib "^2.1.0" +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-runtime@^7.25.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.9.tgz#ea8be19ef134668e98f7b54daf7c4f853859dc44" + integrity sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.26.5" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-template-literals@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5" + integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-typeof-symbol@^7.26.7": + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz#d0e33acd9223744c1e857dbd6fa17bd0a3786937" + integrity sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-typescript@^7.25.9": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz#2e9caa870aa102f50d7125240d9dbf91334b0950" + integrity sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" + +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/preset-env@^7.20.2", "@babel/preset-env@^7.25.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.9.tgz#2ec64e903d0efe743699f77a10bdf7955c2123c3" + integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ== + dependencies: + "@babel/compat-data" "^7.26.8" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.26.8" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.26.5" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.26.3" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.26.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.26.3" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.26.8" + "@babel/plugin-transform-typeof-symbol" "^7.26.7" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.11.0" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.40.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" -"@docusaurus/theme-search-algolia@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.0.tgz#bfdee3981d8da72377b9045459950686d28a01fd" - integrity sha512-/GhgAm4yuwqTXWTsWnqpFYxpjTv+t45Wk8q/LmTVINa+A7b6jkMkch2lygagIt69/ufDm2Uw6eYhgrmF4DJqfQ== - dependencies: - "@docsearch/react" "^3.0.0-alpha.33" - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/theme-common" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - algoliasearch "^4.8.4" - algoliasearch-helper "^3.3.4" - clsx "^1.1.1" - eta "^1.12.1" - lodash "^4.17.20" +"@babel/preset-react@^7.18.6", "@babel/preset-react@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa" + integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-transform-react-display-name" "^7.25.9" + "@babel/plugin-transform-react-jsx" "^7.25.9" + "@babel/plugin-transform-react-jsx-development" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations" "^7.25.9" + +"@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.25.9": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" + integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-typescript" "^7.25.9" + +"@babel/runtime-corejs3@^7.25.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.26.9.tgz#8b73bae47453aa3dd2839ac52598581a7dd8332f" + integrity sha512-5EVjbTegqN7RSJle6hMWYxO4voo4rI+9krITk+DWR+diJgGrjZjrIBnJhjrHYYQsFgI7j1w1QnrvV7YSKBfYGg== + dependencies: + core-js-pure "^3.30.2" + regenerator-runtime "^0.14.0" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.25.0", "@babel/runtime@^7.25.9", "@babel/runtime@^7.8.4": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.9.tgz#aa4c6facc65b9cb3f87d75125ffd47781b475433" + integrity sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.25.9", "@babel/template@^7.26.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2" + integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.26.9" + "@babel/types" "^7.26.9" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.26.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.9.tgz#4398f2394ba66d05d988b2ad13c219a2c857461a" + integrity sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.9" + "@babel/parser" "^7.26.9" + "@babel/template" "^7.26.9" + "@babel/types" "^7.26.9" + debug "^4.3.1" + globals "^11.1.0" -"@docusaurus/types@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-beta.0.tgz#f473f417bdf690cfd52611ddf6d89ff939d1f2a4" - integrity sha512-z9PI+GbtYwqTXnkX4/a/A6psDX2p8N2uWlN2f4ifrm8WY4WhR9yiTOh0uo0pIqqaUQQvkEq3o5hOXuXLECEs+w== +"@babel/types@^7.21.3", "@babel/types@^7.25.9", "@babel/types@^7.26.9", "@babel/types@^7.4.4": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.9.tgz#08b43dec79ee8e682c2ac631c010bdcac54a21ce" + integrity sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw== dependencies: - commander "^5.1.0" - joi "^17.4.0" - querystring "0.2.0" - webpack "^5.28.0" - webpack-merge "^5.7.3" - -"@docusaurus/utils-validation@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.0.tgz#3e6491c269a397fed29717a1cb69109df9483461" - integrity sha512-ELl/FVJ6xBz35TisZ1NmJhjbiVXDeU++K531PEFPCPmwnQPh7S6hZXdPnR71/Kc3BmuN9X2ZkwGOqNKVfys2Bg== - dependencies: - "@docusaurus/utils" "2.0.0-beta.0" - chalk "^4.1.0" - joi "^17.4.0" - tslib "^2.1.0" + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" -"@docusaurus/utils@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.0.tgz#6f2690fd6fcd942f0d690db1dffb96742762deb3" - integrity sha512-bvrT1EQu0maavr0Hb/lke9jmpzgVL/9tn5VQtbyahf472eJFY0bQDExllDrHK+l784SUvucqX0iaQeg0q6ySUw== +"@braintree/sanitize-url@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz#15e19737d946559289b915e5dad3b4c28407735e" + integrity sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw== + +"@chevrotain/cst-dts-gen@11.0.3": + version "11.0.3" + resolved "https://registry.yarnpkg.com/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz#5e0863cc57dc45e204ccfee6303225d15d9d4783" + integrity sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ== dependencies: - "@docusaurus/types" "2.0.0-beta.0" - "@types/github-slugger" "^1.3.0" - chalk "^4.1.0" - escape-string-regexp "^4.0.0" - fs-extra "^9.1.0" - gray-matter "^4.0.2" - lodash "^4.17.20" - resolve-pathname "^3.0.0" - tslib "^2.1.0" + "@chevrotain/gast" "11.0.3" + "@chevrotain/types" "11.0.3" + lodash-es "4.17.21" -"@endiliey/static-site-generator-webpack-plugin@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz#94bfe58fd83aeda355de797fcb5112adaca3a6b1" - integrity sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng== +"@chevrotain/gast@11.0.3": + version "11.0.3" + resolved "https://registry.yarnpkg.com/@chevrotain/gast/-/gast-11.0.3.tgz#e84d8880323fe8cbe792ef69ce3ffd43a936e818" + integrity sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q== dependencies: - bluebird "^3.7.1" - cheerio "^0.22.0" - eval "^0.1.4" - url "^0.11.0" - webpack-sources "^1.4.3" + "@chevrotain/types" "11.0.3" + lodash-es "4.17.21" -"@hapi/hoek@^9.0.0": - version "9.2.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.0.tgz#f3933a44e365864f4dad5db94158106d511e8131" - integrity sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug== +"@chevrotain/regexp-to-ast@11.0.3": + version "11.0.3" + resolved "https://registry.yarnpkg.com/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz#11429a81c74a8e6a829271ce02fc66166d56dcdb" + integrity sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA== -"@hapi/topo@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7" - integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw== +"@chevrotain/types@11.0.3": + version "11.0.3" + resolved "https://registry.yarnpkg.com/@chevrotain/types/-/types-11.0.3.tgz#f8a03914f7b937f594f56eb89312b3b8f1c91848" + integrity sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ== + +"@chevrotain/utils@11.0.3": + version "11.0.3" + resolved "https://registry.yarnpkg.com/@chevrotain/utils/-/utils-11.0.3.tgz#e39999307b102cff3645ec4f5b3665f5297a2224" + integrity sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ== + +"@chirpstack/chirpstack-api-grpc-web@^4.16.2": + version "4.16.2" + resolved "https://registry.yarnpkg.com/@chirpstack/chirpstack-api-grpc-web/-/chirpstack-api-grpc-web-4.16.2.tgz#71a5e0470c7466ad098f769e9c2adbff5b4313cc" + integrity sha512-FA997M9QsOtMULUiZz8hSnTfv3SvynL5H+YHJwUdlA7uk26oBXYqd9NfKCCV/XB/ah4XRNpR6aTh38ExU15vtA== dependencies: - "@hapi/hoek" "^9.0.0" + "@types/google-protobuf" "^3.15.12" + google-protobuf "^3.21.4" + grpc-web "^1.5.0" -"@mdx-js/mdx@^1.6.21": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" - integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== - dependencies: - "@babel/core" "7.12.9" - "@babel/plugin-syntax-jsx" "7.12.1" - "@babel/plugin-syntax-object-rest-spread" "7.8.3" - "@mdx-js/util" "1.6.22" - babel-plugin-apply-mdx-type-prop "1.6.22" - babel-plugin-extract-import-names "1.6.22" - camelcase-css "2.0.1" - detab "2.0.4" - hast-util-raw "6.0.1" - lodash.uniq "4.5.0" - mdast-util-to-hast "10.0.1" - remark-footnotes "2.0.0" - remark-mdx "1.6.22" - remark-parse "8.0.3" - remark-squeeze-paragraphs "4.0.0" - style-to-object "0.3.0" - unified "9.2.0" - unist-builder "2.0.3" - unist-util-visit "2.0.3" - -"@mdx-js/react@^1.5.8": - version "1.6.19" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.19.tgz#fce0f2b802804258b67817550bf3186dde2b1bd6" - integrity sha512-RS37Tagqyp2R0XFPoUZeSbZC5uJQRPhqOHWeT1LEwxESjMWb3VORHz7E827ldeQr3UW6VEQEyq/THegu+bLj6A== - -"@mdx-js/react@^1.6.21": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" - integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== - -"@mdx-js/util@1.6.22": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" - integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== - -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== +"@clockwork-xyz/sdk@^0.3.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@clockwork-xyz/sdk/-/sdk-0.3.4.tgz#fba9efd4183172c560f2566e42126e021a1e5f4d" + integrity sha512-BLSx/HebDaw3FznFoVP94NP4ZI1TNC3ZomU22sBDpGcXPuUp7gBn77TFAVDjrRC+1YmA6p5AAmw8RVx0LIpyTA== dependencies: - "@nodelib/fs.stat" "2.0.4" - run-parallel "^1.1.9" + "@coral-xyz/anchor" "^0.26.0" + "@solana/web3.js" "^1.73.2" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== +"@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== + +"@coral-xyz/anchor@^0.26.0": + version "0.26.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.26.0.tgz#c8e4f7177e93441afd030f22d777d54d0194d7d1" + integrity sha512-PxRl+wu5YyptWiR9F2MBHOLLibm87Z4IMUBPreX+DYBtPM+xggvcPi0KAN7+kIL4IrIhXI8ma5V0MCXxSN1pHg== + dependencies: + "@coral-xyz/borsh" "^0.26.0" + "@solana/web3.js" "^1.68.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^6.3.0" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + +"@coral-xyz/anchor@^0.27.0": + version "0.27.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.27.0.tgz#621e5ef123d05811b97e49973b4ed7ede27c705c" + integrity sha512-+P/vPdORawvg3A9Wj02iquxb4T0C5m4P6aZBVYysKl4Amk+r6aMPZkUhilBkD6E4Nuxnoajv3CFykUfkGE0n5g== + dependencies: + "@coral-xyz/borsh" "^0.27.0" + "@solana/web3.js" "^1.68.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^6.3.0" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + +"@coral-xyz/anchor@^0.28.0": + version "0.28.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.28.0.tgz#8345c3c9186a91f095f704d7b90cd256f7e8b2dc" + integrity sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw== + dependencies: + "@coral-xyz/borsh" "^0.28.0" + "@solana/web3.js" "^1.68.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^6.3.0" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + +"@coral-xyz/borsh@^0.26.0": + version "0.26.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.26.0.tgz#d054f64536d824634969e74138f9f7c52bbbc0d5" + integrity sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ== + dependencies: + bn.js "^5.1.2" + buffer-layout "^1.2.0" + +"@coral-xyz/borsh@^0.27.0": + version "0.27.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.27.0.tgz#700c647ea5262b1488957ac7fb4e8acf72c72b63" + integrity sha512-tJKzhLukghTWPLy+n8K8iJKgBq1yLT/AxaNd10yJrX8mI56ao5+OFAKAqW/h0i79KCvb4BK0VGO5ECmmolFz9A== + dependencies: + bn.js "^5.1.2" + buffer-layout "^1.2.0" + +"@coral-xyz/borsh@^0.28.0": + version "0.28.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.28.0.tgz#fa368a2f2475bbf6f828f4657f40a52102e02b6d" + integrity sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ== + dependencies: + bn.js "^5.1.2" + buffer-layout "^1.2.0" + +"@csstools/cascade-layer-name-parser@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz#43f962bebead0052a9fed1a2deeb11f85efcbc72" + integrity sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A== -"@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== - dependencies: - "@nodelib/fs.scandir" "2.1.4" - fastq "^1.6.0" +"@csstools/color-helpers@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" + integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA== -"@polka/url@^1.0.0-next.9": - version "1.0.0-next.12" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.12.tgz#431ec342a7195622f86688bbda82e3166ce8cb28" - integrity sha512-6RglhutqrGFMO1MNUXp95RBuYIuc8wTnMAV5MUhLmjTOy78ncwOw7RgeQ/HeymkKXRhZd0s2DNrM1rL7unk3MQ== +"@csstools/css-calc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" + integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== -"@sideway/address@^4.1.0": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.2.tgz#811b84333a335739d3969cfc434736268170cad1" - integrity sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA== +"@csstools/css-color-parser@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz#4e386af3a99dd36c46fef013cfe4c1c341eed6f0" + integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA== dependencies: - "@hapi/hoek" "^9.0.0" + "@csstools/color-helpers" "^5.1.0" + "@csstools/css-calc" "^2.1.4" -"@sideway/formula@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" - integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== +"@csstools/css-parser-algorithms@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076" + integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== +"@csstools/css-tokenizer@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" + integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@csstools/media-query-list-parser@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz#7aec77bcb89c2da80ef207e73f474ef9e1b3cdf1" + integrity sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ== -"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" - integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== +"@csstools/postcss-alpha-function@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.0.tgz#8764fbbf25a5f1e106fb623ae632e01a220a6fc2" + integrity sha512-r2L8KNg5Wriq5n8IUQcjzy2Rh37J5YjzP9iOyHZL5fxdWYHB08vqykHQa4wAzN/tXwDuCHnhQDGCtxfS76xn7g== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" -"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" - integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== +"@csstools/postcss-cascade-layers@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz#dd2c70db3867b88975f2922da3bfbae7d7a2cae7" + integrity sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg== + dependencies: + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" -"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" - integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== +"@csstools/postcss-color-function-display-p3-linear@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.0.tgz#27395b62a5d9a108eefcc0eb463247a15f4269a1" + integrity sha512-7q+OuUqfowRrP84m/Jl0wv3pfCQyUTCW5MxDIux+/yty5IkUUHOTigCjrC0Fjy3OT0ncGLudHbfLWmP7E1arNA== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-color-function@^4.0.11": + version "4.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-4.0.11.tgz#03c34a51dc00943a6674294fb1163e7af9e87ffd" + integrity sha512-AtH22zLHTLm64HLdpv5EedT/zmYTm1MtdQbQhRZXxEB6iYtS6SrS1jLX3TcmUWMFzpumK/OVylCm3HcLms4slw== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-color-mix-function@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.11.tgz#6db0a1c749fabaf2bf978b37044700d1c1b09fc2" + integrity sha512-cQpXBelpTx0YhScZM5Ve0jDCA4RzwFc7oNafzZOGgCHt/GQVYiU8Vevz9QJcwy/W0Pyi/BneY+KMjz23lI9r+Q== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-color-mix-variadic-function-arguments@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.1.tgz#2dd9d66ded0d41cd7b2c13a1188f03e894c17d7e" + integrity sha512-c7hyBtbF+jlHIcUGVdWY06bHICgguV9ypfcELU3eU3W/9fiz2dxM8PqxQk2ndXYTzLnwPvNNqu1yCmQ++N6Dcg== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-content-alt-text@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.7.tgz#ac0a263e8acb0be99cdcfc0b1792c62141825747" + integrity sha512-cq/zWaEkpcg3RttJ5+GdNwk26NwxY5KgqgtNL777Fdd28AVGHxuBvqmK4Jq4oKhW1NX4M2LbgYAVVN0NZ+/XYQ== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-exponential-functions@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz#fc03d1272888cb77e64cc1a7d8a33016e4f05c69" + integrity sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw== + dependencies: + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-font-format-keywords@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz#6730836eb0153ff4f3840416cc2322f129c086e6" + integrity sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-gamut-mapping@^2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz#be0e34c9f0142852cccfc02b917511f0d677db8b" + integrity sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-gradients-interpolation-method@^5.0.11": + version "5.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.11.tgz#f1c5c431a44ed9655cb408aea8666ed2c5250490" + integrity sha512-8M3mcNTL3cGIJXDnvrJ2oWEcKi3zyw7NeYheFKePUlBmLYm1gkw9Rr/BA7lFONrOPeQA3yeMPldrrws6lqHrug== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-hwb-function@^4.0.11": + version "4.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.11.tgz#4bb173f1c8c2361bf46a842a948ee687471ae4ea" + integrity sha512-9meZbsVWTZkWsSBazQips3cHUOT29a/UAwFz0AMEXukvpIGGDR9+GMl3nIckWO5sPImsadu4F5Zy+zjt8QgCdA== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-ic-unit@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.3.tgz#ba0375e9d346e6e5a42dc8c2cb1133b2262f9ffa" + integrity sha512-RtYYm2qUIu9vAaHB0cC8rQGlOCQAUgEc2tMr7ewlGXYipBQKjoWmyVArqsk7SEr8N3tErq6P6UOJT3amaVof5Q== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" -"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" - integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== +"@csstools/postcss-initial@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz#c385bd9d8ad31ad159edd7992069e97ceea4d09a" + integrity sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg== -"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" - integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== +"@csstools/postcss-is-pseudo-class@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz#d34e850bcad4013c2ed7abe948bfa0448aa8eb74" + integrity sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ== + dependencies: + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" -"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" - integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== +"@csstools/postcss-light-dark-function@^2.0.10": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.10.tgz#b606f13d1f81efd297763c6ad1ac515c3ca4165b" + integrity sha512-g7Lwb294lSoNnyrwcqoooh9fTAp47rRNo+ILg7SLRSMU3K9ePIwRt566sNx+pehiCelv4E1ICaU1EwLQuyF2qw== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" -"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" - integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== +"@csstools/postcss-logical-float-and-clear@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz#62617564182cf86ab5d4e7485433ad91e4c58571" + integrity sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ== -"@svgr/babel-plugin-transform-svg-component@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" - integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== +"@csstools/postcss-logical-overflow@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz#c6de7c5f04e3d4233731a847f6c62819bcbcfa1d" + integrity sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA== -"@svgr/babel-preset@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" - integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" - "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" - "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" - "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" - "@svgr/babel-plugin-transform-svg-component" "^5.5.0" - -"@svgr/core@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" - integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== - dependencies: - "@svgr/plugin-jsx" "^5.5.0" - camelcase "^6.2.0" - cosmiconfig "^7.0.0" +"@csstools/postcss-logical-overscroll-behavior@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz#43c03eaecdf34055ef53bfab691db6dc97a53d37" + integrity sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w== -"@svgr/hast-util-to-babel-ast@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" - integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== +"@csstools/postcss-logical-resize@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz#4df0eeb1a61d7bd85395e56a5cce350b5dbfdca6" + integrity sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg== dependencies: - "@babel/types" "^7.12.6" + postcss-value-parser "^4.2.0" -"@svgr/plugin-jsx@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" - integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== +"@csstools/postcss-logical-viewport-units@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz#016d98a8b7b5f969e58eb8413447eb801add16fc" + integrity sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ== dependencies: - "@babel/core" "^7.12.3" - "@svgr/babel-preset" "^5.5.0" - "@svgr/hast-util-to-babel-ast" "^5.5.0" - svg-parser "^2.0.2" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/utilities" "^2.0.0" -"@svgr/plugin-svgo@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" - integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== +"@csstools/postcss-media-minmax@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz#184252d5b93155ae526689328af6bdf3fc113987" + integrity sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig== dependencies: - cosmiconfig "^7.0.0" - deepmerge "^4.2.2" - svgo "^1.2.2" - -"@svgr/webpack@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" - integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== - dependencies: - "@babel/core" "^7.12.3" - "@babel/plugin-transform-react-constant-elements" "^7.12.1" - "@babel/preset-env" "^7.12.1" - "@babel/preset-react" "^7.12.5" - "@svgr/core" "^5.5.0" - "@svgr/plugin-jsx" "^5.5.0" - "@svgr/plugin-svgo" "^5.5.0" - loader-utils "^2.0.0" + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/media-query-list-parser" "^4.0.3" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== +"@csstools/postcss-media-queries-aspect-ratio-number-values@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz#f485c31ec13d6b0fb5c528a3474334a40eff5f11" + integrity sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg== dependencies: - defer-to-connect "^1.0.1" - -"@trysound/sax@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669" - integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/media-query-list-parser" "^4.0.3" -"@types/eslint-scope@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" - integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== +"@csstools/postcss-nested-calc@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz#754e10edc6958d664c11cde917f44ba144141c62" + integrity sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A== dependencies: - "@types/eslint" "*" - "@types/estree" "*" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" -"@types/eslint@*": - version "7.2.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.10.tgz#4b7a9368d46c0f8cd5408c23288a59aa2394d917" - integrity sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ== +"@csstools/postcss-normalize-display-values@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#ecdde2daf4e192e5da0c6fd933b6d8aff32f2a36" + integrity sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q== dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^0.0.47": - version "0.0.47" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" - integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== + postcss-value-parser "^4.2.0" -"@types/github-slugger@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@types/github-slugger/-/github-slugger-1.3.0.tgz#16ab393b30d8ae2a111ac748a015ac05a1fc5524" - integrity sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g== +"@csstools/postcss-oklab-function@^4.0.11": + version "4.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.11.tgz#d69242a9b027dda731bd79db7293bc938bb6df97" + integrity sha512-9f03ZGxZ2VmSCrM4SDXlAYP+Xpu4VFzemfQUQFL9OYxAbpvDy0FjDipZ0i8So1pgs8VIbQI0bNjFWgfdpGw8ig== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== +"@csstools/postcss-progressive-custom-properties@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.0.tgz#7f15349c2cd108478d28e1503c660d4037925030" + integrity sha512-fWCXRasX17N1NCPTCuwC3FJDV+Wc031f16cFuuMEfIsYJ1q5ABCa59W0C6VeMGqjNv6ldf37vvwXXAeaZjD9PA== dependencies: - "@types/minimatch" "*" - "@types/node" "*" + postcss-value-parser "^4.2.0" -"@types/hast@^2.0.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9" - integrity sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q== +"@csstools/postcss-random-function@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz#3191f32fe72936e361dadf7dbfb55a0209e2691e" + integrity sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w== dependencies: - "@types/unist" "*" + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" -"@types/html-minifier-terser@^5.0.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" - integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== +"@csstools/postcss-relative-color-syntax@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.11.tgz#d81d59ff123fa5f3e4a0493b1e2b0585353bb541" + integrity sha512-oQ5fZvkcBrWR+k6arHXk0F8FlkmD4IxM+rcGDLWrF2f31tWyEM3lSraeWAV0f7BGH6LIrqmyU3+Qo/1acfoJng== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@csstools/postcss-scope-pseudo-class@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz#9fe60e9d6d91d58fb5fc6c768a40f6e47e89a235" + integrity sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q== + dependencies: + postcss-selector-parser "^7.0.0" -"@types/mdast@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" - integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== +"@csstools/postcss-sign-functions@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz#a9ac56954014ae4c513475b3f1b3e3424a1e0c12" + integrity sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg== dependencies: - "@types/unist" "*" + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" -"@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== +"@csstools/postcss-stepped-value-functions@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz#36036f1a0e5e5ee2308e72f3c9cb433567c387b9" + integrity sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA== + dependencies: + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" -"@types/node@*": - version "15.0.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.3.tgz#ee09fcaac513576474c327da5818d421b98db88a" - integrity sha512-/WbxFeBU+0F79z9RdEOXH4CsDga+ibi5M8uEYr91u3CkT/pdWcV8MCook+4wDPnZBexRdwWS+PiVZ2xJviAzcQ== +"@csstools/postcss-text-decoration-shorthand@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz#fae1b70f07d1b7beb4c841c86d69e41ecc6f743c" + integrity sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA== + dependencies: + "@csstools/color-helpers" "^5.1.0" + postcss-value-parser "^4.2.0" -"@types/node@^14.14.28": - version "14.14.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.45.tgz#ec2dfb5566ff814d061aef7e141575aedba245cf" - integrity sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw== +"@csstools/postcss-trigonometric-functions@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz#3f94ed2e319b57f2c59720b64e4d0a8a6fb8c3b2" + integrity sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A== + dependencies: + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" -"@types/parse-json@^4.0.0": +"@csstools/postcss-unset-value@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz#7caa981a34196d06a737754864baf77d64de4bba" + integrity sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA== -"@types/parse5@^5.0.0": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" - integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== +"@csstools/selector-resolve-nested@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz#848c6f44cb65e3733e478319b9342b7aa436fac7" + integrity sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g== -"@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== +"@csstools/selector-specificity@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" + integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== -"@types/sax@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.1.tgz#e0248be936ece791a82db1a57f3fb5f7c87e8172" - integrity sha512-dqYdvN7Sbw8QT/0Ci5rhjE4/iCMJEM0Y9rHpCu+gGXD9Lwbz28t6HI2yegsB6BoV1sShRMU6lAmAcgRjmFy7LA== - dependencies: - "@types/node" "*" +"@csstools/utilities@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-2.0.0.tgz#f7ff0fee38c9ffb5646d47b6906e0bc8868bde60" + integrity sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ== -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" - integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== - -"@webassemblyjs/ast@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" - integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - -"@webassemblyjs/floating-point-hex-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" - integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== - -"@webassemblyjs/helper-api-error@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" - integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== - -"@webassemblyjs/helper-buffer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" - integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== - -"@webassemblyjs/helper-numbers@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" - integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@xtuc/long" "4.2.2" +"@discoveryjs/json-ext@0.5.7": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@docsearch/core@4.5.4": + version "4.5.4" + resolved "https://registry.yarnpkg.com/@docsearch/core/-/core-4.5.4.tgz#5f93dd99ed4de136bdd38988124b369b5d51e946" + integrity sha512-DbkfZbJyYAPFJtF71eAFOTQSy5z5c/hdSN0UrErORKDwXKLTJBR0c+5WxE5l+IKZx4xIaEa8RkrL7T28DTCOYw== + +"@docsearch/css@4.5.4": + version "4.5.4" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.5.4.tgz#99b69988bc061cd3772c25a2b155c9ee0813a0a2" + integrity sha512-gzO4DJwyM9c4YEPHwaLV1nUCDC2N6yoh0QJj44dce2rcfN71mB+jpu3+F+Y/KMDF1EKV0C3m54leSWsraE94xg== + +"@docsearch/react@^3.9.0 || ^4.1.0": + version "4.5.4" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-4.5.4.tgz#9eaa9e8c56afb8f5d6da9239221ca9dee1a8d043" + integrity sha512-iBNFfvWoUFRUJmGQ/r+0AEp2OJgJMoYIKRiRcTDON0hObBRSLlrv2ktb7w3nc1MeNm1JIpbPA99i59TiIR49fA== + dependencies: + "@algolia/autocomplete-core" "1.19.2" + "@docsearch/core" "4.5.4" + "@docsearch/css" "4.5.4" + +"@docusaurus/babel@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.9.2.tgz#f956c638baeccf2040e482c71a742bc7e35fdb22" + integrity sha512-GEANdi/SgER+L7Japs25YiGil/AUDnFFHaCGPBbundxoWtCkA2lmy7/tFmgED4y1htAy6Oi4wkJEQdGssnw9MA== + dependencies: + "@babel/core" "^7.25.9" + "@babel/generator" "^7.25.9" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.25.9" + "@babel/preset-env" "^7.25.9" + "@babel/preset-react" "^7.25.9" + "@babel/preset-typescript" "^7.25.9" + "@babel/runtime" "^7.25.9" + "@babel/runtime-corejs3" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@docusaurus/logger" "3.9.2" + "@docusaurus/utils" "3.9.2" + babel-plugin-dynamic-import-node "^2.3.3" + fs-extra "^11.1.1" + tslib "^2.6.0" + +"@docusaurus/bundler@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.9.2.tgz#0ca82cda4acf13a493e3f66061aea351e9d356cf" + integrity sha512-ZOVi6GYgTcsZcUzjblpzk3wH1Fya2VNpd5jtHoCCFcJlMQ1EYXZetfAnRHLcyiFeBABaI1ltTYbOBtH/gahGVA== + dependencies: + "@babel/core" "^7.25.9" + "@docusaurus/babel" "3.9.2" + "@docusaurus/cssnano-preset" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + babel-loader "^9.2.1" + clean-css "^5.3.3" + copy-webpack-plugin "^11.0.0" + css-loader "^6.11.0" + css-minimizer-webpack-plugin "^5.0.1" + cssnano "^6.1.2" + file-loader "^6.2.0" + html-minifier-terser "^7.2.0" + mini-css-extract-plugin "^2.9.2" + null-loader "^4.0.1" + postcss "^8.5.4" + postcss-loader "^7.3.4" + postcss-preset-env "^10.2.1" + terser-webpack-plugin "^5.3.9" + tslib "^2.6.0" + url-loader "^4.1.1" + webpack "^5.95.0" + webpackbar "^6.0.1" + +"@docusaurus/core@3.9.2", "@docusaurus/core@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.9.2.tgz#cc970f29b85a8926d63c84f8cffdcda43ed266ff" + integrity sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw== + dependencies: + "@docusaurus/babel" "3.9.2" + "@docusaurus/bundler" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + boxen "^6.2.1" + chalk "^4.1.2" + chokidar "^3.5.3" + cli-table3 "^0.6.3" + combine-promises "^1.1.0" + commander "^5.1.0" + core-js "^3.31.1" + detect-port "^1.5.1" + escape-html "^1.0.3" + eta "^2.2.0" + eval "^0.1.8" + execa "5.1.1" + fs-extra "^11.1.1" + html-tags "^3.3.1" + html-webpack-plugin "^5.6.0" + leven "^3.1.0" + lodash "^4.17.21" + open "^8.4.0" + p-map "^4.0.0" + prompts "^2.4.2" + react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" + react-loadable "npm:@docusaurus/react-loadable@6.0.0" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.3.4" + react-router-config "^5.1.1" + react-router-dom "^5.3.4" + semver "^7.5.4" + serve-handler "^6.1.6" + tinypool "^1.0.2" + tslib "^2.6.0" + update-notifier "^6.0.2" + webpack "^5.95.0" + webpack-bundle-analyzer "^4.10.2" + webpack-dev-server "^5.2.2" + webpack-merge "^6.0.1" + +"@docusaurus/cssnano-preset@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.9.2.tgz#523aab65349db3c51a77f2489048d28527759428" + integrity sha512-8gBKup94aGttRduABsj7bpPFTX7kbwu+xh3K9NMCF5K4bWBqTFYW+REKHF6iBVDHRJ4grZdIPbvkiHd/XNKRMQ== + dependencies: + cssnano-preset-advanced "^6.1.2" + postcss "^8.5.4" + postcss-sort-media-queries "^5.2.0" + tslib "^2.6.0" + +"@docusaurus/logger@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.9.2.tgz#6ec6364b90f5a618a438cc9fd01ac7376869f92a" + integrity sha512-/SVCc57ByARzGSU60c50rMyQlBuMIJCjcsJlkphxY6B0GV4UH3tcA1994N8fFfbJ9kX3jIBe/xg3XP5qBtGDbA== + dependencies: + chalk "^4.1.2" + tslib "^2.6.0" + +"@docusaurus/mdx-loader@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.9.2.tgz#78d238de6c6203fa811cc2a7e90b9b79e111408c" + integrity sha512-wiYoGwF9gdd6rev62xDU8AAM8JuLI/hlwOtCzMmYcspEkzecKrP8J8X+KpYnTlACBUUtXNJpSoCwFWJhLRevzQ== + dependencies: + "@docusaurus/logger" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + "@mdx-js/mdx" "^3.0.0" + "@slorber/remark-comment" "^1.0.0" + escape-html "^1.0.3" + estree-util-value-to-estree "^3.0.1" + file-loader "^6.2.0" + fs-extra "^11.1.1" + image-size "^2.0.2" + mdast-util-mdx "^3.0.0" + mdast-util-to-string "^4.0.0" + rehype-raw "^7.0.0" + remark-directive "^3.0.0" + remark-emoji "^4.0.0" + remark-frontmatter "^5.0.0" + remark-gfm "^4.0.0" + stringify-object "^3.3.0" + tslib "^2.6.0" + unified "^11.0.3" + unist-util-visit "^5.0.0" + url-loader "^4.1.1" + vfile "^6.0.1" + webpack "^5.88.1" + +"@docusaurus/module-type-aliases@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.9.2.tgz#993c7cb0114363dea5ef6855e989b3ad4b843a34" + integrity sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew== + dependencies: + "@docusaurus/types" "3.9.2" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + "@types/react-router-dom" "*" + react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" + react-loadable "npm:@docusaurus/react-loadable@6.0.0" + +"@docusaurus/plugin-content-blog@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.9.2.tgz#d5ce51eb7757bdab0515e2dd26a793ed4e119df9" + integrity sha512-3I2HXy3L1QcjLJLGAoTvoBnpOwa6DPUa3Q0dMK19UTY9mhPkKQg/DYhAGTiBUKcTR0f08iw7kLPqOhIgdV3eVQ== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + cheerio "1.0.0-rc.12" + feed "^4.2.2" + fs-extra "^11.1.1" + lodash "^4.17.21" + schema-dts "^1.1.2" + srcset "^4.0.0" + tslib "^2.6.0" + unist-util-visit "^5.0.0" + utility-types "^3.10.0" + webpack "^5.88.1" + +"@docusaurus/plugin-content-docs@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz#cd8f2d1c06e53c3fa3d24bdfcb48d237bf2d6b2e" + integrity sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/module-type-aliases" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + "@types/react-router-config" "^5.0.7" + combine-promises "^1.1.0" + fs-extra "^11.1.1" + js-yaml "^4.1.0" + lodash "^4.17.21" + schema-dts "^1.1.2" + tslib "^2.6.0" + utility-types "^3.10.0" + webpack "^5.88.1" + +"@docusaurus/plugin-content-pages@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.9.2.tgz#22db6c88ade91cec0a9e87a00b8089898051b08d" + integrity sha512-s4849w/p4noXUrGpPUF0BPqIAfdAe76BLaRGAGKZ1gTDNiGxGcpsLcwJ9OTi1/V8A+AzvsmI9pkjie2zjIQZKA== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + fs-extra "^11.1.1" + tslib "^2.6.0" + webpack "^5.88.1" + +"@docusaurus/plugin-css-cascade-layers@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.9.2.tgz#358c85f63f1c6a11f611f1b8889d9435c11b22f8" + integrity sha512-w1s3+Ss+eOQbscGM4cfIFBlVg/QKxyYgj26k5AnakuHkKxH6004ZtuLe5awMBotIYF2bbGDoDhpgQ4r/kcj4rQ== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + tslib "^2.6.0" + +"@docusaurus/plugin-debug@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.9.2.tgz#b5df4db115583f5404a252dbf66f379ff933e53c" + integrity sha512-j7a5hWuAFxyQAkilZwhsQ/b3T7FfHZ+0dub6j/GxKNFJp2h9qk/P1Bp7vrGASnvA9KNQBBL1ZXTe7jlh4VdPdA== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + fs-extra "^11.1.1" + react-json-view-lite "^2.3.0" + tslib "^2.6.0" + +"@docusaurus/plugin-google-analytics@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.9.2.tgz#857fe075fdeccdf6959e62954d9efe39769fa247" + integrity sha512-mAwwQJ1Us9jL/lVjXtErXto4p4/iaLlweC54yDUK1a97WfkC6Z2k5/769JsFgwOwOP+n5mUQGACXOEQ0XDuVUw== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + tslib "^2.6.0" + +"@docusaurus/plugin-google-gtag@3.9.2", "@docusaurus/plugin-google-gtag@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.9.2.tgz#df75b1a90ae9266b0471909ba0265f46d5dcae62" + integrity sha512-YJ4lDCphabBtw19ooSlc1MnxtYGpjFV9rEdzjLsUnBCeis2djUyCozZaFhCg6NGEwOn7HDDyMh0yzcdRpnuIvA== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + "@types/gtag.js" "^0.0.12" + tslib "^2.6.0" + +"@docusaurus/plugin-google-tag-manager@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.9.2.tgz#d1a3cf935acb7d31b84685e92d70a1d342946677" + integrity sha512-LJtIrkZN/tuHD8NqDAW1Tnw0ekOwRTfobWPsdO15YxcicBo2ykKF0/D6n0vVBfd3srwr9Z6rzrIWYrMzBGrvNw== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + tslib "^2.6.0" + +"@docusaurus/plugin-sitemap@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.9.2.tgz#e1d9f7012942562cc0c6543d3cb2cdc4ae713dc4" + integrity sha512-WLh7ymgDXjG8oPoM/T4/zUP7KcSuFYRZAUTl8vR6VzYkfc18GBM4xLhcT+AKOwun6kBivYKUJf+vlqYJkm+RHw== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + fs-extra "^11.1.1" + sitemap "^7.1.1" + tslib "^2.6.0" + +"@docusaurus/plugin-svgr@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.9.2.tgz#62857ed79d97c0150d25f7e7380fdee65671163a" + integrity sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + "@svgr/core" "8.1.0" + "@svgr/webpack" "^8.1.0" + tslib "^2.6.0" + webpack "^5.88.1" + +"@docusaurus/preset-classic@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.9.2.tgz#85cc4f91baf177f8146c9ce896dfa1f0fd377050" + integrity sha512-IgyYO2Gvaigi21LuDIe+nvmN/dfGXAiMcV/murFqcpjnZc7jxFAxW+9LEjdPt61uZLxG4ByW/oUmX/DDK9t/8w== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/plugin-content-blog" "3.9.2" + "@docusaurus/plugin-content-docs" "3.9.2" + "@docusaurus/plugin-content-pages" "3.9.2" + "@docusaurus/plugin-css-cascade-layers" "3.9.2" + "@docusaurus/plugin-debug" "3.9.2" + "@docusaurus/plugin-google-analytics" "3.9.2" + "@docusaurus/plugin-google-gtag" "3.9.2" + "@docusaurus/plugin-google-tag-manager" "3.9.2" + "@docusaurus/plugin-sitemap" "3.9.2" + "@docusaurus/plugin-svgr" "3.9.2" + "@docusaurus/theme-classic" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/theme-search-algolia" "3.9.2" + "@docusaurus/types" "3.9.2" + +"@docusaurus/theme-classic@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.9.2.tgz#6e514f99a0ff42b80afcf42d5e5d042618311ce0" + integrity sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/module-type-aliases" "3.9.2" + "@docusaurus/plugin-content-blog" "3.9.2" + "@docusaurus/plugin-content-docs" "3.9.2" + "@docusaurus/plugin-content-pages" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/theme-translations" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + "@mdx-js/react" "^3.0.0" + clsx "^2.0.0" + infima "0.2.0-alpha.45" + lodash "^4.17.21" + nprogress "^0.2.0" + postcss "^8.5.4" + prism-react-renderer "^2.3.0" + prismjs "^1.29.0" + react-router-dom "^5.3.4" + rtlcss "^4.1.0" + tslib "^2.6.0" + utility-types "^3.10.0" + +"@docusaurus/theme-common@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.9.2.tgz#487172c6fef9815c2746ef62a71e4f5b326f9ba5" + integrity sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag== + dependencies: + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/module-type-aliases" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + clsx "^2.0.0" + parse-numeric-range "^1.3.0" + prism-react-renderer "^2.3.0" + tslib "^2.6.0" + utility-types "^3.10.0" -"@webassemblyjs/helper-wasm-bytecode@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" - integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== +"@docusaurus/theme-mermaid@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-mermaid/-/theme-mermaid-3.9.2.tgz#f065e4b4b319560ddd8c3be65ce9dd19ce1d5cc8" + integrity sha512-5vhShRDq/ntLzdInsQkTdoKWSzw8d1jB17sNPYhA/KvYYFXfuVEGHLM6nrf8MFbV8TruAHDG21Fn3W4lO8GaDw== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/module-type-aliases" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + mermaid ">=11.6.0" + tslib "^2.6.0" + +"@docusaurus/theme-search-algolia@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.9.2.tgz#420fd5b27fc1673b48151fdc9fe7167ba135ed50" + integrity sha512-GBDSFNwjnh5/LdkxCKQHkgO2pIMX1447BxYUBG2wBiajS21uj64a+gH/qlbQjDLxmGrbrllBrtJkUHxIsiwRnw== + dependencies: + "@docsearch/react" "^3.9.0 || ^4.1.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/plugin-content-docs" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/theme-translations" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + algoliasearch "^5.37.0" + algoliasearch-helper "^3.26.0" + clsx "^2.0.0" + eta "^2.2.0" + fs-extra "^11.1.1" + lodash "^4.17.21" + tslib "^2.6.0" + utility-types "^3.10.0" -"@webassemblyjs/helper-wasm-section@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" - integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== +"@docusaurus/theme-translations@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.9.2.tgz#238cd69c2da92d612be3d3b4f95944c1d0f1e041" + integrity sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA== dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" + fs-extra "^11.1.1" + tslib "^2.6.0" -"@webassemblyjs/ieee754@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" - integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== +"@docusaurus/types@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.9.2.tgz#e482cf18faea0d1fa5ce0e3f1e28e0f32d2593eb" + integrity sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q== dependencies: - "@xtuc/ieee754" "^1.2.0" + "@mdx-js/mdx" "^3.0.0" + "@types/history" "^4.7.11" + "@types/mdast" "^4.0.2" + "@types/react" "*" + commander "^5.1.0" + joi "^17.9.2" + react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" + utility-types "^3.10.0" + webpack "^5.95.0" + webpack-merge "^5.9.0" + +"@docusaurus/utils-common@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.9.2.tgz#e89bfcf43d66359f43df45293fcdf22814847460" + integrity sha512-I53UC1QctruA6SWLvbjbhCpAw7+X7PePoe5pYcwTOEXD/PxeP8LnECAhTHHwWCblyUX5bMi4QLRkxvyZ+IT8Aw== + dependencies: + "@docusaurus/types" "3.9.2" + tslib "^2.6.0" + +"@docusaurus/utils-validation@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.9.2.tgz#04aec285604790806e2fc5aa90aa950dc7ba75ae" + integrity sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A== + dependencies: + "@docusaurus/logger" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + fs-extra "^11.2.0" + joi "^17.9.2" + js-yaml "^4.1.0" + lodash "^4.17.21" + tslib "^2.6.0" -"@webassemblyjs/leb128@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" - integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== +"@docusaurus/utils@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.9.2.tgz#ffab7922631c7e0febcb54e6d499f648bf8a89eb" + integrity sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ== dependencies: - "@xtuc/long" "4.2.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + escape-string-regexp "^4.0.0" + execa "5.1.1" + file-loader "^6.2.0" + fs-extra "^11.1.1" + github-slugger "^1.5.0" + globby "^11.1.0" + gray-matter "^4.0.3" + jiti "^1.20.0" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + p-queue "^6.6.2" + prompts "^2.4.2" + resolve-pathname "^3.0.0" + tslib "^2.6.0" + url-loader "^4.1.1" + utility-types "^3.10.0" + webpack "^5.88.1" -"@webassemblyjs/utf8@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" - integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== - -"@webassemblyjs/wasm-edit@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" - integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/helper-wasm-section" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-opt" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - "@webassemblyjs/wast-printer" "1.11.0" - -"@webassemblyjs/wasm-gen@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" - integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wasm-opt@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" - integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - -"@webassemblyjs/wasm-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" - integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wast-printer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" - integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@xtuc/long" "4.2.2" +"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" +"@hapi/topo@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@helium/account-fetch-cache-hooks@^0.6.31", "@helium/account-fetch-cache-hooks@^0.6.42": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/account-fetch-cache-hooks/-/account-fetch-cache-hooks-0.6.42.tgz#eaeab7fcc3de947de5407467f29d152d8be0f308" + integrity sha512-S8gRN0Ia4W+1q/ZCY5BAHfE0xJ9OIeSnoo5KzAvTTOioiKkdVTEKkp7UP1UJq03/BOoybupK77pprFLjLW6oQw== + dependencies: + "@helium/account-fetch-cache" "^0.6.42" + "@solana/web3.js" "^1.78.4" + react-async-hook "^4.0.0" + +"@helium/account-fetch-cache@^0.6.31", "@helium/account-fetch-cache@^0.6.42": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/account-fetch-cache/-/account-fetch-cache-0.6.42.tgz#b6ab77450971283b9f7cbe2bf646fa7785293dc0" + integrity sha512-r8EO/tq3xNLL9MIAINaFNUuVDJuWD7a/AAKFyXj4ygy2BTvt+x/UOW9GS1JCUjEgGo/u3sOvu7TjJvmqowqTEw== + dependencies: + "@solana/web3.js" "^1.78.4" + +"@helium/address@^4.10.2", "@helium/address@^4.8.1": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@helium/address/-/address-4.12.0.tgz#14738298794fb26089dd60fafaec99fdff27efa9" + integrity sha512-gTgPHEn19vBzVwYYl6nVDjuWG9dXpgnXdEdWI65vcpseXIg1+E3iVn43FC3TK1wXzIUQkXz6RzRKASc/w85rWA== + dependencies: + bs58 "^5.0.0" + js-sha256 "^0.9.0" + multiformats "^9.6.4" + +"@helium/anchor-resolvers@^0.6.42": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/anchor-resolvers/-/anchor-resolvers-0.6.42.tgz#122b407dc5e3425a938c7bd53b0366a02d31f905" + integrity sha512-vHmDeeByNtE9WaNrpELGjTjzxzNyaHO0cj3+H/5bEE/I+v1s6fnv+Ylj7TE+0+VAWeFM8dDFct7AxFxO36MUbQ== + dependencies: + "@solana/spl-token" "^0.3.8" + "@solana/web3.js" "^1.78.4" + +"@helium/circuit-breaker-sdk@^0.6.42": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/circuit-breaker-sdk/-/circuit-breaker-sdk-0.6.42.tgz#5d5d626f52fa518b8e2ef86f4073a1a2df6e43a6" + integrity sha512-Xkn0/zpyt/5B/PgMaq1p9ArqF0S4RelEGFCnDzeHjMq1lWp2DnV0+H12oAJ26zEKHduAOk89qteqwr4el8Bu/Q== + dependencies: + "@coral-xyz/anchor" "^0.28.0" + "@helium/anchor-resolvers" "^0.6.42" + "@helium/idls" "^0.6.42" + bn.js "^5.2.0" + bs58 "^4.0.1" + +"@helium/data-credits-sdk@^0.6.31": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/data-credits-sdk/-/data-credits-sdk-0.6.42.tgz#806e2ad53811c6c4fd462af245ac1fde71aa8a80" + integrity sha512-rpW1MDpglUj1n2GLN9UewEP50RknsbpBO/Ys4v7F6ilMnKwqt8c9ceRW/CWl1QcQuq/xlRzX8c9Qd035h4ODLA== + dependencies: + "@coral-xyz/anchor" "^0.28.0" + "@helium/anchor-resolvers" "^0.6.42" + "@helium/circuit-breaker-sdk" "^0.6.42" + "@helium/helium-sub-daos-sdk" "^0.6.42" + "@helium/idls" "^0.6.42" + bn.js "^5.2.0" + bs58 "^4.0.1" + crypto-js "^4.1.1" + +"@helium/fanout-sdk@^0.6.31": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/fanout-sdk/-/fanout-sdk-0.6.42.tgz#d2b946d02fb1e1e5a0e3a5a55c757d4703089b81" + integrity sha512-bI2TJqqPtYpdZ4NhiFEtCoIdNBMcSoUqzsGBMzXuX1ap06c52NmXn98rbpR0zBZJjc/bdDTNnJnRy7v9cBWIzA== + dependencies: + "@coral-xyz/anchor" "^0.28.0" + "@helium/anchor-resolvers" "^0.6.42" + "@helium/idls" "^0.6.42" + bn.js "^5.2.0" + bs58 "^4.0.1" + +"@helium/helium-react-hooks@^0.6.31": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/helium-react-hooks/-/helium-react-hooks-0.6.42.tgz#8b8103efb968cc715347d58df73c5c6a44c4a923" + integrity sha512-2ZOuXob4FO/hfQqPG9Yvy9sAoMHSKr2OSeh+FUj1qhqk+MfkBmZvyZvpa/CUefBJLqMfKtTW8MK68c43jWP9yw== + dependencies: + "@coral-xyz/anchor" "^0.28.0" + "@helium/account-fetch-cache" "^0.6.42" + "@helium/account-fetch-cache-hooks" "^0.6.42" + "@solana/spl-token" "^0.3.8" + "@solana/web3.js" "^1.78.4" + bs58 "^4.0.1" + pako "^2.0.3" + react-async-hook "^4.0.0" + +"@helium/helium-sub-daos-sdk@^0.6.42": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/helium-sub-daos-sdk/-/helium-sub-daos-sdk-0.6.42.tgz#aaa749a80473ec5c1e081ecad6cdbc1b6f800da6" + integrity sha512-0YloDY/n8ownpSkpBA77moNBHisL9d7vfsuEG1COSiVxtQRb8f7hSS6U3u0BOyfdI7sU+t9QM+3irj57orJjYw== + dependencies: + "@coral-xyz/anchor" "^0.28.0" + "@helium/anchor-resolvers" "^0.6.42" + "@helium/circuit-breaker-sdk" "^0.6.42" + "@helium/treasury-management-sdk" "^0.6.42" + "@helium/voter-stake-registry-sdk" "^0.6.42" + bn.js "^5.2.0" + bs58 "^4.0.1" + +"@helium/idls@^0.6.31", "@helium/idls@^0.6.42": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/idls/-/idls-0.6.42.tgz#863c46c42cd45733b5ac934a39d19b4dcd0a3256" + integrity sha512-20zIkrVD9fDIF7WHAoRmSE8yINyBtO0CCb2IkM4e7oAvLshLJ671h4DQJ59e6BS0HWz+m3IfFnvqc/phd/XNZA== + dependencies: + "@coral-xyz/anchor" "^0.28.0" + "@solana/web3.js" "^1.78.4" + bn.js "^5.2.0" + borsh "^0.7.0" + bs58 "^4.0.1" + +"@helium/spl-utils@^0.6.31": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/spl-utils/-/spl-utils-0.6.42.tgz#7d1b4d6a49c6b97f042c991b44ee231469439c59" + integrity sha512-NTpkfwFqx9/f3RBAzBv82KiXWmUW1m3iuetSz7pcO1pRijOgKxkPsXK65IHMaI1OLUPceNNLQM6jHZewsMJiqg== + dependencies: + "@coral-xyz/anchor" "^0.28.0" + "@helium/account-fetch-cache" "^0.6.42" + "@helium/address" "^4.10.2" + "@helium/anchor-resolvers" "^0.6.42" + "@metaplex-foundation/mpl-token-metadata" "^2.10.0" + "@solana/spl-account-compression" "^0.1.7" + "@solana/spl-token" "^0.3.8" + "@solana/web3.js" "^1.78.4" + axios "^1.5.0" + bn.js "^5.2.0" + borsh "^0.7.0" + bs58 "^4.0.1" + +"@helium/treasury-management-sdk@^0.6.42": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/treasury-management-sdk/-/treasury-management-sdk-0.6.42.tgz#42387293d9a147a5484f34f7ee08a187e3393708" + integrity sha512-5BmjJ7KHMh3bBQr+piGQgMw3OZwlR66dSOnPbknNJ930dkOK9dKO/K1mH8FLTdVyyk6hyKv6ABaCWFX8jlHJKQ== + dependencies: + "@coral-xyz/anchor" "^0.28.0" + "@helium/anchor-resolvers" "^0.6.42" + "@helium/circuit-breaker-sdk" "^0.6.42" + "@helium/idls" "^0.6.42" + bn.js "^5.2.0" + bs58 "^4.0.1" + +"@helium/voter-stake-registry-sdk@^0.6.42": + version "0.6.42" + resolved "https://registry.yarnpkg.com/@helium/voter-stake-registry-sdk/-/voter-stake-registry-sdk-0.6.42.tgz#a0ad4e9b80bbe4805cc41acf2ba49314679e4ebd" + integrity sha512-F9a5NpA1rVzpwOcW1NJyzQduPGWqkL+qPPYDXvCndKmbTK8B3kAdUwOy2tH2PJviyyAyU9z/qZSKaN2TR5iA7g== + dependencies: + "@coral-xyz/anchor" "^0.28.0" + "@helium/anchor-resolvers" "^0.6.42" + "@helium/idls" "^0.6.42" + "@metaplex-foundation/mpl-token-metadata" "^2.10.0" + "@solana/spl-token" "^0.3.8" + bn.js "^5.2.0" + bs58 "^4.0.1" + +"@iconify/types@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57" + integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== + +"@iconify/utils@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@iconify/utils/-/utils-3.0.2.tgz#9599607f20690cd3e7a5d2d459af0eb81a89dc2b" + integrity sha512-EfJS0rLfVuRuJRn4psJHtK2A9TqVnkxPpHY6lYHiB9+8eSuudsxbwMiavocG45ujOo6FJ+CIRlRnlOGinzkaGQ== + dependencies: + "@antfu/install-pkg" "^1.1.0" + "@antfu/utils" "^9.2.0" + "@iconify/types" "^2.0.0" + debug "^4.4.1" + globals "^15.15.0" + kolorist "^1.8.0" + local-pkg "^1.1.1" + mlly "^1.7.4" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jsonjoy.com/base64@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-17.67.0.tgz#7eeda3cb41138d77a90408fd2e42b2aba10576d7" + integrity sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw== + +"@jsonjoy.com/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" + integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== + +"@jsonjoy.com/buffers@17.67.0", "@jsonjoy.com/buffers@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz#5c58dbcdeea8824ce296bd1cfce006c2eb167b3d" + integrity sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw== + +"@jsonjoy.com/buffers@^1.0.0", "@jsonjoy.com/buffers@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz#8d99c7f67eaf724d3428dfd9826c6455266a5c83" + integrity sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== + +"@jsonjoy.com/codegen@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz#3635fd8769d77e19b75dc5574bc9756019b2e591" + integrity sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q== + +"@jsonjoy.com/codegen@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207" + integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== + +"@jsonjoy.com/fs-core@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz#320728b4b7bef63abb60e7630351623899237411" + integrity sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + thingies "^2.5.0" + +"@jsonjoy.com/fs-fsa@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz#02bac88c4968ddf2effbd7452861aaed60ba3557" + integrity sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q== + dependencies: + "@jsonjoy.com/fs-core" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + thingies "^2.5.0" + +"@jsonjoy.com/fs-node-builtins@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz#a32a5bcb093f8b34a99aa8957e993a52ec316662" + integrity sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw== + +"@jsonjoy.com/fs-node-to-fsa@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz#33fc503e50d283ac5fc510e3accced7fccecf2f4" + integrity sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw== + dependencies: + "@jsonjoy.com/fs-fsa" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + +"@jsonjoy.com/fs-node-utils@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz#788e95052aa99744f6e8e55b5098afc203df2b9e" + integrity sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.56.10" + +"@jsonjoy.com/fs-node@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz#70b18bfaf14544a9820d2016e913dde12c6de991" + integrity sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q== + dependencies: + "@jsonjoy.com/fs-core" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + "@jsonjoy.com/fs-print" "4.56.10" + "@jsonjoy.com/fs-snapshot" "4.56.10" + glob-to-regex.js "^1.0.0" + thingies "^2.5.0" + +"@jsonjoy.com/fs-print@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz#7c181b9aefcc1b268be0e6233bff26310c355335" + integrity sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw== + dependencies: + "@jsonjoy.com/fs-node-utils" "4.56.10" + tree-dump "^1.1.0" + +"@jsonjoy.com/fs-snapshot@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz#05aadd2c0eaa855b13d6cb17d29b7c8cee239c8c" + integrity sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g== + dependencies: + "@jsonjoy.com/buffers" "^17.65.0" + "@jsonjoy.com/fs-node-utils" "4.56.10" + "@jsonjoy.com/json-pack" "^17.65.0" + "@jsonjoy.com/util" "^17.65.0" + +"@jsonjoy.com/json-pack@^1.11.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz#93f8dd57fe3a3a92132b33d1eb182dcd9e7629fa" + integrity sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg== + dependencies: + "@jsonjoy.com/base64" "^1.1.2" + "@jsonjoy.com/buffers" "^1.2.0" + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/json-pointer" "^1.0.2" + "@jsonjoy.com/util" "^1.9.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pack@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz#8dd8ff65dd999c5d4d26df46c63915c7bdec093a" + integrity sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w== + dependencies: + "@jsonjoy.com/base64" "17.67.0" + "@jsonjoy.com/buffers" "17.67.0" + "@jsonjoy.com/codegen" "17.67.0" + "@jsonjoy.com/json-pointer" "17.67.0" + "@jsonjoy.com/util" "17.67.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pointer@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz#74439573dc046e0c9a3a552fb94b391bc75313b8" + integrity sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA== + dependencies: + "@jsonjoy.com/util" "17.67.0" + +"@jsonjoy.com/json-pointer@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz#049cb530ac24e84cba08590c5e36b431c4843408" + integrity sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg== + dependencies: + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/util" "^1.9.0" + +"@jsonjoy.com/util@17.67.0", "@jsonjoy.com/util@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-17.67.0.tgz#7c4288fc3808233e55c7610101e7bb4590cddd3f" + integrity sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew== + dependencies: + "@jsonjoy.com/buffers" "17.67.0" + "@jsonjoy.com/codegen" "17.67.0" + +"@jsonjoy.com/util@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.9.0.tgz#7ee95586aed0a766b746cd8d8363e336c3c47c46" + integrity sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ== + dependencies: + "@jsonjoy.com/buffers" "^1.0.0" + "@jsonjoy.com/codegen" "^1.0.0" + +"@ledgerhq/devices@8.10.0", "@ledgerhq/devices@^8.4.5": + version "8.10.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-8.10.0.tgz#25200ca7931c43e32c2c4037b95f1b5569f1f6e1" + integrity sha512-ytT66KI8MizFX6dGJKthOzPDw5uNRmmg+RaMta62jbFePKYqfXtYTp6Wc0ErTXaL8nFS3IujHENwKthPmsj6jw== + dependencies: + "@ledgerhq/errors" "^6.29.0" + "@ledgerhq/logs" "^6.14.0" + rxjs "7.8.2" + semver "7.7.3" + +"@ledgerhq/errors@^6.29.0": + version "6.29.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.29.0.tgz#0b4953eea842d7d73d27fc5bde480f7ddd403b2c" + integrity sha512-mmDsGN662zd0XGKyjzSKkg+5o1/l9pvV1HkVHtbzaydvHAtRypghmVoWMY9XAQDLXiUBXGIsLal84NgmGeuKWA== + +"@ledgerhq/hw-transport-webhid@^6.30.1": + version "6.31.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.31.0.tgz#c26e35ae3a601e3768c54622e9cbea7b4dce9977" + integrity sha512-XtCFOJ1ooaqCefB6WDfV/ie+GaO/7xQgezwRpyLroMBYboSpnEd3Diu3BAoptXKTNklwZEiUVRLVXlltTBzNvw== + dependencies: + "@ledgerhq/devices" "8.10.0" + "@ledgerhq/errors" "^6.29.0" + "@ledgerhq/hw-transport" "6.32.0" + "@ledgerhq/logs" "^6.14.0" + +"@ledgerhq/hw-transport@6.32.0", "@ledgerhq/hw-transport@^6.31.5": + version "6.32.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.32.0.tgz#12c6acacc7d37460a7341b0f63ae20aedd290ba7" + integrity sha512-bf2nxzDQ21DV/bsmExfWI0tatoVeoqhu/ePWalD/nPgPnTn/ZIDq7VBU+TY5p0JZaE87NQwmRUAjm6C1Exe61A== + dependencies: + "@ledgerhq/devices" "8.10.0" + "@ledgerhq/errors" "^6.29.0" + "@ledgerhq/logs" "^6.14.0" + events "^3.3.0" + +"@ledgerhq/logs@^6.14.0": + version "6.14.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.14.0.tgz#0f9a81d8788549a8e5da6f8e5b9938012b3517fe" + integrity sha512-kJFu1+asWQmU9XlfR1RM3lYR76wuEoPyZvkI/CNjpft78BQr3+MMf3Nu77ABzcKFnhIcmAkOLlDQ6B8L6hDXHA== + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== + +"@mdx-js/mdx@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-3.1.0.tgz#10235cab8ad7d356c262e8c21c68df5850a97dc3" + integrity sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw== + dependencies: + "@types/estree" "^1.0.0" + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdx" "^2.0.0" + collapse-white-space "^2.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + estree-util-scope "^1.0.0" + estree-walker "^3.0.0" + hast-util-to-jsx-runtime "^2.0.0" + markdown-extensions "^2.0.0" + recma-build-jsx "^1.0.0" + recma-jsx "^1.0.0" + recma-stringify "^1.0.0" + rehype-recma "^1.0.0" + remark-mdx "^3.0.0" + remark-parse "^11.0.0" + remark-rehype "^11.0.0" + source-map "^0.7.0" + unified "^11.0.0" + unist-util-position-from-estree "^2.0.0" + unist-util-stringify-position "^4.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +"@mdx-js/react@^3.0.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.1.1.tgz#24bda7fffceb2fe256f954482123cda1be5f5fef" + integrity sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw== + dependencies: + "@types/mdx" "^2.0.0" + +"@mermaid-js/parser@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@mermaid-js/parser/-/parser-0.6.2.tgz#6d505a33acb52ddeb592c596b14f9d92a30396a9" + integrity sha512-+PO02uGF6L6Cs0Bw8RpGhikVvMWEysfAyl27qTlroUB8jSWr1lL0Sf6zi78ZxlSnmgSY2AMMKVgghnN9jTtwkQ== + dependencies: + langium "3.3.1" + +"@metaplex-foundation/beet-solana@^0.4.0": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz#255747aa7feee1c20202146a752c057feca1948f" + integrity sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ== + dependencies: + "@metaplex-foundation/beet" ">=0.1.0" + "@solana/web3.js" "^1.56.2" + bs58 "^5.0.0" + debug "^4.3.4" + +"@metaplex-foundation/beet@>=0.1.0", "@metaplex-foundation/beet@^0.7.1": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet/-/beet-0.7.2.tgz#fa4726e4cfd4fb6fed6cddc9b5213c1c2a2d0b77" + integrity sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg== + dependencies: + ansicolors "^0.3.2" + assert "^2.1.0" + bn.js "^5.2.0" + debug "^4.3.3" + +"@metaplex-foundation/cusper@^0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/cusper/-/cusper-0.0.2.tgz#dc2032a452d6c269e25f016aa4dd63600e2af975" + integrity sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA== + +"@metaplex-foundation/mpl-token-metadata@^2.10.0", "@metaplex-foundation/mpl-token-metadata@^2.8.4": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz#ea498190ad4ed1d4c0b8218a72d03bd17a883d11" + integrity sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw== + dependencies: + "@metaplex-foundation/beet" "^0.7.1" + "@metaplex-foundation/beet-solana" "^0.4.0" + "@metaplex-foundation/cusper" "^0.0.2" + "@solana/spl-token" "^0.3.6" + "@solana/web3.js" "^1.66.2" + bn.js "^5.2.0" + debug "^4.3.4" + +"@noble/curves@^1.4.2", "@noble/curves@^1.8.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" + integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== + dependencies: + "@noble/hashes" "1.7.1" + +"@noble/hashes@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@noble/hashes@1.7.1", "@noble/hashes@^1.4.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" + integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@peculiar/asn1-cms@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz#88267055c460ca806651f916315a934c1b1ac994" + integrity sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + "@peculiar/asn1-x509-attr" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-csr@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz#a7eff845b0020720070a12f38f26effb9fdab158" + integrity sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-ecc@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz#4846d39712a1a2b4786c2d6ea27b19a6dcc05ef5" + integrity sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pfx@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pfx/-/asn1-pfx-2.6.0.tgz#4c8ed3050cdd5b3e63ec4192bf8f646d9e06e3f5" + integrity sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ== + dependencies: + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-pkcs8" "^2.6.0" + "@peculiar/asn1-rsa" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pkcs8@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz#c426caf81cb49935c553b591e0273b4b44d1696f" + integrity sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pkcs9@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz#96b57122228a0e2e30e81118cd3baa570c13a51d" + integrity sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw== + dependencies: + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-pfx" "^2.6.0" + "@peculiar/asn1-pkcs8" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + "@peculiar/asn1-x509-attr" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-rsa@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz#49d905ab67ae8aa54e996734f37a391bb7958747" + integrity sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-schema@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz#0dca1601d5b0fed2a72fed7a5f1d0d7dbe3a6f82" + integrity sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg== + dependencies: + asn1js "^3.0.6" + pvtsutils "^1.3.6" + tslib "^2.8.1" + +"@peculiar/asn1-x509-attr@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz#057cb0c3c600a259c9f40582ee5fd7f0114c5be6" + integrity sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-x509@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz#9aa0784b455ca34095fdc91a5cc52869e21528dd" + integrity sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + asn1js "^3.0.6" + pvtsutils "^1.3.6" + tslib "^2.8.1" + +"@peculiar/x509@^1.14.2": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@peculiar/x509/-/x509-1.14.3.tgz#2c44c2b89474346afec38a0c2803ec4fb8ce959e" + integrity sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA== + dependencies: + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-csr" "^2.6.0" + "@peculiar/asn1-ecc" "^2.6.0" + "@peculiar/asn1-pkcs9" "^2.6.0" + "@peculiar/asn1-rsa" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + pvtsutils "^1.3.6" + reflect-metadata "^0.2.2" + tslib "^2.8.1" + tsyringe "^4.10.0" + +"@pnpm/config.env-replace@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== + +"@pnpm/network.ca-file@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^2.1.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" + integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== + dependencies: + "@pnpm/config.env-replace" "^1.1.0" + "@pnpm/network.ca-file" "^1.0.1" + config-chain "^1.1.11" + +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.28" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.28.tgz#d45e01c4a56f143ee69c54dd6b12eade9e270a73" + integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== + +"@pythnetwork/price-service-client@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@pythnetwork/price-service-client/-/price-service-client-1.9.0.tgz#1503d67b1a7c14386d30bb420502df4857027e76" + integrity sha512-SLm3IFcfmy9iMqHeT4Ih6qMNZhJEefY14T9yTlpsH2D/FE5+BaGGnfcexUifVlfH6M7mwRC4hEFdNvZ6ebZjJg== + dependencies: + "@pythnetwork/price-service-sdk" "*" + "@types/ws" "^8.5.3" + axios "^1.5.1" + axios-retry "^3.8.0" + isomorphic-ws "^4.0.1" + ts-log "^2.2.4" + ws "^8.6.0" + +"@pythnetwork/price-service-sdk@*": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@pythnetwork/price-service-sdk/-/price-service-sdk-1.8.0.tgz#f5f01f654963eb9a0cf12127b4f1a89b60ef008a" + integrity sha512-tFZ1thj3Zja06DzPIX2dEWSi7kIfIyqreoywvw5NQ3Z1pl5OJHQGMEhxt6Li3UCGSp2ooYZS9wl8/8XfrfrNSA== + dependencies: + bn.js "^5.2.1" + +"@react-native-async-storage/async-storage@^1.17.7": + version "1.24.0" + resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.24.0.tgz#888efbc62a26f7d9464b32f4d3027b7f2771999b" + integrity sha512-W4/vbwUOYOjco0x3toB8QCr7EjIP6nE9G7o8PMguvvjYT5Awg09lyV4enACRx4s++PPulBiBSjL0KTFx2u0Z/g== + dependencies: + merge-options "^3.0.4" + +"@sideway/address@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" + integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sindresorhus/is@^4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sindresorhus/is@^5.2.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" + integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== + +"@slorber/remark-comment@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@slorber/remark-comment/-/remark-comment-1.0.0.tgz#2a020b3f4579c89dec0361673206c28d67e08f5a" + integrity sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.1.0" + micromark-util-symbol "^1.0.1" + +"@solana-mobile/mobile-wallet-adapter-protocol-web3js@^2.2.5": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@solana-mobile/mobile-wallet-adapter-protocol-web3js/-/mobile-wallet-adapter-protocol-web3js-2.2.5.tgz#fd859bb3de0b5c7946e42295846e0e31337f5274" + integrity sha512-xfQl6Kee0ZXagUG5mpy+bMhQTNf2LAzF65m5SSgNJp47y/nP9GdXWi9blVH8IPP+QjF/+DnCtURaXS14bk3WJw== + dependencies: + "@solana-mobile/mobile-wallet-adapter-protocol" "^2.2.5" + bs58 "^5.0.0" + js-base64 "^3.7.5" + +"@solana-mobile/mobile-wallet-adapter-protocol@^2.2.5": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@solana-mobile/mobile-wallet-adapter-protocol/-/mobile-wallet-adapter-protocol-2.2.5.tgz#93ce6a0a0f99b7dd9a18eda28664a3d1336798b5" + integrity sha512-kCI+0/umWm98M9g12ndpS56U6wBzq4XdhobCkDPF8qRDYX/iTU8CD+QMcalh7VgRT7GWEmySQvQdaugM0Chf0g== + dependencies: + "@solana/codecs-strings" "^4.0.0" + "@solana/wallet-standard" "^1.1.2" + "@solana/wallet-standard-util" "^1.1.1" + "@wallet-standard/core" "^1.0.3" + js-base64 "^3.7.5" + +"@solana-mobile/wallet-adapter-mobile@^2.2.0": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@solana-mobile/wallet-adapter-mobile/-/wallet-adapter-mobile-2.2.5.tgz#eea82102a891bf05710c49f79fd2784f49be5c88" + integrity sha512-Zpzfwm3N4FfI63ZMs2qZChQ1j0z+p2prkZbSU51NyTnE+K9l9sDAl8RmRCOWnE29y+/AN10WuQZQoIAccHVOFg== + dependencies: + "@solana-mobile/mobile-wallet-adapter-protocol-web3js" "^2.2.5" + "@solana-mobile/wallet-standard-mobile" "^0.4.3" + "@solana/wallet-adapter-base" "^0.9.23" + "@solana/wallet-standard-features" "^1.2.0" + js-base64 "^3.7.5" + optionalDependencies: + "@react-native-async-storage/async-storage" "^1.17.7" + +"@solana-mobile/wallet-standard-mobile@^0.4.3": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@solana-mobile/wallet-standard-mobile/-/wallet-standard-mobile-0.4.4.tgz#64b828b4d772c35da99daef5fbc9926b06d547e9" + integrity sha512-LMvqkS5/aEH+EiDje9Dk351go6wO3POysgmobM4qm8RsG5s6rDAW3U0zA+5f2coGCTyRx8BKE1I/9nHlwtBuow== + dependencies: + "@solana-mobile/mobile-wallet-adapter-protocol" "^2.2.5" + "@solana/wallet-standard-chains" "^1.1.0" + "@solana/wallet-standard-features" "^1.2.0" + "@wallet-standard/base" "^1.0.1" + "@wallet-standard/features" "^1.0.3" + bs58 "^5.0.0" + js-base64 "^3.7.5" + qrcode "^1.5.4" + +"@solana/buffer-layout-utils@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz#b45a6cab3293a2eb7597cceb474f229889d875ca" + integrity sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/web3.js" "^1.32.0" + bigint-buffer "^1.1.5" + bignumber.js "^9.0.1" + +"@solana/buffer-layout@^4.0.0", "@solana/buffer-layout@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" + integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== + dependencies: + buffer "~6.0.3" + +"@solana/codecs-core@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.0.0-rc.1.tgz#1a2d76b9c7b9e7b7aeb3bd78be81c2ba21e3ce22" + integrity sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ== + dependencies: + "@solana/errors" "2.0.0-rc.1" + +"@solana/codecs-core@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.3.0.tgz#6bf2bb565cb1ae880f8018635c92f751465d8695" + integrity sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw== + dependencies: + "@solana/errors" "2.3.0" + +"@solana/codecs-core@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-4.0.0.tgz#0668b964df5a3e278ff276b5aa812bd739e29510" + integrity sha512-28kNUsyIlhU3MO3/7ZLDqeJf2YAm32B4tnTjl5A9HrbBqsTZ+upT/RzxZGP1MMm7jnPuIKCMwmTpsyqyR6IUpw== + dependencies: + "@solana/errors" "4.0.0" + +"@solana/codecs-data-structures@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-rc.1.tgz#d47b2363d99fb3d643f5677c97d64a812982b888" + integrity sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + +"@solana/codecs-numbers@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.0.0-rc.1.tgz#f34978ddf7ea4016af3aaed5f7577c1d9869a614" + integrity sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + +"@solana/codecs-numbers@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-4.0.0.tgz#fc5c451ff2f1ca1e3a13cf85230e768a47b9a788" + integrity sha512-z9zpjtcwzqT9rbkKVZpkWB5/0V7+6YRKs6BccHkGJlaDx8Pe/+XOvPi2rEdXPqrPd9QWb5Xp1iBfcgaDMyiOiA== + dependencies: + "@solana/codecs-core" "4.0.0" + "@solana/errors" "4.0.0" + +"@solana/codecs-numbers@^2.1.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.3.0.tgz#ac7e7f38aaf7fcd22ce2061fbdcd625e73828dc6" + integrity sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg== + dependencies: + "@solana/codecs-core" "2.3.0" + "@solana/errors" "2.3.0" + +"@solana/codecs-strings@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-strings/-/codecs-strings-2.0.0-rc.1.tgz#e1d9167075b8c5b0b60849f8add69c0f24307018" + integrity sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + +"@solana/codecs-strings@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-strings/-/codecs-strings-4.0.0.tgz#b4c77d6ff6eeec868a71e5b0cb42bdb9f0c6b500" + integrity sha512-XvyD+sQ1zyA0amfxbpoFZsucLoe+yASQtDiLUGMDg5TZ82IHE3B7n82jE8d8cTAqi0HgqQiwU13snPhvg1O0Ow== + dependencies: + "@solana/codecs-core" "4.0.0" + "@solana/codecs-numbers" "4.0.0" + "@solana/errors" "4.0.0" + +"@solana/codecs@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs/-/codecs-2.0.0-rc.1.tgz#146dc5db58bd3c28e04b4c805e6096c2d2a0a875" + integrity sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-data-structures" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/codecs-strings" "2.0.0-rc.1" + "@solana/options" "2.0.0-rc.1" + +"@solana/errors@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.0.0-rc.1.tgz#3882120886eab98a37a595b85f81558861b29d62" + integrity sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ== + dependencies: + chalk "^5.3.0" + commander "^12.1.0" + +"@solana/errors@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.3.0.tgz#4ac9380343dbeffb9dffbcb77c28d0e457c5fa31" + integrity sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ== + dependencies: + chalk "^5.4.1" + commander "^14.0.0" + +"@solana/errors@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-4.0.0.tgz#7fa9e8b69c4a199acab1b863b234be69772b1914" + integrity sha512-3YEtvcMvtcnTl4HahqLt0VnaGVf7vVWOnt6/uPky5e0qV6BlxDSbGkbBzttNjxLXHognV0AQi3pjvrtfUnZmbg== + dependencies: + chalk "5.6.2" + commander "14.0.1" + +"@solana/options@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/options/-/options-2.0.0-rc.1.tgz#06924ba316dc85791fc46726a51403144a85fc4d" + integrity sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-data-structures" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/codecs-strings" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + +"@solana/spl-account-compression@^0.1.7": + version "0.1.10" + resolved "https://registry.yarnpkg.com/@solana/spl-account-compression/-/spl-account-compression-0.1.10.tgz#b3135ce89349d6090832b3b1d89095badd57e969" + integrity sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw== + dependencies: + "@metaplex-foundation/beet" "^0.7.1" + "@metaplex-foundation/beet-solana" "^0.4.0" + bn.js "^5.2.1" + borsh "^0.7.0" + js-sha3 "^0.8.0" + typescript-collections "^1.3.3" + +"@solana/spl-token-metadata@^0.1.2": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@solana/spl-token-metadata/-/spl-token-metadata-0.1.6.tgz#d240947aed6e7318d637238022a7b0981b32ae80" + integrity sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA== + dependencies: + "@solana/codecs" "2.0.0-rc.1" + +"@solana/spl-token@^0.3.6", "@solana/spl-token@^0.3.7", "@solana/spl-token@^0.3.8": + version "0.3.11" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.11.tgz#cdc10f9472b29b39c8983c92592cadd06627fb9a" + integrity sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/buffer-layout-utils" "^0.2.0" + "@solana/spl-token-metadata" "^0.1.2" + buffer "^6.0.3" + +"@solana/wallet-adapter-base-ui@^0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base-ui/-/wallet-adapter-base-ui-0.1.6.tgz#29036bede9e993a921727279b9262057e640fbbe" + integrity sha512-OuxLBOXA2z3dnmuGP0agEb7xhsT3+Nttd+gAkSLgJRX2vgNEAy3Fvw8IKPXv1EE2vRdw/U6Rq0Yjpp3McqVZhw== + dependencies: + "@solana/wallet-adapter-react" "^0.15.39" + +"@solana/wallet-adapter-base@^0.9.23": + version "0.9.23" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.23.tgz#3b17c28afd44e173f44f658bf9700fd637e12a11" + integrity sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw== + dependencies: + "@solana/wallet-standard-features" "^1.1.0" + "@wallet-standard/base" "^1.0.1" + "@wallet-standard/features" "^1.0.3" + eventemitter3 "^4.0.7" + +"@solana/wallet-adapter-base@^0.9.27": + version "0.9.27" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.27.tgz#f76463db172ac1d7d1f5aa064800363777731dfd" + integrity sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg== + dependencies: + "@solana/wallet-standard-features" "^1.3.0" + "@wallet-standard/base" "^1.1.0" + "@wallet-standard/features" "^1.1.0" + eventemitter3 "^5.0.1" + +"@solana/wallet-adapter-ledger@^0.9.29": + version "0.9.29" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-ledger/-/wallet-adapter-ledger-0.9.29.tgz#4b7a8ea14562ac87961cc4efce6f8449640449b6" + integrity sha512-1feOHQGdMOPtXtXBCuUuHlsoco2iqDNcUTbHW+Bj+3ItXGJctwMicSSWgfATEAFNUanvOB+kKZ4N3B1MQrP/9w== + dependencies: + "@ledgerhq/devices" "^8.4.5" + "@ledgerhq/hw-transport" "^6.31.5" + "@ledgerhq/hw-transport-webhid" "^6.30.1" + "@solana/wallet-adapter-base" "^0.9.27" + buffer "^6.0.3" + +"@solana/wallet-adapter-phantom@^0.9.28": + version "0.9.28" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-phantom/-/wallet-adapter-phantom-0.9.28.tgz#306252eaafbfc6a1e9efe976e43f933eb87c8b80" + integrity sha512-g/hcuWwWjzo5l8I4vor9htniVhLxd/GhoVK52WSd0hy8IZ8/FBnV3u8ABVTheLqO13d0IVy+xTxoVBbDaMjLog== + dependencies: + "@solana/wallet-adapter-base" "^0.9.27" + +"@solana/wallet-adapter-react-ui@^0.9.39": + version "0.9.39" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-react-ui/-/wallet-adapter-react-ui-0.9.39.tgz#36e2afb265a6dd73b6bbc5fc77c15c9558e808cf" + integrity sha512-B6GdOobwVuIgEX1qjcbTQEeo+0UGs3WPuBeUlR0dDCzQh9J3IAWRRyL/47FYSHYRp26LAu4ImWy4+M2TFD5OJg== + dependencies: + "@solana/wallet-adapter-base" "^0.9.27" + "@solana/wallet-adapter-base-ui" "^0.1.6" + "@solana/wallet-adapter-react" "^0.15.39" + +"@solana/wallet-adapter-react@^0.15.39": + version "0.15.39" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-react/-/wallet-adapter-react-0.15.39.tgz#6e7a3df7b09afa4beea6b12384451cfb2aeb5976" + integrity sha512-WXtlo88ith5m22qB+qiGw301/Zb9r5pYr4QdXWmlXnRNqwST5MGmJWhG+/RVrzc+OG7kSb3z1gkVNv+2X/Y0Gg== + dependencies: + "@solana-mobile/wallet-adapter-mobile" "^2.2.0" + "@solana/wallet-adapter-base" "^0.9.27" + "@solana/wallet-standard-wallet-adapter-react" "^1.1.4" + +"@solana/wallet-adapter-solflare@^0.6.32": + version "0.6.32" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-solflare/-/wallet-adapter-solflare-0.6.32.tgz#6fd92deddb85c21a2be3bafca69f94d2c6becbe1" + integrity sha512-FIqNyooif3yjPnw2gPNBZnsG6X9JYSrwCf1Oa0NN4/VxQcPjzGqvc+Tq1+js/nBOHju5roToeMFTbwNTdEOuZw== + dependencies: + "@solana/wallet-adapter-base" "^0.9.27" + "@solana/wallet-standard-chains" "^1.1.1" + "@solflare-wallet/metamask-sdk" "^1.0.3" + "@solflare-wallet/sdk" "^1.4.2" + "@wallet-standard/wallet" "^1.1.0" + +"@solana/wallet-standard-chains@^1.1.0", "@solana/wallet-standard-chains@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-chains/-/wallet-standard-chains-1.1.1.tgz#bbab9f3836006e9e4722afc408ca323df9623657" + integrity sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw== + dependencies: + "@wallet-standard/base" "^1.1.0" + +"@solana/wallet-standard-core@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-core/-/wallet-standard-core-1.1.2.tgz#86512ae188450d70ff5d1ee0f58b5c29b83226c6" + integrity sha512-FaSmnVsIHkHhYlH8XX0Y4TYS+ebM+scW7ZeDkdXo3GiKge61Z34MfBPinZSUMV08hCtzxxqH2ydeU9+q/KDrLA== + dependencies: + "@solana/wallet-standard-chains" "^1.1.1" + "@solana/wallet-standard-features" "^1.3.0" + "@solana/wallet-standard-util" "^1.1.2" + +"@solana/wallet-standard-features@^1.1.0", "@solana/wallet-standard-features@^1.2.0", "@solana/wallet-standard-features@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-features/-/wallet-standard-features-1.3.0.tgz#c489eca9d0c78f97084b4af6ca8ad8c1ca197de5" + integrity sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg== + dependencies: + "@wallet-standard/base" "^1.1.0" + "@wallet-standard/features" "^1.1.0" + +"@solana/wallet-standard-util@^1.1.1", "@solana/wallet-standard-util@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-util/-/wallet-standard-util-1.1.2.tgz#1e281178c04b52923ea530799c589ed64e5526bc" + integrity sha512-rUXFNP4OY81Ddq7qOjQV4Kmkozx4wjYAxljvyrqPx8Ycz0FYChG/hQVWqvgpK3sPsEaO/7ABG1NOACsyAKWNOA== + dependencies: + "@noble/curves" "^1.8.0" + "@solana/wallet-standard-chains" "^1.1.1" + "@solana/wallet-standard-features" "^1.3.0" + +"@solana/wallet-standard-wallet-adapter-base@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-wallet-adapter-base/-/wallet-standard-wallet-adapter-base-1.1.4.tgz#fc05b153674e29839eee49b30d05106bd42dd789" + integrity sha512-Q2Rie9YaidyFA4UxcUIxUsvynW+/gE2noj/Wmk+IOwDwlVrJUAXCvFaCNsPDSyKoiYEKxkSnlG13OA1v08G4iw== + dependencies: + "@solana/wallet-adapter-base" "^0.9.23" + "@solana/wallet-standard-chains" "^1.1.1" + "@solana/wallet-standard-features" "^1.3.0" + "@solana/wallet-standard-util" "^1.1.2" + "@wallet-standard/app" "^1.1.0" + "@wallet-standard/base" "^1.1.0" + "@wallet-standard/features" "^1.1.0" + "@wallet-standard/wallet" "^1.1.0" + +"@solana/wallet-standard-wallet-adapter-react@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-wallet-adapter-react/-/wallet-standard-wallet-adapter-react-1.1.4.tgz#5f48a68bea19fe570e1741d0e26f98c6d8ad0628" + integrity sha512-xa4KVmPgB7bTiWo4U7lg0N6dVUtt2I2WhEnKlIv0jdihNvtyhOjCKMjucWet6KAVhir6I/mSWrJk1U9SvVvhCg== + dependencies: + "@solana/wallet-standard-wallet-adapter-base" "^1.1.4" + "@wallet-standard/app" "^1.1.0" + "@wallet-standard/base" "^1.1.0" + +"@solana/wallet-standard-wallet-adapter@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-wallet-adapter/-/wallet-standard-wallet-adapter-1.1.4.tgz#fd4f9d1b61e85daa6d940618854528945cacdfa7" + integrity sha512-YSBrxwov4irg2hx9gcmM4VTew3ofNnkqsXQ42JwcS6ykF1P1ecVY8JCbrv75Nwe6UodnqeoZRbN7n/p3awtjNQ== + dependencies: + "@solana/wallet-standard-wallet-adapter-base" "^1.1.4" + "@solana/wallet-standard-wallet-adapter-react" "^1.1.4" + +"@solana/wallet-standard@^1.1.2": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard/-/wallet-standard-1.1.4.tgz#afe6d8a6d6ea04acd9bb4a92bef6bb93e08c81f3" + integrity sha512-NF+MI5tOxyvfTU4A+O5idh/gJFmjm52bMwsPpFGRSL79GECSN0XLmpVOO/jqTKJgac2uIeYDpQw/eMaQuWuUXw== + dependencies: + "@solana/wallet-standard-core" "^1.1.2" + "@solana/wallet-standard-wallet-adapter" "^1.1.4" + +"@solana/web3.js@^1.32.0", "@solana/web3.js@^1.56.2", "@solana/web3.js@^1.66.2", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.73.2", "@solana/web3.js@^1.78.4": + version "1.98.0" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.98.0.tgz#21ecfe8198c10831df6f0cfde7f68370d0405917" + integrity sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA== + dependencies: + "@babel/runtime" "^7.25.0" + "@noble/curves" "^1.4.2" + "@noble/hashes" "^1.4.0" + "@solana/buffer-layout" "^4.0.1" + agentkeepalive "^4.5.0" + bigint-buffer "^1.1.5" + bn.js "^5.2.1" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.1" + node-fetch "^2.7.0" + rpc-websockets "^9.0.2" + superstruct "^2.0.2" + +"@solana/web3.js@^1.98.4": + version "1.98.4" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.98.4.tgz#df51d78be9d865181ec5138b4e699d48e6895bbe" + integrity sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw== + dependencies: + "@babel/runtime" "^7.25.0" + "@noble/curves" "^1.4.2" + "@noble/hashes" "^1.4.0" + "@solana/buffer-layout" "^4.0.1" + "@solana/codecs-numbers" "^2.1.0" + agentkeepalive "^4.5.0" + bn.js "^5.2.1" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.1" + node-fetch "^2.7.0" + rpc-websockets "^9.0.2" + superstruct "^2.0.2" + +"@solflare-wallet/metamask-sdk@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@solflare-wallet/metamask-sdk/-/metamask-sdk-1.0.3.tgz#3baaa22de2c86515e6ba6025285cd1f5d74b04e5" + integrity sha512-os5Px5PTMYKGS5tzOoyjDxtOtj0jZKnbI1Uwt8+Jsw1HHIA+Ib2UACCGNhQ/un2f8sIbTfLD1WuucNMOy8KZpQ== + dependencies: + "@solana/wallet-standard-features" "^1.1.0" + "@wallet-standard/base" "^1.0.1" + bs58 "^5.0.0" + eventemitter3 "^5.0.1" + uuid "^9.0.0" + +"@solflare-wallet/sdk@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@solflare-wallet/sdk/-/sdk-1.4.2.tgz#630b9a26f7bca255ee4a7088f287ae8c8335e345" + integrity sha512-jrseNWipwl9xXZgrzwZF3hhL0eIVxuEtoZOSLmuPuef7FgHjstuTtNJAeT4icA7pzdDV4hZvu54pI2r2f7SmrQ== + dependencies: + bs58 "^5.0.0" + eventemitter3 "^5.0.1" + uuid "^9.0.0" + +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== + +"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== + +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== + +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== + +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== + +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== + +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + +"@svgr/core@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + camelcase "^6.2.0" + cosmiconfig "^8.1.3" + snake-case "^3.0.4" + +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== + dependencies: + "@babel/types" "^7.21.3" + entities "^4.4.0" + +"@svgr/plugin-jsx@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" + svg-parser "^2.0.4" + +"@svgr/plugin-svgo@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00" + integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== + dependencies: + cosmiconfig "^8.1.3" + deepmerge "^4.3.1" + svgo "^3.0.2" + +"@svgr/webpack@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-8.1.0.tgz#16f1b5346f102f89fda6ec7338b96a701d8be0c2" + integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA== + dependencies: + "@babel/core" "^7.21.3" + "@babel/plugin-transform-react-constant-elements" "^7.21.3" + "@babel/preset-env" "^7.20.2" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.21.0" + "@svgr/core" "8.1.0" + "@svgr/plugin-jsx" "8.1.0" + "@svgr/plugin-svgo" "8.1.0" + +"@swc/helpers@^0.5.11": + version "0.5.15" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== + dependencies: + tslib "^2.8.0" + +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + dependencies: + defer-to-connect "^2.0.1" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/acorn@^4.0.0": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" + integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== + dependencies: + "@types/estree" "*" + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*", "@types/connect@^3.4.33": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/d3-array@*": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.2.1.tgz#1f6658e3d2006c4fceac53fde464166859f8b8c5" + integrity sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg== + +"@types/d3-axis@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-3.0.6.tgz#e760e5765b8188b1defa32bc8bb6062f81e4c795" + integrity sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-brush@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-3.0.6.tgz#c2f4362b045d472e1b186cdbec329ba52bdaee6c" + integrity sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-chord@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-3.0.6.tgz#1706ca40cf7ea59a0add8f4456efff8f8775793d" + integrity sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg== + +"@types/d3-color@*": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.1.3.tgz#368c961a18de721da8200e80bf3943fb53136af2" + integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A== + +"@types/d3-contour@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-contour/-/d3-contour-3.0.6.tgz#9ada3fa9c4d00e3a5093fed0356c7ab929604231" + integrity sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg== + dependencies: + "@types/d3-array" "*" + "@types/geojson" "*" + +"@types/d3-delaunay@*": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz#185c1a80cc807fdda2a3fe960f7c11c4a27952e1" + integrity sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw== + +"@types/d3-dispatch@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz#096efdf55eb97480e3f5621ff9a8da552f0961e7" + integrity sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ== + +"@types/d3-drag@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-3.0.7.tgz#b13aba8b2442b4068c9a9e6d1d82f8bcea77fc02" + integrity sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-dsv@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-3.0.7.tgz#0a351f996dc99b37f4fa58b492c2d1c04e3dac17" + integrity sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g== + +"@types/d3-ease@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-3.0.2.tgz#e28db1bfbfa617076f7770dd1d9a48eaa3b6c51b" + integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA== + +"@types/d3-fetch@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-fetch/-/d3-fetch-3.0.7.tgz#c04a2b4f23181aa376f30af0283dbc7b3b569980" + integrity sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA== + dependencies: + "@types/d3-dsv" "*" + +"@types/d3-force@*": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-3.0.10.tgz#6dc8fc6e1f35704f3b057090beeeb7ac674bff1a" + integrity sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw== + +"@types/d3-format@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-3.0.4.tgz#b1e4465644ddb3fdf3a263febb240a6cd616de90" + integrity sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g== + +"@types/d3-geo@*": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-3.1.0.tgz#b9e56a079449174f0a2c8684a9a4df3f60522440" + integrity sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ== + dependencies: + "@types/geojson" "*" + +"@types/d3-hierarchy@*": + version "3.1.7" + resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz#6023fb3b2d463229f2d680f9ac4b47466f71f17b" + integrity sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg== + +"@types/d3-interpolate@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz#412b90e84870285f2ff8a846c6eb60344f12a41c" + integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA== + dependencies: + "@types/d3-color" "*" + +"@types/d3-path@*": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.1.tgz#f632b380c3aca1dba8e34aa049bcd6a4af23df8a" + integrity sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg== + +"@types/d3-polygon@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-3.0.2.tgz#dfae54a6d35d19e76ac9565bcb32a8e54693189c" + integrity sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA== + +"@types/d3-quadtree@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz#d4740b0fe35b1c58b66e1488f4e7ed02952f570f" + integrity sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg== + +"@types/d3-random@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-3.0.3.tgz#ed995c71ecb15e0cd31e22d9d5d23942e3300cfb" + integrity sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ== + +"@types/d3-scale-chromatic@*": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz#dc6d4f9a98376f18ea50bad6c39537f1b5463c39" + integrity sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ== + +"@types/d3-scale@*": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.9.tgz#57a2f707242e6fe1de81ad7bfcccaaf606179afb" + integrity sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw== + dependencies: + "@types/d3-time" "*" + +"@types/d3-selection@*": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-3.0.11.tgz#bd7a45fc0a8c3167a631675e61bc2ca2b058d4a3" + integrity sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w== + +"@types/d3-shape@*": + version "3.1.7" + resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-3.1.7.tgz#2b7b423dc2dfe69c8c93596e673e37443348c555" + integrity sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg== + dependencies: + "@types/d3-path" "*" + +"@types/d3-time-format@*": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-4.0.3.tgz#d6bc1e6b6a7db69cccfbbdd4c34b70632d9e9db2" + integrity sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg== + +"@types/d3-time@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.4.tgz#8472feecd639691450dd8000eb33edd444e1323f" + integrity sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g== + +"@types/d3-timer@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70" + integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== + +"@types/d3-transition@*": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-3.0.9.tgz#1136bc57e9ddb3c390dccc9b5ff3b7d2b8d94706" + integrity sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-zoom@*": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-3.0.8.tgz#dccb32d1c56b1e1c6e0f1180d994896f038bc40b" + integrity sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw== + dependencies: + "@types/d3-interpolate" "*" + "@types/d3-selection" "*" + +"@types/d3@^7.4.3": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@types/d3/-/d3-7.4.3.tgz#d4550a85d08f4978faf0a4c36b848c61eaac07e2" + integrity sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww== + dependencies: + "@types/d3-array" "*" + "@types/d3-axis" "*" + "@types/d3-brush" "*" + "@types/d3-chord" "*" + "@types/d3-color" "*" + "@types/d3-contour" "*" + "@types/d3-delaunay" "*" + "@types/d3-dispatch" "*" + "@types/d3-drag" "*" + "@types/d3-dsv" "*" + "@types/d3-ease" "*" + "@types/d3-fetch" "*" + "@types/d3-force" "*" + "@types/d3-format" "*" + "@types/d3-geo" "*" + "@types/d3-hierarchy" "*" + "@types/d3-interpolate" "*" + "@types/d3-path" "*" + "@types/d3-polygon" "*" + "@types/d3-quadtree" "*" + "@types/d3-random" "*" + "@types/d3-scale" "*" + "@types/d3-scale-chromatic" "*" + "@types/d3-selection" "*" + "@types/d3-shape" "*" + "@types/d3-time" "*" + "@types/d3-time-format" "*" + "@types/d3-timer" "*" + "@types/d3-transition" "*" + "@types/d3-zoom" "*" + +"@types/debug@^4.0.0": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/eslint-scope@^3.7.7": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree-jsx@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== + dependencies: + "@types/estree" "*" + +"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz#41fec4ea20e9c7b22f024ab88a95c6bb288f51b8" + integrity sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express-serve-static-core@^4.17.21": + version "4.19.8" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz#99b960322a4d576b239a640ab52ef191989b036f" + integrity sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.19.6" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" + integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.0.tgz#13a7d1f75295e90d19ed6e74cab3678488eaa96c" + integrity sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^5.0.0" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/express@^4.17.25": + version "4.17.25" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.25.tgz#070c8c73a6fee6936d65c195dbbfb7da5026649b" + integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "^1" + +"@types/geojson@*": + version "7946.0.16" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.16.tgz#8ebe53d69efada7044454e3305c19017d97ced2a" + integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg== + +"@types/google-protobuf@^3.15.12": + version "3.15.12" + resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.15.12.tgz#eb2ba0eddd65712211a2b455dc6071d665ccf49b" + integrity sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ== + +"@types/gtag.js@^0.0.12": + version "0.0.12" + resolved "https://registry.yarnpkg.com/@types/gtag.js/-/gtag.js-0.0.12.tgz#095122edca896689bdfcdd73b057e23064d23572" + integrity sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg== + +"@types/hast@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-cache-semantics@^4.0.2": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/http-proxy@^1.17.8": + version "1.17.16" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.16.tgz#dee360707b35b3cc85afcde89ffeebff7d7f9240" + integrity sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/katex@^0.16.0": + version "0.16.7" + resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.16.7.tgz#03ab680ab4fa4fbc6cb46ecf987ecad5d8019868" + integrity sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ== + +"@types/mdast@^4.0.0", "@types/mdast@^4.0.2": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + +"@types/mdx@^2.0.0": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd" + integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/ms@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== + +"@types/node@*": + version "22.13.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.4.tgz#3fe454d77cd4a2d73c214008b3e331bfaaf5038a" + integrity sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg== + dependencies: + undici-types "~6.20.0" + +"@types/node@^12.12.54": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/node@^17.0.5": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/prismjs@^1.26.0": + version "1.26.5" + resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.5.tgz#72499abbb4c4ec9982446509d2f14fb8483869d6" + integrity sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ== + +"@types/qs@*": + version "6.9.18" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" + integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/react-router-config@*", "@types/react-router-config@^5.0.7": + version "5.0.11" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.11.tgz#2761a23acc7905a66a94419ee40294a65aaa483a" + integrity sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "^5.1.0" + +"@types/react-router-dom@*": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*", "@types/react-router@^5.1.0": + version "5.1.20" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react@*": + version "19.0.10" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.10.tgz#d0c66dafd862474190fe95ce11a68de69ed2b0eb" + integrity sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g== + dependencies: + csstype "^3.0.2" + +"@types/retry@0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" + integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== + +"@types/sax@^1.2.1": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.7.tgz#ba5fe7df9aa9c89b6dff7688a19023dd2963091d" + integrity sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A== + dependencies: + "@types/node" "*" + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/send@<1": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" + integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== + dependencies: + "@types/express" "*" + +"@types/serve-static@*": + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + +"@types/serve-static@^1", "@types/serve-static@^1.15.5": + version "1.15.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" + integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "<1" + +"@types/sockjs@^0.3.36": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== + dependencies: + "@types/node" "*" + +"@types/trusted-types@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + +"@types/unist@^2.0.0": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" + integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== + +"@types/uuid@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + +"@types/ws@^7.4.4": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +"@types/ws@^8.2.2", "@types/ws@^8.5.3": + version "8.5.14" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.14.tgz#93d44b268c9127d96026cf44353725dd9b6c3c21" + integrity sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw== + dependencies: + "@types/node" "*" + +"@types/ws@^8.5.10": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + dependencies: + "@types/yargs-parser" "*" + +"@ungap/structured-clone@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@wallet-standard/app@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/app/-/app-1.1.0.tgz#2ca32e4675536224ebe55a00ad533b7923d7380a" + integrity sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ== + dependencies: + "@wallet-standard/base" "^1.1.0" + +"@wallet-standard/base@^1.0.1", "@wallet-standard/base@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/base/-/base-1.1.0.tgz#214093c0597a1e724ee6dbacd84191dfec62bb33" + integrity sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ== + +"@wallet-standard/core@^1.0.3": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/core/-/core-1.1.0.tgz#06a2193afe9cda41e626a8e990996e568138da91" + integrity sha512-v2W5q/NlX1qkn2q/JOXQT//pOAdrhz7+nOcO2uiH9+a0uvreL+sdWWqkhFmMcX+HEBjaibdOQMUoIfDhOGX4XA== + dependencies: + "@wallet-standard/app" "^1.1.0" + "@wallet-standard/base" "^1.1.0" + "@wallet-standard/errors" "^0.1.0" + "@wallet-standard/features" "^1.1.0" + "@wallet-standard/wallet" "^1.1.0" + +"@wallet-standard/errors@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/errors/-/errors-0.1.0.tgz#fb8ae75b365eb5d3c167ec6b88d3c9cb3039b928" + integrity sha512-ag0eq5ixy7rz8M5YUWGi/EoIJ69KJ+KILFNunoufgmXVkiISC7+NIZXJYTJrapni4f9twE1hfT+8+IV2CYCvmg== + dependencies: + chalk "^5.3.0" + commander "^12.1.0" + +"@wallet-standard/features@^1.0.3", "@wallet-standard/features@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/features/-/features-1.1.0.tgz#f256d7b18940c8d134f66164330db358a8f5200e" + integrity sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg== + dependencies: + "@wallet-standard/base" "^1.1.0" + +"@wallet-standard/wallet@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/wallet/-/wallet-1.1.0.tgz#a1e46a3f1b2d06a0206058562169b1f0e9652d0f" + integrity sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg== + dependencies: + "@wallet-standard/base" "^1.1.0" + +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== + dependencies: + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== + +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== + +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== + +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== + +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" + +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== + +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/helper-wasm-section" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-opt" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + "@webassemblyjs/wast-printer" "1.14.1" + +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-api-error" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": @@ -1949,28 +4187,55 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +accepts@~1.3.4, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +ace-code@^1.23.4: + version "1.24.1" + resolved "https://registry.yarnpkg.com/ace-code/-/ace-code-1.24.1.tgz#129e070699e33d819a780c69be3b95e0a59e1342" + integrity sha512-pRdEBQpwnXcH4l9BRhevjkICdKt3m7YEN5O+XJ4xtEpqZS5fUt9ZIXlb3UmLU9wl+tYAXm+IN1p0UVUS+C9DWQ== + +acorn-jsx@^5.0.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.1.0.tgz#d3c6a9faf00987a5e2b9bdb506c2aa76cd707f83" - integrity sha512-mjmzmv12YIG/G8JQdQuz2MUDShEJ6teYpT5bmWA4q7iwoGen8xtt3twF3OvzIUl+Q06aWIjvnwQUKvQ6TtMRjg== + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" -acorn@^8.0.4, acorn@^8.2.1: - version "8.2.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.4.tgz#caba24b08185c3b56e3168e97d15ed17f4d31fd0" - integrity sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg== +acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.8.2: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== -address@1.1.2, address@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== +address@^1.0.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + +agentkeepalive@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" + integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== + dependencies: + humanize-ms "^1.2.1" aggregate-error@^3.0.0: version "3.1.0" @@ -1980,17 +4245,26 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" -ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: +ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.12.4, ajv@^6.12.5: +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2000,83 +4274,71 @@ ajv@^6.1.0, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -algoliasearch-helper@^3.3.4: - version "3.4.4" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.4.4.tgz#f2eb46bc4d2f6fed82c7201b8ac4ce0a1988ae67" - integrity sha512-OjyVLjykaYKCMxxRMZNiwLp8CS310E0qAeIY2NaublcmLAh8/SL19+zYHp7XCLtMem2ZXwl3ywMiA32O9jszuw== - dependencies: - events "^1.1.1" - -algoliasearch@^4.0.0, algoliasearch@^4.8.4: - version "4.9.1" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.9.1.tgz#1fa8ece3f9808e465226176b88b953801c2274e0" - integrity sha512-EeJUYXzBEhZSsL6tXc3hseLBCtlNLa1MZ4mlMK6EeX38yRjY5vgnFcNNml6uUhlOjvheKxgkKRpPWkxgL8Cqkg== - dependencies: - "@algolia/cache-browser-local-storage" "4.9.1" - "@algolia/cache-common" "4.9.1" - "@algolia/cache-in-memory" "4.9.1" - "@algolia/client-account" "4.9.1" - "@algolia/client-analytics" "4.9.1" - "@algolia/client-common" "4.9.1" - "@algolia/client-recommendation" "4.9.1" - "@algolia/client-search" "4.9.1" - "@algolia/logger-common" "4.9.1" - "@algolia/logger-console" "4.9.1" - "@algolia/requester-browser-xhr" "4.9.1" - "@algolia/requester-common" "4.9.1" - "@algolia/requester-node-http" "4.9.1" - "@algolia/transporter" "4.9.1" - -alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== +ajv@^8.0.0, ajv@^8.9.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +algoliasearch-helper@^3.26.0: + version "3.27.1" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.27.1.tgz#199e3849ea7ebc21ec0a4b62013c0df616b16fc0" + integrity sha512-XXGr02Cz285vLbqM6vPfb39xqV1ptpFr1xn9mqaW+nUvYTvFTdKgYTC/Cg1VzgRTQqNkq9+LlUVv8cfCeOoKig== + dependencies: + "@algolia/events" "^4.0.1" + +algoliasearch@^5.37.0: + version "5.48.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.48.0.tgz#92d75efc2ec7fd34fa13c77eb06fc6eb624b5259" + integrity sha512-aD8EQC6KEman6/S79FtPdQmB7D4af/etcRL/KwiKFKgAE62iU8c5PeEQvpvIcBPurC3O/4Lj78nOl7ZcoazqSw== + dependencies: + "@algolia/abtesting" "1.14.0" + "@algolia/client-abtesting" "5.48.0" + "@algolia/client-analytics" "5.48.0" + "@algolia/client-common" "5.48.0" + "@algolia/client-insights" "5.48.0" + "@algolia/client-personalization" "5.48.0" + "@algolia/client-query-suggestions" "5.48.0" + "@algolia/client-search" "5.48.0" + "@algolia/ingestion" "1.48.0" + "@algolia/monitoring" "1.48.0" + "@algolia/recommend" "5.48.0" + "@algolia/requester-browser-xhr" "5.48.0" + "@algolia/requester-fetch" "5.48.0" + "@algolia/requester-node-http" "5.48.0" + +ansi-align@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== dependencies: - string-width "^3.0.0" - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + string-width "^4.1.0" -ansi-escapes@^4.3.1: +ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" @@ -2085,26 +4347,28 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -anymatch@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== +ansicolors@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" arg@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.0.tgz#a20e2bb5710e82950a516b3f933fee5ed478be90" - integrity sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ== + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== argparse@^1.0.7: version "1.0.10" @@ -2118,133 +4382,110 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= +asn1js@^3.0.6: + version "3.0.7" + resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.7.tgz#15f1f2f59e60f80d5b43ef14047a294a969f824f" + integrity sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ== + dependencies: + pvtsutils "^1.3.6" + pvutils "^1.1.3" + tslib "^2.8.1" -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +assert@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== + dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +astring@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/astring/-/astring-1.9.0.tgz#cc73e6062a7eb03e7d19c22d8b0b3451fd9bfeef" + integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg== -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== +autoprefixer@^10.4.19: + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== dependencies: - lodash "^4.17.14" - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.0.1" + postcss-value-parser "^4.2.0" -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@^10.0.2, autoprefixer@^10.2.5: - version "10.2.5" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.5.tgz#096a0337dbc96c0873526d7fef5de4428d05382d" - integrity sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA== - dependencies: - browserslist "^4.16.3" - caniuse-lite "^1.0.30001196" - colorette "^1.2.2" - fraction.js "^4.0.13" +autoprefixer@^10.4.21: + version "10.4.21" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" + integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== + dependencies: + browserslist "^4.24.4" + caniuse-lite "^1.0.30001702" + fraction.js "^4.3.7" normalize-range "^0.1.2" - postcss-value-parser "^4.1.0" + picocolors "^1.1.1" + postcss-value-parser "^4.2.0" -axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== dependencies: - follow-redirects "^1.10.0" + possible-typed-array-names "^1.0.0" -babel-loader@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== +axios-retry@^3.8.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.9.1.tgz#c8924a8781c8e0a2c5244abf773deb7566b3830d" + integrity sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w== dependencies: - find-cache-dir "^3.3.1" - loader-utils "^1.4.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" + "@babel/runtime" "^7.15.4" + is-retry-allowed "^2.2.0" -babel-plugin-apply-mdx-type-prop@1.6.22: - version "1.6.22" - resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" - integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== +axios@^1.13.5: + version "1.13.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.5.tgz#5e464688fa127e11a660a2c49441c009f6567a43" + integrity sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q== dependencies: - "@babel/helper-plugin-utils" "7.10.4" - "@mdx-js/util" "1.6.22" + follow-redirects "^1.15.11" + form-data "^4.0.5" + proxy-from-env "^1.1.0" -babel-plugin-dynamic-import-node@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== +axios@^1.5.0, axios@^1.5.1: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== dependencies: - object.assign "^4.1.0" + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-loader@^9.2.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b" + integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== + dependencies: + find-cache-dir "^4.0.0" + schema-utils "^4.0.0" babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" @@ -2253,143 +4494,176 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-extract-import-names@1.6.22: - version "1.6.22" - resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" - integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.12" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9" + integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== dependencies: - "@babel/helper-plugin-utils" "7.10.4" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.3" + semver "^6.3.1" -babel-plugin-polyfill-corejs2@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz#686775bf9a5aa757e10520903675e3889caeedc4" - integrity sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg== +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.0" - semver "^6.1.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" -babel-plugin-polyfill-corejs3@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz#f4b4bb7b19329827df36ff56f6e6d367026cb7a2" - integrity sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg== +babel-plugin-polyfill-corejs3@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6" + integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.0" - core-js-compat "^3.9.1" + "@babel/helper-define-polyfill-provider" "^0.6.3" + core-js-compat "^3.40.0" -babel-plugin-polyfill-regenerator@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz#853f5f5716f4691d98c84f8069c7636ea8da7ab8" - integrity sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8" + integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.0" + "@babel/helper-define-polyfill-provider" "^0.6.3" -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" - integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.10" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" + integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== + dependencies: + safe-buffer "^5.0.1" + +base-x@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" + integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base16@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" - integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" +baseline-browser-mapping@^2.8.3: + version "2.8.6" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz#c37dea4291ed8d01682f85661dbe87967028642e" + integrity sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw== batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +bigint-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" + integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== + dependencies: + bindings "^1.3.0" + +bignumber.js@^9.0.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -bindings@^1.5.0: +bindings@^1.3.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" -bluebird@^3.7.1: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== +body-parser@~1.20.3: + version "1.20.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== dependencies: - bytes "3.1.0" - content-type "~1.0.4" + bytes "~3.1.2" + content-type "~1.0.5" debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: + depd "2.0.0" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.14.0" + raw-body "~2.5.3" + type-is "~1.6.18" + unpipe "~1.0.0" + +bonjour-service@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722" + integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== + dependencies: + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -boxen@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b" - integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA== +borsh@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" + integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== + dependencies: + bn.js "^5.2.0" + bs58 "^4.0.0" + text-encoding-utf-8 "^1.0.2" + +boxen@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" + integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== dependencies: - ansi-align "^3.0.0" + ansi-align "^3.0.1" camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.0" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" + chalk "^4.1.2" + cli-boxes "^3.0.0" + string-width "^5.0.1" + type-fest "^2.5.0" + widest-line "^4.0.1" + wrap-ansi "^8.0.1" + +boxen@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4" + integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog== + dependencies: + ansi-align "^3.0.1" + camelcase "^7.0.1" + chalk "^5.2.0" + cli-boxes "^3.0.0" + string-width "^5.1.2" + type-fest "^2.13.0" + widest-line "^4.0.1" + wrap-ansi "^8.1.0" brace-expansion@^1.1.7: version "1.1.11" @@ -2399,112 +4673,152 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== +brace-expansion@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" + balanced-match "^1.0.0" -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" -browserslist@4.14.2: - version "4.14.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" - integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== +browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.3, browserslist@^4.24.4: + version "4.24.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" + integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== dependencies: - caniuse-lite "^1.0.30001125" - electron-to-chromium "^1.3.564" - escalade "^3.0.2" - node-releases "^1.1.61" + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.16.3, browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== +browserslist@^4.25.1: + version "4.26.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.26.2.tgz#7db3b3577ec97f1140a52db4936654911078cef3" + integrity sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A== dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" + baseline-browser-mapping "^2.8.3" + caniuse-lite "^1.0.30001741" + electron-to-chromium "^1.5.218" + node-releases "^2.0.21" + update-browserslist-db "^1.1.3" + +bs58@^4.0.0, bs58@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== +buffer-layout@^1.2.0, buffer-layout@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" + integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== + +buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@^4.0.1: + version "4.0.9" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.9.tgz#6e81739ad48a95cad45a279588e13e95e24a800a" + integrity sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw== + dependencies: + node-gyp-build "^4.3.0" + +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +bytes@3.1.2, bytes@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" +bytestreamjs@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz#a32947c7ce389a6fa11a09a9a563d0a45889535e" + integrity sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ== -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-bind@^1.0.0, call-bind@^1.0.2: +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + +cacheable-request@^10.2.8: + version "10.2.14" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" + integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== + dependencies: + "@types/http-cache-semantics" "^4.0.2" + get-stream "^6.0.1" + http-cache-semantics "^4.1.1" + keyv "^4.5.3" + mimic-response "^4.0.0" + normalize-url "^8.0.0" + responselike "^3.0.0" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" + integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + call-bind-apply-helpers "^1.0.1" + get-intrinsic "^1.2.6" callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@^4.1.1: +camel-case@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== @@ -2512,20 +4826,20 @@ camel-case@^4.1.1: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase-css@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== +camelcase@^6.2.0, camelcase@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +camelcase@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" + integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== caniuse-api@^3.0.0: version "3.0.0" @@ -2537,140 +4851,137 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001196, caniuse-lite@^1.0.30001219: - version "1.0.30001228" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" - integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: + version "1.0.30001741" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz" + integrity sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw== -ccount@^1.0.0, ccount@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" - integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== +caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001741: + version "1.0.30001743" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz#50ff91a991220a1ee2df5af00650dd5c308ea7cd" + integrity sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw== -chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== -chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== +chalk@5.6.2, chalk@^5.4.1: + version "5.6.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== + +chalk@^4.0.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== +chalk@^5.0.1, chalk@^5.2.0, chalk@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" + integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== -chokidar@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== +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@1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + 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" + +chevrotain-allstar@~0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz#b7412755f5d83cc139ab65810cdb00d8db40e6ca" + integrity sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw== + dependencies: + lodash-es "^4.17.21" + +chevrotain@~11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/chevrotain/-/chevrotain-11.0.3.tgz#88ffc1fb4b5739c715807eaeedbbf200e202fc1b" + integrity sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw== + dependencies: + "@chevrotain/cst-dts-gen" "11.0.3" + "@chevrotain/gast" "11.0.3" + "@chevrotain/regexp-to-ast" "11.0.3" + "@chevrotain/types" "11.0.3" + "@chevrotain/utils" "11.0.3" + lodash-es "4.17.21" + +chokidar@^3.5.3, chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.1.1.tgz#9a32fcefdf7bcdb6f0a7e1c0f8098ec57897b80a" - integrity sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== -clean-css@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== - dependencies: - source-map "~0.6.0" +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== -clean-css@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.1.2.tgz#6ea0da7286b4ddc2469a1b776e2461a5007eed54" - integrity sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw== +clean-css@^5.2.2, clean-css@^5.3.3, clean-css@~5.3.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== dependencies: source-map "~0.6.0" @@ -2679,28 +4990,28 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +cli-boxes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== -clipboard@^2.0.0: - version "2.0.8" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba" - integrity sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ== +cli-table3@^0.6.3: + version "0.6.5" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" clone-deep@^4.0.1: version "4.0.1" @@ -2711,46 +5022,15 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -clsx@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" - integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -collapse-white-space@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" - integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" +clsx@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" +collapse-white-space@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz#640257174f9f42c740b40f3b55ee752924feefca" + integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw== color-convert@^2.0.1: version "2.0.1" @@ -2759,610 +5039,914 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.4" +colord@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== -colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +colorette@^2.0.10: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== combine-promises@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" - integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== + version "1.2.0" + resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.2.0.tgz#5f2e68451862acf85761ded4d9e2af7769c2ca6a" + integrity sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ== -comma-separated-tokens@^1.0.0: +combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" - integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + +commander@14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.1.tgz#2f9225c19e6ebd0dc4404dd45821b2caa17ea09b" + integrity sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A== + +commander@7, commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== -commander@^2.20.0: +commander@^14.0.0: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== + +commander@^2.20.0, commander@^2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - commander@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -commander@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== -compressible@~2.0.16: +compressible@~2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== +compression@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" + integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== + dependencies: + bytes "3.1.2" + compressible "~2.0.18" + debug "2.6.9" + negotiator "~0.6.4" + on-headers "~1.1.0" + safe-buffer "5.2.1" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confbox@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" + integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + +confbox@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.2.tgz#8652f53961c74d9e081784beed78555974a9c110" + integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ== + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +configstore@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" + integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== + dependencies: + dot-prop "^6.0.1" + graceful-fs "^4.2.6" + unique-string "^3.0.0" + write-file-atomic "^3.0.3" + xdg-basedir "^5.0.1" + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +consola@^3.2.3: + version "3.4.0" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.0.tgz#4cfc9348fd85ed16a17940b3032765e31061ab88" + integrity sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA== + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== + +content-disposition@~0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== + +cookie@~0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + +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.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.38.0, core-js-compat@^3.40.0: + version "3.40.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.40.0.tgz#7485912a5a4a4315c2fdb2cbdc623e6881c88b38" + integrity sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ== + dependencies: + browserslist "^4.24.3" + +core-js-pure@^3.30.2: + version "3.40.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.40.0.tgz#d9a019e9160f9b042eeb6abb92242680089d486e" + integrity sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A== + +core-js@^3.31.1: + version "3.40.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.40.0.tgz#2773f6b06877d8eda102fc42f828176437062476" + integrity sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cose-base@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-1.0.3.tgz#650334b41b869578a543358b80cda7e0abe0a60a" + integrity sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg== + dependencies: + layout-base "^1.0.0" + +cose-base@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-2.2.0.tgz#1c395c35b6e10bb83f9769ca8b817d614add5c01" + integrity sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g== + dependencies: + layout-base "^2.0.0" + +cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +cross-fetch@^3.1.5: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" + integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== + dependencies: + node-fetch "^2.7.0" + +cross-spawn@^7.0.3: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-hash@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" + integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== + +crypto-js@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +crypto-random-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" + integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== + dependencies: + type-fest "^1.0.1" + +css-blank-pseudo@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz#32020bff20a209a53ad71b8675852b49e8d57e46" + integrity sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag== + dependencies: + postcss-selector-parser "^7.0.0" + +css-declaration-sorter@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024" + integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== + +css-has-pseudo@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz#a5ee2daf5f70a2032f3cefdf1e36e7f52a243873" + integrity sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA== + dependencies: + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + postcss-value-parser "^4.2.0" + +css-loader@^6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" + integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.33" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.5.4" + +css-minimizer-webpack-plugin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565" + integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + cssnano "^6.0.1" + jest-worker "^29.4.3" + postcss "^8.4.24" + schema-utils "^4.0.1" + serialize-javascript "^6.0.1" + +css-prefers-color-scheme@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz#ba001b99b8105b8896ca26fc38309ddb2278bd3c" + integrity sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ== + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + 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: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" + mdn-data "2.0.28" + source-map-js "^1.0.1" -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +css-what@^6.0.1, css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -consola@^2.15.0: - version "2.15.3" - resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" - integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== +cssdb@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.4.0.tgz#232a1aa7751983ed2b40331634902d4c93f0456c" + integrity sha512-lyATYGyvXwQ8h55WeQeEHXhI+47rl52pXSYkFK/ZrCbAJSgVIaPFjYc3RM8TpRHKk7W3wsAZImmLps+P5VyN9g== -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" +cssnano-preset-advanced@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz#82b090872b8f98c471f681d541c735acf8b94d3f" + integrity sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ== + dependencies: + autoprefixer "^10.4.19" + browserslist "^4.23.0" + cssnano-preset-default "^6.1.2" + postcss-discard-unused "^6.0.5" + postcss-merge-idents "^6.0.3" + postcss-reduce-idents "^6.0.3" + postcss-zindex "^6.0.2" + +cssnano-preset-default@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz#adf4b89b975aa775f2750c89dbaf199bbd9da35e" + integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg== + dependencies: + browserslist "^4.23.0" + css-declaration-sorter "^7.2.0" + cssnano-utils "^4.0.2" + postcss-calc "^9.0.1" + postcss-colormin "^6.1.0" + postcss-convert-values "^6.1.0" + postcss-discard-comments "^6.0.2" + postcss-discard-duplicates "^6.0.3" + postcss-discard-empty "^6.0.3" + postcss-discard-overridden "^6.0.2" + postcss-merge-longhand "^6.0.5" + postcss-merge-rules "^6.1.1" + postcss-minify-font-values "^6.1.0" + postcss-minify-gradients "^6.0.3" + postcss-minify-params "^6.1.0" + postcss-minify-selectors "^6.0.4" + postcss-normalize-charset "^6.0.2" + postcss-normalize-display-values "^6.0.2" + postcss-normalize-positions "^6.0.2" + postcss-normalize-repeat-style "^6.0.2" + postcss-normalize-string "^6.0.2" + postcss-normalize-timing-functions "^6.0.2" + postcss-normalize-unicode "^6.1.0" + postcss-normalize-url "^6.0.2" + postcss-normalize-whitespace "^6.0.2" + postcss-ordered-values "^6.0.2" + postcss-reduce-initial "^6.1.0" + postcss-reduce-transforms "^6.0.2" + postcss-svgo "^6.0.3" + postcss-unique-selectors "^6.0.4" + +cssnano-utils@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.2.tgz#56f61c126cd0f11f2eef1596239d730d9fceff3c" + integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ== -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +cssnano@^6.0.1, cssnano@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.1.2.tgz#4bd19e505bd37ee7cf0dc902d3d869f6d79c66b8" + integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA== + dependencies: + cssnano-preset-default "^6.1.2" + lilconfig "^3.1.1" -convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== dependencies: - safe-buffer "~5.1.1" + css-tree "~2.2.0" -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cytoscape-cose-bilkent@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz#762fa121df9930ffeb51a495d87917c570ac209b" + integrity sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ== + dependencies: + cose-base "^1.0.0" -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +cytoscape-fcose@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz#e4d6f6490df4fab58ae9cea9e5c3ab8d7472f471" + integrity sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ== + dependencies: + cose-base "^2.2.0" -copy-text-to-clipboard@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz#8cbf8f90e0a47f12e4a24743736265d157bce69c" - integrity sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q== +cytoscape@^3.29.3: + version "3.33.1" + resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.33.1.tgz#449e05d104b760af2912ab76482d24c01cdd4c97" + integrity sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ== -copy-webpack-plugin@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz#3f697e162764925c2f0d235f380676125508fd26" - integrity sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ== +"d3-array@1 - 2": + version "2.12.1" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.12.1.tgz#e20b41aafcdffdf5d50928004ececf815a465e81" + integrity sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ== dependencies: - fast-glob "^3.2.5" - glob-parent "^5.1.1" - globby "^11.0.3" - normalize-path "^3.0.0" - p-limit "^3.1.0" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" + internmap "^1.0.0" -core-js-compat@^3.9.0, core-js-compat@^3.9.1: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.12.1.tgz#2c302c4708505fa7072b0adb5156d26f7801a18b" - integrity sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ== +"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" + integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== dependencies: - browserslist "^4.16.6" - semver "7.0.0" - -core-js-pure@^3.0.0: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.12.1.tgz#934da8b9b7221e2a2443dc71dfa5bd77a7ea00b8" - integrity sha512-1cch+qads4JnDSWsvc7d6nzlKAippwjUlf6vykkTLW53VSV+NkE6muGBToAjEA8pG90cSfcud3JgVmW2ds5TaQ== + internmap "1 - 2" -core-js@^3.9.1: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.12.1.tgz#6b5af4ff55616c08a44d386f1f510917ff204112" - integrity sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw== - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +d3-axis@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-3.0.0.tgz#c42a4a13e8131d637b745fc2973824cfeaf93322" + integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw== -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== +d3-brush@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-3.0.0.tgz#6f767c4ed8dcb79de7ede3e1c0f89e63ef64d31c" + integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ== dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "3" + d3-transition "3" -cross-fetch@^3.0.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39" - integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ== +d3-chord@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-3.0.1.tgz#d156d61f485fce8327e6abf339cb41d8cbba6966" + integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g== dependencies: - node-fetch "2.6.1" + d3-path "1 - 3" -cross-spawn@7.0.3, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" +"d3-color@1 - 3", d3-color@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" + integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== +d3-contour@4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-4.0.2.tgz#bb92063bc8c5663acb2422f99c73cbb6c6ae3bcc" + integrity sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA== dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" + d3-array "^3.2.0" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +d3-delaunay@6: + version "6.0.4" + resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz#98169038733a0a5babbeda55054f795bb9e4a58b" + integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A== + dependencies: + delaunator "5" -css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= +"d3-dispatch@1 - 3", d3-dispatch@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" + integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== -css-color-names@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-1.0.1.tgz#6ff7ee81a823ad46e020fa2fd6ab40a887e2ba67" - integrity sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA== +"d3-drag@2 - 3", d3-drag@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba" + integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== + dependencies: + d3-dispatch "1 - 3" + d3-selection "3" -css-declaration-sorter@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.0.0.tgz#eb21f75860078627e9e3cc6f5535ccfcea445817" - integrity sha512-S0TE4E0ha5+tBHdLWPc5n+S8E4dFBS5xScPvgHkLNZwWvX4ISoFGhGeerLC9uS1cKA/sC+K2wHq6qEbcagT/fg== +"d3-dsv@1 - 3", d3-dsv@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" + integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== dependencies: - timsort "^0.3.0" + commander "7" + iconv-lite "0.6" + rw "1" + +"d3-ease@1 - 3", d3-ease@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" + integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== -css-loader@^5.1.1: - version "5.2.4" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.4.tgz#e985dcbce339812cb6104ef3670f08f9893a1536" - integrity sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw== +d3-fetch@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-3.0.1.tgz#83141bff9856a0edb5e38de89cdcfe63d0a60a22" + integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw== dependencies: - camelcase "^6.2.0" - icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.10" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.5" + d3-dsv "1 - 3" -css-minimizer-webpack-plugin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-2.0.0.tgz#3c42f6624ed4cf4780dd963e23ee649e5a25c1a8" - integrity sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw== +d3-force@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4" + integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== dependencies: - cssnano "^5.0.0" - jest-worker "^26.3.0" - p-limit "^3.0.2" - postcss "^8.2.9" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" + d3-dispatch "1 - 3" + d3-quadtree "1 - 3" + d3-timer "1 - 3" -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== +"d3-format@1 - 3", d3-format@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" + integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== -css-select@^2.0.0, css-select@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== +d3-geo@3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.1.tgz#6027cf51246f9b2ebd64f99e01dc7c3364033a4d" + integrity sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q== dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" + d3-array "2.5.0 - 3" -css-select@^3.1.2: +d3-hierarchy@3: version "3.1.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-3.1.2.tgz#d52cbdc6fee379fba97fb0d3925abbd18af2d9d8" - integrity sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA== + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6" + integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== + +"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" + integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== dependencies: - boolbase "^1.0.0" - css-what "^4.0.0" - domhandler "^4.0.0" - domutils "^2.4.3" - nth-check "^2.0.0" + d3-color "1 - 3" -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= +d3-path@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" + integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== + +"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" + integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== + +d3-polygon@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-3.0.1.tgz#0b45d3dd1c48a29c8e057e6135693ec80bf16398" + integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg== + +"d3-quadtree@1 - 3", d3-quadtree@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f" + integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== + +d3-random@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4" + integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ== + +d3-sankey@^0.12.3: + version "0.12.3" + resolved "https://registry.yarnpkg.com/d3-sankey/-/d3-sankey-0.12.3.tgz#b3c268627bd72e5d80336e8de6acbfec9d15d01d" + integrity sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ== dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" + d3-array "1 - 2" + d3-shape "^1.2.0" -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== +d3-scale-chromatic@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz#34c39da298b23c20e02f1a4b239bd0f22e7f1314" + integrity sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ== dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" + d3-color "1 - 3" + d3-interpolate "1 - 3" -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== +d3-scale@4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" + integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" + d3-array "2.10.0 - 3" + d3-format "1 - 3" + d3-interpolate "1.2.0 - 3" + d3-time "2.1.1 - 3" + d3-time-format "2 - 4" -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== +"d3-selection@2 - 3", d3-selection@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31" + integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== +d3-shape@3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" + integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== + dependencies: + d3-path "^3.1.0" -css-what@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" - integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== +d3-shape@^1.2.0: + version "1.3.7" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +"d3-time-format@2 - 4", d3-time-format@4: + version "4.1.0" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" + integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== + dependencies: + d3-time "1 - 3" -cssnano-preset-advanced@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.0.1.tgz#b551bb9ad3abf7a9a79f0cace3bf50264018df64" - integrity sha512-g+LB6GcihLXcBEdDh+mzk1qX9jgtBkVpzAg1OlgrH6C+qKIQYRHwAPyaoXy95Ci83sYYXlwJ0OrqLYTIUEBLZQ== +"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" + integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== dependencies: - autoprefixer "^10.0.2" - cssnano-preset-default "^5.0.1" - postcss-discard-unused "^5.0.0" - postcss-merge-idents "^5.0.0" - postcss-reduce-idents "^5.0.0" - postcss-zindex "^5.0.0" + d3-array "2 - 3" -cssnano-preset-default@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.0.1.tgz#76adc00f7aae36ae80552b8356e21bec4b233ca2" - integrity sha512-cfmfThYODGqhpQKDq9H0MTAqkMvZ3dGbOUTBKw0xWZiIycMqHid22LsJXJl4r1qX4qzDeKxcSyQ/Xb5Mu3Z//Q== - dependencies: - css-declaration-sorter "6.0.0" - cssnano-utils "^2.0.0" - postcss-calc "^8.0.0" - postcss-colormin "^5.0.0" - postcss-convert-values "^5.0.0" - postcss-discard-comments "^5.0.0" - postcss-discard-duplicates "^5.0.0" - postcss-discard-empty "^5.0.0" - postcss-discard-overridden "^5.0.0" - postcss-merge-longhand "^5.0.1" - postcss-merge-rules "^5.0.0" - postcss-minify-font-values "^5.0.0" - postcss-minify-gradients "^5.0.0" - postcss-minify-params "^5.0.0" - postcss-minify-selectors "^5.0.0" - postcss-normalize-charset "^5.0.0" - postcss-normalize-display-values "^5.0.0" - postcss-normalize-positions "^5.0.0" - postcss-normalize-repeat-style "^5.0.0" - postcss-normalize-string "^5.0.0" - postcss-normalize-timing-functions "^5.0.0" - postcss-normalize-unicode "^5.0.0" - postcss-normalize-url "^5.0.0" - postcss-normalize-whitespace "^5.0.0" - postcss-ordered-values "^5.0.0" - postcss-reduce-initial "^5.0.0" - postcss-reduce-transforms "^5.0.0" - postcss-svgo "^5.0.0" - postcss-unique-selectors "^5.0.0" - -cssnano-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-2.0.0.tgz#b04baaa312aa3dd5a854b7f61d76b9d94be07f74" - integrity sha512-xvxmTszdrvSyTACdPe8VU5J6p4sm3egpgw54dILvNqt5eBUv6TFjACLhSxtRuEsxYrgy8uDy269YjScO5aKbGA== +"d3-timer@1 - 3", d3-timer@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" + integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== -cssnano@^5.0.0, cssnano@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.0.2.tgz#3f6de4fd5ecb7b5fb636c1a606de5f38cd241493" - integrity sha512-8JK3EnPsjQsULme9/e5M2hF564f/480hwsdcHvQ7ZtAIMfQ1O3SCfs+b8Mjf5KJxhYApyRshR2QSovEJi2K72Q== +"d3-transition@2 - 3", d3-transition@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f" + integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w== dependencies: - cosmiconfig "^7.0.0" - cssnano-preset-default "^5.0.1" - is-resolvable "^1.1.0" + d3-color "1 - 3" + d3-dispatch "1 - 3" + d3-ease "1 - 3" + d3-interpolate "1 - 3" + d3-timer "1 - 3" -csso@^4.0.2, csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" +d3-zoom@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3" + integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw== + dependencies: + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "2 - 3" + d3-transition "2 - 3" + +d3@^7.9.0: + version "7.9.0" + resolved "https://registry.yarnpkg.com/d3/-/d3-7.9.0.tgz#579e7acb3d749caf8860bd1741ae8d371070cd5d" + integrity sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA== + dependencies: + d3-array "3" + d3-axis "3" + d3-brush "3" + d3-chord "3" + d3-color "3" + d3-contour "4" + d3-delaunay "6" + d3-dispatch "3" + d3-drag "3" + d3-dsv "3" + d3-ease "3" + d3-fetch "3" + d3-force "3" + d3-format "3" + d3-geo "3" + d3-hierarchy "3" + d3-interpolate "3" + d3-path "3" + d3-polygon "3" + d3-quadtree "3" + d3-random "3" + d3-scale "4" + d3-scale-chromatic "3" + d3-selection "3" + d3-shape "3" + d3-time "3" + d3-time-format "4" + d3-timer "3" + d3-transition "3" + d3-zoom "3" + +dagre-d3-es@7.0.11: + version "7.0.11" + resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz#2237e726c0577bfe67d1a7cfd2265b9ab2c15c40" + integrity sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw== + dependencies: + d3 "^7.9.0" + lodash-es "^4.17.21" + +dayjs@^1.11.18: + version "1.11.18" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.18.tgz#835fa712aac52ab9dec8b1494098774ed7070a11" + integrity sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA== + +debounce@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.1, debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: - ms "^2.1.1" + ms "^2.1.3" -debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== +debug@^4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: - ms "2.1.2" + ms "^2.1.3" decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== dependencies: - mimic-response "^1.0.0" + character-entities "^2.0.0" -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" + mimic-response "^3.1.0" deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== +deepmerge@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== +default-browser-id@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.1.tgz#f7a7ccb8f5104bf8e0f71ba3b1ccfa5eafdb21e8" + integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== + +default-browser@^5.2.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.5.0.tgz#2792e886f2422894545947cc80e1a444496c5976" + integrity sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw== dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" + bundle-name "^4.1.0" + default-browser-id "^5.0.0" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - object-keys "^1.0.12" + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== +define-properties@^1.1.3, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -del@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== +delaunator@5: + version "5.0.1" + resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.1.tgz#39032b08053923e924d6094fe2cde1a99cc51278" + integrity sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw== dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" + robust-predicates "^3.0.2" -delegate@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== -detab@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" - integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== - dependencies: - repeat-string "^1.5.4" +destroy@1.2.0, destroy@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-node@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" - integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -detect-port-alt@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== +detect-port@^1.5.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67" + integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q== dependencies: address "^1.0.1" - debug "^2.6.0" + debug "4" -detect-port@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" - integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== +devlop@^1.0.0, devlop@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== dependencies: - address "^1.0.1" - debug "^2.6.0" + dequal "^2.0.0" + +dijkstrajs@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23" + integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== dir-glob@^3.0.1: version "3.0.1" @@ -3371,107 +5955,108 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= +dns-packet@^5.2.2: + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== +docslab-docusaurus@^0.2.10: + version "0.2.10" + resolved "https://registry.yarnpkg.com/docslab-docusaurus/-/docslab-docusaurus-0.2.10.tgz#de61f597e092dc7b36be3333f7386916039779b3" + integrity sha512-7+Rnu0W2R0DCLgKZYn+pkI5MPFpADT+6HI68r5oYXP9AYoaezxT0VwbP1O43EfLXtM9jFOtFDRF+ZBiJlrHvNg== dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" + docslab "^0.3.12" -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= +docslab@^0.3.12: + version "0.3.12" + resolved "https://registry.yarnpkg.com/docslab/-/docslab-0.3.12.tgz#fb7ec65e2b77a9f1f61b4c1125c275adffd32abd" + integrity sha512-+E6AqnrCHlUsjPfatNk3vMEdXPbn30IpQsMU0eX5kMENtcLERja/YgKBJarm32gpOUqejn9mhby7Sk8/KijDsA== dependencies: - buffer-indexof "^1.0.0" + ace-code "^1.23.4" + xterm "^5.2.1" + xterm-addon-attach "^0.8.0" + xterm-addon-fit "^0.7.0" -dom-converter@^0.2: +docusaurus-plugin-llms@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/docusaurus-plugin-llms/-/docusaurus-plugin-llms-0.3.0.tgz#de4dc96c1cfd460eb92eb5f1a09a63df94e43804" + integrity sha512-JuADAJA2fjTv1U4XQUoIu1LyjISDzxFhRK5HbCZiHum4HlmdPwyx8NBXsi+LfdUyjK9acbZgazGsHPhdwEZs0g== + dependencies: + gray-matter "^4.0.3" + minimatch "^9.0.3" + yaml "^2.8.1" + +dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== dependencies: utila "~0.4" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.1.tgz#d845a1565d7c041a95e5dab62184ab41e3a519be" - integrity sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q== + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" - domhandler "^4.0.0" + domhandler "^4.2.0" entities "^2.0.0" -dom-serializer@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== +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 "^1.3.0" - entities "^1.1.1" - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" - integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= +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: - dom-serializer "0" - domelementtype "1" + domelementtype "^2.3.0" -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" +dompurify@^3.2.5: + version "3.2.7" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.7.tgz#721d63913db5111dd6dfda8d3a748cfd7982d44a" + integrity sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw== + optionalDependencies: + "@types/trusted-types" "^2.0.7" -domutils@^2.4.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.6.0.tgz#2e15c04185d43fb16ae7057cb76433c6edb938b7" - integrity sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA== +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^3.0.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -3480,169 +6065,202 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== dependencies: is-obj "^2.0.0" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +dotenv@^17.2.4: + version "17.2.4" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.4.tgz#b5a0e2f015e0be287a5330a90bf0e804606504c2" + integrity sha512-mudtfb4zRB4bVvdj0xRo+e6duH1csJRM8IukBqfTRvHotn9+LBXB8ynAidP9zHqoRC/fsllXgk4kCKlR21fIhw== + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" -duplexer@^0.1.1, duplexer@^0.1.2: +duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.723: - version "1.3.727" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz#857e310ca00f0b75da4e1db6ff0e073cc4a91ddf" - integrity sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg== +electron-to-chromium@^1.5.218: + version "1.5.222" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.222.tgz#965c93783ad989116b74593ae3068b9466fdb237" + integrity sha512-gA7psSwSwQRE60CEoLz6JBCQPIxNeuzB2nL8vE03GK/OHxlvykbLyeiumQy1iH5C2f3YbRAZpGCMT12a/9ih9w== -"emoji-regex@>=6.0.0 <=6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" - integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +electron-to-chromium@^1.5.73: + version "1.5.102" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz#81a452ace8e2c3fa7fba904ea4fed25052c53d3f" + integrity sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojilib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e" + integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -emoticon@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" - integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +emoticon@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-4.1.0.tgz#d5a156868ee173095627a33de3f1e914c3dde79e" + integrity sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ== -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== -enhanced-resolve@^5.8.0: - version "5.8.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" - integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== +enhanced-resolve@^5.17.1: + version "5.18.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf" + integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== 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.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - entities@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -errno@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== +entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" + integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== + +es-object-atoms@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: - prr "~1.0.1" + es-errors "^1.3.0" -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: - is-arrayish "^0.2.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== -es-abstract@^1.17.2, es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" + es6-promise "^4.0.3" -es-module-lexer@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" - integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== +esast-util-from-estree@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz#8d1cfb51ad534d2f159dc250e604f3478a79f1ad" + integrity sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + devlop "^1.0.0" + estree-util-visit "^2.0.0" + unist-util-position-from-estree "^2.0.0" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== +esast-util-from-js@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz#5147bec34cc9da44accf52f87f239a40ac3e8225" + integrity sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw== dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + "@types/estree-jsx" "^1.0.0" + acorn "^8.0.0" + esast-util-from-estree "^2.0.0" + vfile-message "^4.0.0" -escalade@^3.0.2, escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== +escape-goat@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" + integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-scope@^5.1.1: +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -3668,71 +6286,113 @@ estraverse@^4.1.1: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-util-attach-comments@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz#344bde6a64c8a31d15231e5ee9e297566a691c2d" + integrity sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw== + dependencies: + "@types/estree" "^1.0.0" + +estree-util-build-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz#b6d0bced1dcc4f06f25cf0ceda2b2dcaf98168f1" + integrity sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + estree-walker "^3.0.0" + +estree-util-is-identifier-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" + integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== + +estree-util-scope@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/estree-util-scope/-/estree-util-scope-1.0.0.tgz#9cbdfc77f5cb51e3d9ed4ad9c4adbff22d43e585" + integrity sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + +estree-util-to-js@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz#10a6fb924814e6abb62becf0d2bc4dea51d04f17" + integrity sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg== + dependencies: + "@types/estree-jsx" "^1.0.0" + astring "^1.8.0" + source-map "^0.7.0" + +estree-util-value-to-estree@^3.0.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.3.2.tgz#75bb2263850b6f5ac35edd343929c36b51a69806" + integrity sha512-hYH1aSvQI63Cvq3T3loaem6LW4u72F187zW4FHpTrReJSm6W66vYTFNO1vH/chmcOulp1HlAj1pxn8Ag0oXI5Q== + dependencies: + "@types/estree" "^1.0.0" + +estree-util-visit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb" + integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/unist" "^3.0.0" + +estree-walker@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -eta@^1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/eta/-/eta-1.12.1.tgz#d985766591676c323f02dfc48a67539212745937" - integrity sha512-H8npoci2J/7XiPnVcCVulBSPsTNGvGaINyMjQDU8AFqp9LGsEYS88g2CiU+d01Sg44WtX7o4nb8wUJ9vnI+tiA== +eta@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a" + integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -eval@^0.1.4: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.6.tgz#9620d7d8c85515e97e6b47c5814f46ae381cb3cc" - integrity sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ== +eval@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== dependencies: + "@types/node" "*" require-like ">= 0.1.1" -eventemitter3@^4.0.0: +eventemitter3@^4.0.0, eventemitter3@^4.0.4, eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -events@^3.2.0: +events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== - dependencies: - original "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" - integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== +execa@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.0" @@ -3744,156 +6404,116 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== +express@^4.22.1: + version "4.22.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" + integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== dependencies: - accepts "~1.3.7" + accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" + body-parser "~1.20.3" + content-disposition "~0.5.4" content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" + cookie "~0.7.1" + cookie-signature "~1.0.6" debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" + depd "2.0.0" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" + finalhandler "~1.3.1" + fresh "~0.5.2" + http-errors "~2.0.0" + merge-descriptors "1.0.3" methods "~1.1.2" - on-finished "~2.3.0" + on-finished "~2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" + path-to-regexp "~0.1.12" + proxy-addr "~2.0.7" + qs "~6.14.0" range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" + safe-buffer "5.2.1" + send "~0.19.0" + serve-static "~1.16.2" + setprototypeof "1.2.0" + statuses "~2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" +exsolve@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.7.tgz#3b74e4c7ca5c5f9a19c3626ca857309fa99f9e9e" + integrity sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw== + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - extend@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" +eyes@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.1.1, fast-glob@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== +fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" + glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" + micromatch "^4.0.8" fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-url-parser@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" - integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0= - dependencies: - punycode "^1.3.2" +fast-stable-stringify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" + integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== + +fast-uri@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + version "1.19.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.0.tgz#a82c6b7c2bb4e44766d865f07997785fecfdcb89" + integrity sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA== dependencies: reusify "^1.0.4" -faye-websocket@^0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== - dependencies: - websocket-driver ">=0.5.1" - -fbemitter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" - integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== +fault@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" + integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== dependencies: - fbjs "^3.0.0" - -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + format "^0.2.0" -fbjs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.0.tgz#0907067fb3f57a78f45d95f1eacffcacd623c165" - integrity sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg== +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: - cross-fetch "^3.0.4" - fbjs-css-vars "^1.0.0" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" + websocket-driver ">=0.5.1" feed@^4.2.2: version "4.2.2" @@ -3922,51 +6542,35 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -filesize@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" - integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== +finalhandler@~1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" + integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== dependencies: debug "2.6.9" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" - on-finished "~2.3.0" + on-finished "~2.4.1" parseurl "~1.3.3" - statuses "~1.5.0" + statuses "~2.0.2" unpipe "~1.0.0" -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== +find-cache-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" + integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" + common-path-prefix "^3.0.0" + pkg-dir "^7.0.0" -find-up@4.1.0, find-up@^4.0.0: +find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -3974,108 +6578,102 @@ find-up@4.1.0, find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== +find-up@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== dependencies: - locate-path "^3.0.0" + locate-path "^7.1.0" + path-exists "^5.0.0" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flux@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.1.tgz#7843502b02841d4aaa534af0b373034a1f75ee5c" - integrity sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ== +follow-redirects@^1.0.0, follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +follow-redirects@^1.15.11: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + +for-each@^0.3.3: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: - fbemitter "^3.0.0" - fbjs "^3.0.0" + is-callable "^1.2.7" -follow-redirects@^1.0.0, follow-redirects@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== +form-data-encoder@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" + integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -fork-ts-checker-webpack-plugin@4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" - integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== - dependencies: - "@babel/code-frame" "^7.5.5" - chalk "^2.4.1" - micromatch "^3.1.10" - minimatch "^3.0.4" - semver "^5.6.0" - tapable "^1.0.0" - worker-rpc "^0.1.0" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +form-data@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + mime-types "^2.1.12" + +form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== -fraction.js@^4.0.13: - version "4.1.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.0.tgz#229ec1cedc8c3c7e5d2d20688ba64f0a43af5830" - integrity sha512-o9lSKpK0TDqDwTL24Hxqi6I99s942l6TYkfl6WvGWgLOIFz/YonSGKfiSeMadoiNvTfqnfOa9mjb5SGVbBK9/w== +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== -fresh@0.5.2: +fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== +fs-extra@^11.1.1, fs-extra@^11.2.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== dependencies: - at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: +gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -4085,176 +6683,147 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" + integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + function-bind "^1.1.2" + get-proto "^1.0.0" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== +get-proto@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: - pump "^3.0.0" + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -github-slugger@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" - integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q== - dependencies: - emoji-regex ">=6.0.0 <=6.1.1" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" +github-slugger@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== -glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regex.js@^1.0.0, glob-to-regex.js@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz#2b323728271d133830850e32311f40766c5f6413" + integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.0.3, glob@^7.1.3: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== dependencies: ini "2.0.0" -global-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globby@11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" - integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== +globals@^15.15.0: + version "15.15.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-15.15.0.tgz#7c4761299d41c32b075715a4ce1ede7897ff72a8" + integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg== + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" -globby@^11.0.1, globby@^11.0.2, globby@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" - integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== +globby@^13.1.1: + version "13.2.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== dependencies: - array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" + fast-glob "^3.3.0" + ignore "^5.2.4" + merge2 "^1.4.1" + slash "^4.0.0" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" +google-protobuf@^3.21.4: + version "3.21.4" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.4.tgz#2f933e8b6e5e9f8edde66b7be0024b68f77da6c9" + integrity sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ== -good-listener@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= - dependencies: - delegate "^3.1.2" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -gray-matter@^4.0.2: +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +got@^12.1.0: + version "12.6.1" + resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" + integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== + dependencies: + "@sindresorhus/is" "^5.2.0" + "@szmarczak/http-timer" "^5.0.1" + cacheable-lookup "^7.0.0" + cacheable-request "^10.2.8" + decompress-response "^6.0.0" + form-data-encoder "^2.1.2" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^3.0.0" + +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== @@ -4264,13 +6833,10 @@ gray-matter@^4.0.2: section-matter "^1.0.0" strip-bom-string "^1.0.0" -gzip-size@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== - dependencies: - duplexer "^0.1.1" - pify "^4.0.1" +grpc-web@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/grpc-web/-/grpc-web-1.5.0.tgz#154e4007ab59a94bf7726b87ef6c5bd8815ecf6e" + integrity sha512-y1tS3BBIoiVSzKTDF3Hm7E8hV2n7YY7pO0Uo7depfWJqKzWE+SKr0jvHNIJsJJYILQlpYShpi/DRJJMbosgDMQ== gzip-size@^6.0.0: version "6.0.0" @@ -4279,173 +6845,219 @@ gzip-size@^6.0.0: dependencies: duplexer "^0.1.2" +hachure-fill@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/hachure-fill/-/hachure-fill-0.5.2.tgz#d19bc4cc8750a5962b47fb1300557a85fcf934cc" + integrity sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg== + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1, has-symbols@^1.0.2: +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" + es-define-property "^1.0.0" -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" + has-symbols "^1.0.3" -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= +has-yarn@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d" + integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + function-bind "^1.1.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hast-util-from-dom@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz#c3c92fbd8d4e1c1625edeb3a773952b9e4ad64a8" + integrity sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q== dependencies: - function-bind "^1.1.1" + "@types/hast" "^3.0.0" + hastscript "^9.0.0" + web-namespaces "^2.0.0" -hast-to-hyperscript@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" - integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== - dependencies: - "@types/unist" "^2.0.3" - comma-separated-tokens "^1.0.0" - property-information "^5.3.0" - space-separated-tokens "^1.0.0" - style-to-object "^0.3.0" - unist-util-is "^4.0.0" - web-namespaces "^1.0.0" - -hast-util-from-parse5@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz#3089dc0ee2ccf6ec8bc416919b51a54a589e097c" - integrity sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA== +hast-util-from-html-isomorphic@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz#b31baee386a899a2472326a3c5692f29f86d1d3c" + integrity sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw== dependencies: - ccount "^1.0.3" - hastscript "^5.0.0" - property-information "^5.0.0" - web-namespaces "^1.1.2" - xtend "^4.0.1" + "@types/hast" "^3.0.0" + hast-util-from-dom "^5.0.0" + hast-util-from-html "^2.0.0" + unist-util-remove-position "^5.0.0" -hast-util-from-parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" - integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== +hast-util-from-html@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz#485c74785358beb80c4ba6346299311ac4c49c82" + integrity sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw== + dependencies: + "@types/hast" "^3.0.0" + devlop "^1.1.0" + hast-util-from-parse5 "^8.0.0" + parse5 "^7.0.0" + vfile "^6.0.0" + vfile-message "^4.0.0" + +hast-util-from-parse5@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz#29b42758ba96535fd6021f0f533c000886c0f00f" + integrity sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + devlop "^1.0.0" + hastscript "^9.0.0" + property-information "^6.0.0" + vfile "^6.0.0" + vfile-location "^5.0.0" + web-namespaces "^2.0.0" + +hast-util-is-element@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz#6e31a6532c217e5b533848c7e52c9d9369ca0932" + integrity sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g== dependencies: - "@types/parse5" "^5.0.0" - hastscript "^6.0.0" - property-information "^5.0.0" - vfile "^4.0.0" - vfile-location "^3.2.0" - web-namespaces "^1.0.0" + "@types/hast" "^3.0.0" -hast-util-parse-selector@^2.0.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" - integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== +hast-util-parse-selector@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" + integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== + dependencies: + "@types/hast" "^3.0.0" -hast-util-raw@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" - integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== - dependencies: - "@types/hast" "^2.0.0" - hast-util-from-parse5 "^6.0.0" - hast-util-to-parse5 "^6.0.0" - html-void-elements "^1.0.0" - parse5 "^6.0.0" - unist-util-position "^3.0.0" - vfile "^4.0.0" - web-namespaces "^1.0.0" - xtend "^4.0.0" - zwitch "^1.0.0" - -hast-util-to-parse5@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" - integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== +hast-util-raw@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz#79b66b26f6f68fb50dfb4716b2cdca90d92adf2e" + integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + "@ungap/structured-clone" "^1.0.0" + hast-util-from-parse5 "^8.0.0" + hast-util-to-parse5 "^8.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + parse5 "^7.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-to-estree@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.1.tgz#b7f0b247d9f62127bb5db34e3a86c93d17279071" + integrity sha512-IWtwwmPskfSmma9RpzCappDUitC8t5jhAynHhc1m2+5trOgsrp7txscUSavc5Ic8PATyAjfrCK1wgtxh2cICVQ== + dependencies: + "@types/estree" "^1.0.0" + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + estree-util-attach-comments "^3.0.0" + estree-util-is-identifier-name "^3.0.0" + hast-util-whitespace "^3.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^1.0.0" + unist-util-position "^5.0.0" + zwitch "^2.0.0" + +hast-util-to-jsx-runtime@^2.0.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz#6d11b027473e69adeaa00ca4cfb5bb68e3d282fa" + integrity sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg== + dependencies: + "@types/estree" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + hast-util-whitespace "^3.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^1.0.0" + unist-util-position "^5.0.0" + vfile-message "^4.0.0" + +hast-util-to-parse5@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed" + integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== + dependencies: + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-to-text@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz#57b676931e71bf9cb852453678495b3080bfae3e" + integrity sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A== dependencies: - hast-to-hyperscript "^9.0.0" - property-information "^5.0.0" - web-namespaces "^1.0.0" - xtend "^4.0.0" - zwitch "^1.0.0" + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + hast-util-is-element "^3.0.0" + unist-util-find-after "^5.0.0" -hastscript@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" - integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== dependencies: - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" + "@types/hast" "^3.0.0" -hastscript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" - integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== +hastscript@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.0.tgz#2b76b9aa3cba8bf6d5280869f6f6f7165c230763" + integrity sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw== dependencies: - "@types/hast" "^2.0.0" - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^4.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - history@^4.9.0: version "4.10.1" resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" @@ -4468,132 +7080,133 @@ hoist-non-react-statics@^3.1.0: hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== dependencies: inherits "^2.0.1" obuf "^1.0.0" readable-stream "^2.0.1" wbuf "^1.1.0" -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== +html-escaper@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== dependencies: - camel-case "^4.1.1" - clean-css "^4.2.3" - commander "^4.1.1" + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" he "^1.2.0" - param-case "^3.0.3" + param-case "^3.0.4" relateurl "^0.2.7" - terser "^4.6.3" + terser "^5.10.0" -html-tags@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" - integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== +html-minifier-terser@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942" + integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== + dependencies: + camel-case "^4.1.2" + clean-css "~5.3.2" + commander "^10.0.0" + entities "^4.4.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.15.1" -html-void-elements@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" - integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== +html-tags@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== -html-webpack-plugin@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz#8797327548e3de438e3494e0c6d06f181a7f20d1" - integrity sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ== +html-void-elements@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + +html-webpack-plugin@^5.6.0: + version "5.6.3" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz#a31145f0fee4184d53a794f9513147df1e653685" + integrity sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg== dependencies: - "@types/html-minifier-terser" "^5.0.0" - html-minifier-terser "^5.0.1" - lodash "^4.17.20" - pretty-error "^2.1.1" + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" tapable "^2.0.0" -htmlparser2@^3.10.1, htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== dependencies: depd "~1.1.2" inherits "2.0.3" setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== +http-errors@~2.0.0, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + version "0.5.9" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.9.tgz#b817b3ca0edea6236225000d795378707c169cec" + integrity sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw== -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== +http-proxy-middleware@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" + integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q== dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" -http-proxy@^1.17.0: +http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== @@ -4602,12 +7215,39 @@ http-proxy@^1.17.0: follow-redirects "^1.0.0" requires-port "^1.0.0" +http2-wrapper@^2.1.10: + version "2.2.1" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@0.4.24: +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +hyperdyperid@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" + integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== + +iconv-lite@0.6: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@~0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4619,178 +7259,126 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -immer@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" - integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== +ignore@^5.2.0, ignore@^5.2.4: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -import-fresh@^3.2.1, import-fresh@^3.2.2, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== +image-size@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-2.0.2.tgz#84a7b43704db5736f364bf0d1b029821299b4bdc" + integrity sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w== + +import-fresh@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" +import-lazy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infima@0.2.0-alpha.23: - version "0.2.0-alpha.23" - resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.23.tgz#2c17b473784ae8244fd985f126f9c27a49b24523" - integrity sha512-V0RTjB1otjpH3E2asbydx3gz7ovdSJsuV7r9JTdBggqRilnelTJUcXxLawBQQKsjQi5qPcRTjxnlaV8xyyKhhw== +infima@0.2.0-alpha.45: + version "0.2.0-alpha.45" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.45.tgz#542aab5a249274d81679631b492973dd2c1e7466" + integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw== -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - ini@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inline-style-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" - integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" +inline-style-parser@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22" + integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q== -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +"internmap@1 - 2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" + integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +internmap@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95" + integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: +ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" +ipaddr.js@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.3.0.tgz#71dce70e1398122208996d1c22f2ba46a24b1abc" + integrity sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg== -is-alphabetical@1.0.4, is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== dependencies: - call-bind "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" @@ -4799,146 +7387,83 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== - dependencies: - call-bind "^1.0.2" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-color-stop@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== +is-ci@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" - integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== - -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + ci-info "^3.2.0" -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" + hasown "^2.0.2" -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== -is-docker@^2.0.0: +is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-extendable@^0.1.0, is-extendable@^0.1.1: +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + +is-extendable@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= +is-generator-function@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== dependencies: - is-extglob "^2.1.0" + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" is-installed-globally@^0.4.0: version "0.4.0" @@ -4948,27 +7473,23 @@ is-installed-globally@^0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== +is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" -is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== +is-network-error@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.0.tgz#2ce62cbca444abd506f8a900f39d20b898d37512" + integrity sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw== -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" +is-npm@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261" + integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ== is-number@^7.0.0: version "7.0.0" @@ -4978,178 +7499,201 @@ is-number@^7.0.0: is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - is-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^2.0.0: +is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -is-regex@^1.0.4, is-regex@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.2" + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-resolvable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-root@2.1.0, is-root@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" - integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-retry-allowed@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" + integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-string@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== +is-typed-array@^1.1.3: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: - has-symbols "^1.0.2" + which-typed-array "^1.1.16" is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-whitespace-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" - integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-word-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" - integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-wsl@^2.1.1: +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + +is-yarn-global@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.1.tgz#b312d902b313f81e4eaf98b6361ba2b45cd694bb" + integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== -isarray@1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: +isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + +jayson@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.3.tgz#db9be2e4287d9fef4fc05b5fe367abe792c2eee8" + integrity sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ== + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + JSONStream "^1.3.5" + commander "^2.20.3" + delay "^5.0.0" + es6-promisify "^5.0.0" + eyes "^0.1.8" + isomorphic-ws "^4.0.1" + json-stringify-safe "^5.0.1" + uuid "^8.3.2" + ws "^7.5.10" + +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" -jest-worker@^26.3.0, jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" - supports-color "^7.0.0" + supports-color "^8.0.0" -joi@^17.3.0, joi@^17.4.0: - version "17.4.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.0.tgz#b5c2277c8519e016316e49ababd41a1908d9ef20" - integrity sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg== +jest-worker@^29.4.3: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.0" - "@sideway/formula" "^3.0.0" + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jiti@^1.20.0: + version "1.21.7" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" + integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== + +joi@^17.9.2: + version "17.13.3" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" + integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== + dependencies: + "@hapi/hoek" "^9.3.0" + "@hapi/topo" "^5.1.0" + "@sideway/address" "^4.1.5" + "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" +js-base64@^3.7.5: + version "3.7.7" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" + integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== + +js-sha256@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" + integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== + +js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -5163,34 +7707,29 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.0.0: +js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== -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.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -5200,24 +7739,20 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json3@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" +json5@^2.1.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^6.0.1: version "6.1.0" @@ -5228,36 +7763,36 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== +katex@^0.16.0: + version "0.16.21" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.21.tgz#8f63c659e931b210139691f2cc7bb35166b792a3" + integrity sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A== + dependencies: + commander "^8.3.0" -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= +katex@^0.16.22: + version "0.16.22" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.22.tgz#d2b3d66464b1e6d69e6463b28a86ced5a02c5ccd" + integrity sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg== dependencies: - is-buffer "^1.1.5" + commander "^8.3.0" -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: - is-buffer "^1.1.5" + json-buffer "3.0.1" -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== +khroma@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/khroma/-/khroma-2.1.0.tgz#45f2ce94ce231a437cf5b63c2e886e6eb42bbbb1" + integrity sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" @@ -5269,58 +7804,84 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -klona@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" - integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== +kolorist@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c" + integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== +langium@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/langium/-/langium-3.3.1.tgz#da745a40d5ad8ee565090fed52eaee643be4e591" + integrity sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w== + dependencies: + chevrotain "~11.0.3" + chevrotain-allstar "~0.3.0" + vscode-languageserver "~9.0.1" + vscode-languageserver-textdocument "~1.0.11" + vscode-uri "~3.0.8" + +latest-version@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" + integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== dependencies: - package-json "^6.3.0" + package-json "^8.1.0" + +launch-editor@^2.6.1: + version "2.12.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.12.0.tgz#cc740f4e0263a6b62ead2485f9896e545321f817" + integrity sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg== + dependencies: + picocolors "^1.1.1" + shell-quote "^1.8.3" + +layout-base@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-1.0.2.tgz#1291e296883c322a9dd4c5dd82063721b53e26e2" + integrity sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg== + +layout-base@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-2.0.1.tgz#d0337913586c90f9c2c075292069f5c2da5dd285" + integrity sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg== leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +lilconfig@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== loader-runner@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== -loader-utils@2.0.0, loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" json5 "^2.1.2" -loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== +local-pkg@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-1.1.2.tgz#c03d208787126445303f8161619dc701afa4abb5" + integrity sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A== dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" + mlly "^1.7.4" + pkg-types "^2.3.0" + quansync "^0.2.11" locate-path@^5.0.0: version "5.0.0" @@ -5329,114 +7890,44 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== +locate-path@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== dependencies: - p-locate "^5.0.0" - -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= - -lodash.curry@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" - integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + p-locate "^6.0.0" -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= - -lodash.flatten@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.flow@^3.3.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" - integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= - -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" - integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= +lodash-es@4.17.21, lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.merge@^4.4.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= - -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= - -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" - integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== -lodash.uniq@4.5.0, lodash.uniq@^4.5.0: +lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loglevel@^1.6.8: - version "1.7.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" - integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -5450,164 +7941,822 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== -lowercase-keys@^2.0.0: +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +markdown-extensions@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4" + integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== +markdown-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== dependencies: - yallist "^4.0.0" + repeat-string "^1.0.0" + +markdown-table@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" + integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== + +marked@^16.2.1: + version "16.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-16.3.0.tgz#2f513891f867d6edc4772b4a026db9cc331eb94f" + integrity sha512-K3UxuKu6l6bmA5FUwYho8CfJBlsUWAooKtdGgMcERSpF7gcBUrCGsLH7wDaaNOzwq18JzSUDyoEb/YsrqMac3w== -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +mdast-util-directive@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz#f3656f4aab6ae3767d3c72cfab5e8055572ccba1" + integrity sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-visit-parents "^6.0.0" + +mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df" + integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg== dependencies: - semver "^6.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + "@types/mdast" "^4.0.0" + escape-string-regexp "^5.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= +mdast-util-from-markdown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" + integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + mdast-util-to-string "^4.0.0" + micromark "^4.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-decode-string "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-stringify-position "^4.0.0" + +mdast-util-frontmatter@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz#f5f929eb1eb36c8a7737475c7eb438261f964ee8" + integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== dependencies: - object-visit "^1.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + escape-string-regexp "^5.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + micromark-extension-frontmatter "^2.0.0" -markdown-escapes@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" - integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== +mdast-util-gfm-autolink-literal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" + integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== + dependencies: + "@types/mdast" "^4.0.0" + ccount "^2.0.0" + devlop "^1.0.0" + mdast-util-find-and-replace "^3.0.0" + micromark-util-character "^2.0.0" -mdast-squeeze-paragraphs@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" - integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== +mdast-util-gfm-footnote@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz#7778e9d9ca3df7238cc2bd3fa2b1bf6a65b19403" + integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== dependencies: - unist-util-remove "^2.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" -mdast-util-definitions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" - integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== +mdast-util-gfm-strikethrough@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" + integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== dependencies: - unist-util-visit "^2.0.0" + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" -mdast-util-to-hast@10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" - integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== +mdast-util-gfm-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" + integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - mdast-util-definitions "^4.0.0" - mdurl "^1.0.0" - unist-builder "^2.0.0" - unist-util-generated "^1.0.0" - unist-util-position "^3.0.0" - unist-util-visit "^2.0.0" - -mdast-util-to-string@^2.0.0: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + markdown-table "^3.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-task-list-item@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" - integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" + integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== +mdast-util-gfm@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz#2cdf63b92c2a331406b0fb0db4c077c1b0331751" + integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== + dependencies: + mdast-util-from-markdown "^2.0.0" + mdast-util-gfm-autolink-literal "^2.0.0" + mdast-util-gfm-footnote "^2.0.0" + mdast-util-gfm-strikethrough "^2.0.0" + mdast-util-gfm-table "^2.0.0" + mdast-util-gfm-task-list-item "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-math@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-math/-/mdast-util-math-3.0.0.tgz#8d79dd3baf8ab8ac781f62b8853768190b9a00b0" + integrity sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + longest-streak "^3.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.1.0" + unist-util-remove-position "^5.0.0" + +mdast-util-mdx-expression@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" + integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== +mdast-util-mdx-jsx@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d" + integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-stringify-position "^4.0.0" + vfile-message "^4.0.0" + +mdast-util-mdx@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41" + integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== + dependencies: + mdast-util-from-markdown "^2.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + mdast-util-to-markdown "^2.0.0" -mdurl@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= +mdast-util-mdxjs-esm@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" + integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-phrasing@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== + dependencies: + "@types/mdast" "^4.0.0" + unist-util-is "^6.0.0" + +mdast-util-to-hast@^13.0.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +mdast-util-to-markdown@^2.0.0, mdast-util-to-markdown@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" + integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^4.0.0" + mdast-util-to-string "^4.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-decode-string "^2.0.0" + unist-util-visit "^5.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== + dependencies: + "@types/mdast" "^4.0.0" + +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + +mdx-embed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/mdx-embed/-/mdx-embed-1.1.2.tgz#04468e8dcb3be9fe3e65207e88a83d2f76555a24" + integrity sha512-AAronHC/sh4py+RhJOuX8+9+lyUbJsmCLquXNPCEHZ0llPWjMuwls77hII/lWI2kwBSPZPahrqti8kGTv1pi1w== media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^4.43.1: + version "4.56.10" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.56.10.tgz#eaf2f6556db10f91f1e9ad9f1274fd988c646202" + integrity sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w== + dependencies: + "@jsonjoy.com/fs-core" "4.56.10" + "@jsonjoy.com/fs-fsa" "4.56.10" + "@jsonjoy.com/fs-node" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-to-fsa" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + "@jsonjoy.com/fs-print" "4.56.10" + "@jsonjoy.com/fs-snapshot" "4.56.10" + "@jsonjoy.com/json-pack" "^1.11.0" + "@jsonjoy.com/util" "^1.9.0" + glob-to-regex.js "^1.0.1" + thingies "^2.5.0" + tree-dump "^1.0.3" + tslib "^2.0.0" + +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= +merge-options@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + is-plain-obj "^2.1.0" merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +mermaid@>=11.6.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-11.12.0.tgz#8e394b6214e33cb52f6e8ad9eb1fd94c67ee5638" + integrity sha512-ZudVx73BwrMJfCFmSSJT84y6u5brEoV8DOItdHomNLz32uBjNrelm7mg95X7g+C6UoQH/W6mBLGDEDv73JdxBg== + dependencies: + "@braintree/sanitize-url" "^7.1.1" + "@iconify/utils" "^3.0.1" + "@mermaid-js/parser" "^0.6.2" + "@types/d3" "^7.4.3" + cytoscape "^3.29.3" + cytoscape-cose-bilkent "^4.1.0" + cytoscape-fcose "^2.2.0" + d3 "^7.9.0" + d3-sankey "^0.12.3" + dagre-d3-es "7.0.11" + dayjs "^1.11.18" + dompurify "^3.2.5" + katex "^0.16.22" + khroma "^2.1.0" + lodash-es "^4.17.21" + marked "^16.2.1" + roughjs "^4.6.6" + stylis "^4.3.6" + ts-dedent "^2.2.0" + uuid "^11.1.0" + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -microevent.ts@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" - integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" +micromark-core-commonmark@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz#6a45bbb139e126b3f8b361a10711ccc7c6e15e93" + integrity sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w== + dependencies: + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-factory-destination "^2.0.0" + micromark-factory-label "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-title "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-html-tag-name "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-directive@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz#2eb61985d1995a7c1ff7621676a4f32af29409e8" + integrity sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + parse-entities "^4.0.0" + +micromark-extension-frontmatter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz#651c52ffa5d7a8eeed687c513cd869885882d67a" + integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== + dependencies: + fault "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" -micromatch@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== +micromark-extension-gfm-autolink-literal@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" + integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== dependencies: - braces "^3.0.1" - picomatch "^2.2.3" + micromark-util-character "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-footnote@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" + integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== + dependencies: + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-strikethrough@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" + integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-table@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz#fac70bcbf51fe65f5f44033118d39be8a9b5940b" + integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-tagfilter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" + integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-extension-gfm-task-list-item@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" + integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" + integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== + dependencies: + micromark-extension-gfm-autolink-literal "^2.0.0" + micromark-extension-gfm-footnote "^2.0.0" + micromark-extension-gfm-strikethrough "^2.0.0" + micromark-extension-gfm-table "^2.0.0" + micromark-extension-gfm-tagfilter "^2.0.0" + micromark-extension-gfm-task-list-item "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-math@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz#c42ee3b1dd5a9a03584e83dd8f08e3de510212c1" + integrity sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg== + dependencies: + "@types/katex" "^0.16.0" + devlop "^1.0.0" + katex "^0.16.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-mdx-expression@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz#1407b9ce69916cf5e03a196ad9586889df25302a" + integrity sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + micromark-factory-mdx-expression "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-mdx-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz#5abb83da5ddc8e473a374453e6ea56fbd66b59ad" + integrity sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg== + dependencies: + "@types/acorn" "^4.0.0" + "@types/estree" "^1.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + micromark-factory-mdx-expression "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + vfile-message "^4.0.0" + +micromark-extension-mdx-md@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz#1d252881ea35d74698423ab44917e1f5b197b92d" + integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== + dependencies: + micromark-util-types "^2.0.0" + +micromark-extension-mdxjs-esm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz#de21b2b045fd2059bd00d36746081de38390d54a" + integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-position-from-estree "^2.0.0" + vfile-message "^4.0.0" + +micromark-extension-mdxjs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz#b5a2e0ed449288f3f6f6c544358159557549de18" + integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== + dependencies: + acorn "^8.0.0" + acorn-jsx "^5.0.0" + micromark-extension-mdx-expression "^3.0.0" + micromark-extension-mdx-jsx "^3.0.0" + micromark-extension-mdx-md "^2.0.0" + micromark-extension-mdxjs-esm "^3.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-destination@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-label@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== + dependencies: + devlop "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-mdx-expression@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz#2afaa8ba6d5f63e0cead3e4dee643cad184ca260" + integrity sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-position-from-estree "^2.0.0" + vfile-message "^4.0.0" + +micromark-factory-space@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" + integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-space@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-title@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-character@^1.0.0, micromark-util-character@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" + integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-chunked@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-classify-character@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-combine-extensions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== + dependencies: + micromark-util-chunked "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-decode-numeric-character-reference@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-decode-string@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + +micromark-util-events-to-acorn@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz#4275834f5453c088bd29cd72dfbf80e3327cec07" + integrity sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA== + dependencies: + "@types/acorn" "^4.0.0" + "@types/estree" "^1.0.0" + "@types/unist" "^3.0.0" + devlop "^1.0.0" + estree-util-visit "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + vfile-message "^4.0.0" + +micromark-util-html-tag-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== + +micromark-util-normalize-identifier@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-resolve-all@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-subtokenize@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.4.tgz#50d8ca981373c717f497dc64a0dbfccce6c03ed2" + integrity sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-symbol@^1.0.0, micromark-util-symbol@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" + integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== + +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + +micromark-util-types@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" + integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== + +micromark-util-types@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.1.tgz#a3edfda3022c6c6b55bfb049ef5b75d70af50709" + integrity sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ== + +micromark@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.1.tgz#294c2f12364759e5f9e925a767ae3dfde72223ff" + integrity sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromatch@^4.0.2, micromatch@^4.0.5, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" -mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": - version "1.47.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" - integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +"mime-db@>= 1.43.0 < 2": + version "1.53.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" + integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== + +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== mime-db@~1.33.0: version "1.33.0" @@ -5621,167 +8770,135 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" -mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24: - version "2.1.30" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" - integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime-types@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== dependencies: - mime-db "1.47.0" + mime-db "^1.54.0" mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.3.1, mime@^2.4.4: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -mini-create-react-context@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" - integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== - dependencies: - "@babel/runtime" "^7.12.1" - tiny-warning "^1.0.3" +mimic-response@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" + integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== -mini-css-extract-plugin@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz#b4db2525af2624899ed64a23b0016e0036411893" - integrity sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw== +mini-css-extract-plugin@^2.9.2: + version "2.9.4" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz#cafa1a42f8c71357f49cd1566810d74ff1cb0200" + integrity sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ== dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - webpack-sources "^1.1.0" + schema-utils "^4.0.0" + tapable "^2.2.1" minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== +minimatch@^9.0.3: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" + brace-expansion "^2.0.1" -mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" +minimist@^1.2.0: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mlly@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.4.tgz#3d7295ea2358ec7a271eaa5d000a0f84febe100f" + integrity sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw== + dependencies: + acorn "^8.14.0" + pathe "^2.0.1" + pkg-types "^1.3.0" + ufo "^1.5.4" -module-alias@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0" - integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q== +mrmime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" + integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: - dns-packet "^1.3.1" + dns-packet "^5.2.2" thunky "^1.0.2" -nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== - -nanoid@^3.1.23: - version "3.1.23" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" - integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" +multiformats@^9.6.4: + version "9.9.0" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" + integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +nanoid@^3.3.8: + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -5790,34 +8907,37 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-emoji@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" - integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== +node-emoji@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0" + integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== dependencies: - lodash.toarray "^4.4.0" + "@sindresorhus/is" "^4.6.0" + char-regex "^1.0.2" + emojilib "^2.4.0" + skin-tone "^2.0.0" -node-fetch@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-gyp-build@^4.3.0: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== -node-releases@^1.1.61, node-releases@^1.1.71: - version "1.1.72" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" - integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" +node-releases@^2.0.21: + version "2.0.21" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.21.tgz#f59b018bc0048044be2d4c4c04e4c8b18160894c" + integrity sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -5827,19 +8947,12 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@^4.1.0, normalize-url@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" +normalize-url@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== npm-run-path@^4.0.1: version "4.0.1" @@ -5851,120 +8964,74 @@ npm-run-path@^4.0.1: nprogress@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" - integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== -nth-check@^1.0.2, nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: - boolbase "~1.0.0" + boolbase "^1.0.0" -nth-check@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" - integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== +null-loader@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-4.0.1.tgz#8e63bd3a2dd3c64236a4679428632edd0a6dbc6a" + integrity sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg== dependencies: - boolbase "^1.0.0" + loader-utils "^2.0.0" + schema-utils "^3.0.0" -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" - integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" -object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" - integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== +object.assign@^4.1.0, object.assign@^4.1.4: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= +on-finished@^2.4.1, on-finished@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" +on-headers@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" + integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== onetime@^5.1.2: version "5.1.2" @@ -5973,63 +9040,53 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^7.0.2: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== +open@^10.0.3: + version "10.2.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.2.0.tgz#b9d855be007620e80b6fb05fac98141fe62db73c" + integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + wsl-utils "^0.1.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== dependencies: - p-limit "^2.0.0" + yocto-queue "^1.0.0" p-locate@^4.1.0: version "4.1.0" @@ -6038,17 +9095,12 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: - p-limit "^3.0.2" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + p-limit "^4.0.0" p-map@^4.0.0: version "4.0.0" @@ -6057,29 +9109,56 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: - retry "^0.12.0" + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-retry@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.1.tgz#81828f8dc61c6ef5a800585491572cc9892703af" + integrity sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ== + dependencies: + "@types/retry" "0.12.2" + is-network-error "^1.0.0" + retry "^0.13.1" + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== +package-json@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8" + integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" + got "^12.1.0" + registry-auth-token "^5.0.1" + registry-url "^6.0.0" + semver "^7.3.7" + +package-manager-detector@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-1.3.0.tgz#b42d641c448826e03c2b354272456a771ce453c0" + integrity sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ== + +pako@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" + integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== -param-case@^3.0.3: +param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== @@ -6094,19 +9173,20 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" - integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== +parse-entities@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" + integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-json@^5.0.0: + "@types/unist" "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + +parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -6116,20 +9196,25 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-numeric-range@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz#aa70b00f29624ed13e9f943e9461b306e386b0fa" - integrity sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg== +parse-numeric-range@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== -parse5@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b" + integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g== + dependencies: + domhandler "^5.0.3" + parse5 "^7.0.0" -parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a" + integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== + dependencies: + entities "^4.5.0" parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" @@ -6144,278 +9229,411 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +path-data-parser@0.1.0, path-data-parser@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/path-data-parser/-/path-data-parser-0.1.0.tgz#8f5ba5cc70fc7becb3dcefaea08e2659aba60b8c" + integrity sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w== path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== -path-is-inside@1.0.2, path-is-inside@^1.0.2: +path-is-inside@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" - integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== +path-to-regexp@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" + integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + version "1.9.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz#5dc0753acbf8521ca2e0f137b4578b917b10cf24" + integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== dependencies: isarray "0.0.1" +path-to-regexp@~0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" - integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== +pathe@^2.0.1, pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + +picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" + integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== + dependencies: + find-up "^6.3.0" -pify@^2.0.0: +pkg-types@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" + integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== + dependencies: + confbox "^0.1.8" + mlly "^1.7.4" + pathe "^2.0.1" + +pkg-types@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.3.0.tgz#037f2c19bd5402966ff6810e32706558cb5b5726" + integrity sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig== + dependencies: + confbox "^0.2.2" + exsolve "^1.0.7" + pathe "^2.0.3" -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pkijs@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/pkijs/-/pkijs-3.3.3.tgz#b3f04d7b2eaacb05c81675f882be374e591626ec" + integrity sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw== + dependencies: + "@noble/hashes" "1.4.0" + asn1js "^3.0.6" + bytestreamjs "^2.0.1" + pvtsutils "^1.3.6" + pvutils "^1.1.3" + tslib "^2.8.1" -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" + integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + +points-on-curve@0.2.0, points-on-curve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/points-on-curve/-/points-on-curve-0.2.0.tgz#7dbb98c43791859434284761330fa893cb81b4d1" + integrity sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A== + +points-on-path@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/points-on-path/-/points-on-path-0.2.1.tgz#553202b5424c53bed37135b318858eacff85dd52" + integrity sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g== dependencies: - pinkie "^2.0.0" + path-data-parser "0.1.0" + points-on-curve "0.2.0" -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== +postcss-attribute-case-insensitive@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3" + integrity sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw== dependencies: - find-up "^3.0.0" + postcss-selector-parser "^7.0.0" -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== +postcss-calc@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" + integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== dependencies: - find-up "^4.0.0" + postcss-selector-parser "^6.0.11" + postcss-value-parser "^4.2.0" -pkg-up@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== +postcss-clamp@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" + integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== dependencies: - find-up "^3.0.0" + postcss-value-parser "^4.2.0" -portfinder@^1.0.26: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== +postcss-color-functional-notation@^7.0.11: + version "7.0.11" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.11.tgz#ad6b3d2e71fedd94a932f96260b596c33c53c6a5" + integrity sha512-zfqoUSaHMko/k2PA9xnaydVTHqYv5vphq5Q2AHcG/dCdv/OkHYWcVWfVTBKZ526uzT8L7NghuvSw3C9PxlKnLg== dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-color-hex-alpha@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz#5dd3eba1f8facb4ea306cba6e3f7712e876b0c76" + integrity sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" -postcss-calc@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.0.0.tgz#a05b87aacd132740a5db09462a3612453e5df90a" - integrity sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g== +postcss-color-rebeccapurple@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz#5ada28406ac47e0796dff4056b0a9d5a6ecead98" + integrity sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ== dependencies: - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" -postcss-colormin@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.0.0.tgz#283b8934c8bdbc531e7648aeb0970107f6d06d0e" - integrity sha512-Yt84+5V6CgS/AhK7d7MA58vG8dSZ7+ytlRtWLaQhag3HXOncTfmYpuUOX4cDoXjvLfw1sHRCHMiBjYhc35CymQ== +postcss-colormin@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d" + integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw== dependencies: - browserslist "^4.16.0" - color "^3.1.1" - postcss-value-parser "^4.1.0" + browserslist "^4.23.0" + caniuse-api "^3.0.0" + colord "^2.9.3" + postcss-value-parser "^4.2.0" -postcss-convert-values@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.0.0.tgz#cd77e1d23ebe8fcf508640551eed08e232784cba" - integrity sha512-V5kmYm4xoBAjNs+eHY/6XzXJkkGeg4kwNf2ocfqhLb1WBPEa4oaSmoi1fnVO7Dkblqvus9h+AenDvhCKUCK7uQ== +postcss-convert-values@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz#3498387f8efedb817cbc63901d45bd1ceaa40f48" + integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w== + dependencies: + browserslist "^4.23.0" + postcss-value-parser "^4.2.0" + +postcss-custom-media@^11.0.6: + version "11.0.6" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz#6b450e5bfa209efb736830066682e6567bd04967" + integrity sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.5" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/media-query-list-parser" "^4.0.3" + +postcss-custom-properties@^14.0.6: + version "14.0.6" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz#1af73a650bf115ba052cf915287c9982825fc90e" + integrity sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.5" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-custom-selectors@^8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz#9448ed37a12271d7ab6cb364b6f76a46a4a323e8" + integrity sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.5" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + postcss-selector-parser "^7.0.0" + +postcss-dir-pseudo-class@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz#80d9e842c9ae9d29f6bf5fd3cf9972891d6cc0ca" + integrity sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA== dependencies: - postcss-value-parser "^4.1.0" + postcss-selector-parser "^7.0.0" -postcss-discard-comments@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.0.0.tgz#6c27310e0657c0b9e38a6175ad001b5aa28964bc" - integrity sha512-Umig6Gxs8m20RihiXY6QkePd6mp4FxkA1Dg+f/Kd6uw0gEMfKRjDeQOyFkLibexbJJGHpE3lrN/Q0R9SMrUMbQ== +postcss-discard-comments@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c" + integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw== -postcss-discard-duplicates@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.0.tgz#6a2c4f779e8d20da6781e90730f234f9e650c51c" - integrity sha512-vEJJ+Y3pFUnO1FyCBA6PSisGjHtnphL3V6GsNvkASq/VkP3OX5/No5RYXXLxHa2QegStNzg6HYrYdo71uR4caQ== +postcss-discard-duplicates@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz#d121e893c38dc58a67277f75bb58ba43fce4c3eb" + integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw== -postcss-discard-empty@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.0.0.tgz#0f0a9baee415f5f7be4ae046ba235e98626ba821" - integrity sha512-+wigy099Y1xZxG36WG5L1f2zeH1oicntkJEW4TDIqKKDO2g9XVB3OhoiHTu08rDEjLnbcab4rw0BAccwi2VjiQ== +postcss-discard-empty@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz#ee39c327219bb70473a066f772621f81435a79d9" + integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ== -postcss-discard-overridden@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.0.0.tgz#ac00f695a60001eda52135a11fac87376b8da9ee" - integrity sha512-hybnScTaZM2iEA6kzVQ6Spozy7kVdLw+lGw8hftLlBEzt93uzXoltkYp9u0tI8xbfhxDLTOOzHsHQCkYdmzRUg== +postcss-discard-overridden@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz#4e9f9c62ecd2df46e8fdb44dc17e189776572e2d" + integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ== -postcss-discard-unused@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-5.0.0.tgz#6aad1061a53088d4b4d4363496d85b9b0de34f7e" - integrity sha512-C+bchjnGRoGlSQjACMts/FlpY3LMDEUS5+9rHKxvl/NFUY/5OYWjkA1AEUo9HDWnFB44CFgcm6khLMSIbrjVEQ== +postcss-discard-unused@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz#c1b0e8c032c6054c3fbd22aaddba5b248136f338" + integrity sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA== dependencies: - postcss-selector-parser "^6.0.4" + postcss-selector-parser "^6.0.16" -postcss-loader@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-5.3.0.tgz#1657f869e48d4fdb018a40771c235e499ee26244" - integrity sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw== +postcss-double-position-gradients@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.3.tgz#d8c4b126af89855a3aa6687e5b1a0d5460d4a5b7" + integrity sha512-Dl0Z9sdbMwrPslgOaGBZRGo3TASmmgTcqcUODr82MTYyJk6devXZM6MlQjpQKMJqlLJ6oL1w78U7IXFdPA5+ug== dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.4" - semver "^7.3.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" -postcss-merge-idents@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.0.0.tgz#13b6598912a96e93552c778bbfeaaf2cfaf46b68" - integrity sha512-s8wwhAB/SJDPkcVxj31s2SGzgrO66ktUYjWh6j4qwY67Mzxx3/TkK+m/+v6tU/xyW4TmGd4yuyTXsHaaLC0jLg== +postcss-focus-visible@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz#1f7904904368a2d1180b220595d77b6f8a957868" + integrity sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA== dependencies: - cssnano-utils "^2.0.0" - postcss-value-parser "^4.1.0" + postcss-selector-parser "^7.0.0" -postcss-merge-longhand@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.0.1.tgz#1a008ff72d14cd3e2f3d32accc2ad37948bcabf4" - integrity sha512-H1RO8le5deFGumQzuhJjuL0bIXPRysa+w7xtk5KrHe38oiaSS9ksPXDo24+IOS3SETPhip0J5+1uCOW+ALs3Yw== +postcss-focus-within@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz#ac01ce80d3f2e8b2b3eac4ff84f8e15cd0057bc7" + integrity sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw== dependencies: - css-color-names "^1.0.1" - postcss-value-parser "^4.1.0" - stylehacks "^5.0.0" + postcss-selector-parser "^7.0.0" -postcss-merge-rules@^5.0.0: +postcss-font-variant@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.0.0.tgz#e0d0c0d45c98376f4adb49eb1f1dfe2aebfd7048" - integrity sha512-TfsXbKjNYCGfUPEXGIGPySnMiJbdS+3gcVeV8gwmJP4RajyKZHW8E0FYDL1WmggTj3hi+m+WUCAvqRpX2ut4Kg== + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== + +postcss-gap-properties@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz#d5ff0bdf923c06686499ed2b12e125fe64054fed" + integrity sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw== + +postcss-image-set-function@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz#538e94e16716be47f9df0573b56bbaca86e1da53" + integrity sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-lab-function@^7.0.11: + version "7.0.11" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.11.tgz#455934181eea130f8e649c1f54692e1768046f6a" + integrity sha512-BEA4jId8uQe1gyjZZ6Bunb6ZsH2izks+v25AxQJDBtigXCjTLmCPWECwQpLTtcxH589MVxhs/9TAmRC6lUEmXQ== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/utilities" "^2.0.0" + +postcss-loader@^7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209" + integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A== + dependencies: + cosmiconfig "^8.3.5" + jiti "^1.20.0" + semver "^7.5.4" + +postcss-logical@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-8.1.0.tgz#4092b16b49e3ecda70c4d8945257da403d167228" + integrity sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-merge-idents@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz#7b9c31c7bc823c94bec50f297f04e3c2b838ea65" + integrity sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g== dependencies: - browserslist "^4.16.0" + cssnano-utils "^4.0.2" + postcss-value-parser "^4.2.0" + +postcss-merge-longhand@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz#ba8a8d473617c34a36abbea8dda2b215750a065a" + integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^6.1.1" + +postcss-merge-rules@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz#7aa539dceddab56019469c0edd7d22b64c3dea9d" + integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ== + dependencies: + browserslist "^4.23.0" caniuse-api "^3.0.0" - cssnano-utils "^2.0.0" - postcss-selector-parser "^6.0.4" - vendors "^1.0.3" + cssnano-utils "^4.0.2" + postcss-selector-parser "^6.0.16" -postcss-minify-font-values@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.0.0.tgz#fee5d0fa192fae8757cb744870a0ad02be5f402e" - integrity sha512-zi2JhFaMOcIaNxhndX5uhsqSY1rexKDp23wV8EOmC9XERqzLbHsoRye3aYF716Zm+hkcR4loqKDt8LZlmihwAg== +postcss-minify-font-values@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz#a0e574c02ee3f299be2846369211f3b957ea4c59" + integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg== dependencies: - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" -postcss-minify-gradients@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.0.0.tgz#95dbe61567a45c0cd7ab897d78fb65d5096844ed" - integrity sha512-/jPtNgs6JySMwgsE5dPOq8a2xEopWTW3RyqoB9fLqxgR+mDUNLSi7joKd+N1z7FXWgVkc4l/dEBMXHgNAaUbvg== +postcss-minify-gradients@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz#ca3eb55a7bdb48a1e187a55c6377be918743dbd6" + integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q== dependencies: - cssnano-utils "^2.0.0" - is-color-stop "^1.1.0" - postcss-value-parser "^4.1.0" + colord "^2.9.3" + cssnano-utils "^4.0.2" + postcss-value-parser "^4.2.0" -postcss-minify-params@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.0.0.tgz#12c7f75d69b0b4827fafbd6649970a53784a9c24" - integrity sha512-KvZYIxTPBVKjdd+XgObq9A+Sfv8lMkXTpbZTsjhr42XbfWIeLaTItMlygsDWfjArEc3muUfDaUFgNSeDiJ5jug== +postcss-minify-params@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz#54551dec77b9a45a29c3cb5953bf7325a399ba08" + integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA== dependencies: - alphanum-sort "^1.0.2" - browserslist "^4.16.0" - cssnano-utils "^2.0.0" - postcss-value-parser "^4.1.0" - uniqs "^2.0.0" + browserslist "^4.23.0" + cssnano-utils "^4.0.2" + postcss-value-parser "^4.2.0" -postcss-minify-selectors@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.0.0.tgz#d3e43d97fd0ba83ba0010950fc5acfa420f7caa9" - integrity sha512-cEM0O0eWwFIvmo6nfB0lH0vO/XFwgqIvymODbfPXZ1gTA3i76FKnb7TGUrEpiTxaXH6tgYQ6DcTHwRiRS+YQLQ== +postcss-minify-selectors@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz#197f7d72e6dd19eed47916d575d69dc38b396aff" + integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ== dependencies: - alphanum-sort "^1.0.2" - postcss-selector-parser "^3.1.2" + postcss-selector-parser "^6.0.16" -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== +postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== +postcss-modules-local-by-default@^4.0.5: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz#d150f43837831dae25e4085596e84f6f5d6ec368" + integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== dependencies: icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" + postcss-selector-parser "^7.0.0" postcss-value-parser "^4.1.0" -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== +postcss-modules-scope@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" + integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== dependencies: - postcss-selector-parser "^6.0.4" + postcss-selector-parser "^7.0.0" postcss-modules-values@^4.0.0: version "4.0.0" @@ -6424,314 +9642,419 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-normalize-charset@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.0.0.tgz#59e1fe2094fb2e3371cc5b054cbc39828a41a710" - integrity sha512-pqsCkgo9KmQP0ew6DqSA+uP9YN6EfsW20pQ3JU5JoQge09Z6Too4qU0TNDsTNWuEaP8SWsMp+19l15210MsDZQ== +postcss-nesting@^13.0.2: + version "13.0.2" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.2.tgz#fde0d4df772b76d03b52eccc84372e8d1ca1402e" + integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ== + dependencies: + "@csstools/selector-resolve-nested" "^3.1.0" + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" -postcss-normalize-display-values@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.0.tgz#4ff2d3b3b5146a366de28ec9e24131a1868f1933" - integrity sha512-t4f2d//gH1f7Ns0Jq3eNdnWuPT7TeLuISZ6RQx4j8gpl5XrhkdshdNcOnlrEK48YU6Tcb6jqK7dorME3N4oOGA== +postcss-normalize-charset@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1" + integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ== + +postcss-normalize-display-values@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz#54f02764fed0b288d5363cbb140d6950dbbdd535" + integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg== dependencies: - cssnano-utils "^2.0.0" - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" -postcss-normalize-positions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.0.0.tgz#fe1d9a8122dd385b9c6908bd2008140dea17750d" - integrity sha512-0o6/qU5ky74X/eWYj/tv4iiKCm3YqJnrhmVADpIMNXxzFZywsSQxl8F7cKs8jQEtF3VrJBgcDHTexZy1zgDoYg== +postcss-normalize-positions@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz#e982d284ec878b9b819796266f640852dbbb723a" + integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q== dependencies: - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.0.tgz#e11d88fbf63f89179c6a7391853b2fe7f46e589d" - integrity sha512-KRT14JbrXKcFMYuc4q7lh8lvv8u22wLyMrq+UpHKLtbx2H/LOjvWXYdoDxmNrrrJzomAWL+ViEXr48/IhSUJnQ== +postcss-normalize-repeat-style@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz#f8006942fd0617c73f049dd8b6201c3a3040ecf3" + integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ== dependencies: - cssnano-utils "^2.0.0" - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" -postcss-normalize-string@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.0.0.tgz#2ea08ff4cb8817ce160755e9fdc7e6ef6d495002" - integrity sha512-wSO4pf7GNcDZpmelREWYADF1+XZWrAcbFLQCOqoE92ZwYgaP/RLumkUTaamEzdT2YKRZAH8eLLKGWotU/7FNPw== +postcss-normalize-string@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz#e3cc6ad5c95581acd1fc8774b309dd7c06e5e363" + integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ== dependencies: - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.0.tgz#380eb1c9b179f96efc307c659a8049116f16f381" - integrity sha512-TwPaDX+wl9wO3MUm23lzGmOzGCGKnpk+rSDgzB2INpakD5dgWR3L6bJq1P1LQYzBAvz8fRIj2NWdnZdV4EV98Q== +postcss-normalize-timing-functions@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz#40cb8726cef999de984527cbd9d1db1f3e9062c0" + integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA== dependencies: - cssnano-utils "^2.0.0" - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.0.tgz#aa46a89c86ae51a01cbca13e73c1ed7b0b38807e" - integrity sha512-2CpVoz/67rXU5s9tsPZDxG1YGS9OFHwoY9gsLAzrURrCxTAb0H7Vp87/62LvVPgRWTa5ZmvgmqTp2rL8tlm72A== +postcss-normalize-unicode@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz#aaf8bbd34c306e230777e80f7f12a4b7d27ce06e" + integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg== dependencies: - browserslist "^4.16.0" - postcss-value-parser "^4.1.0" + browserslist "^4.23.0" + postcss-value-parser "^4.2.0" -postcss-normalize-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.0.0.tgz#626a4c7d30007f94466cdf245e7ed9f253f1dbd9" - integrity sha512-ICDaGFBqLgA3dlrCIRuhblLl80D13YtgEV9NJPTYJtgR72vu61KgxAHv+z/lKMs1EbwfSQa3ALjOFLSmXiE34A== +postcss-normalize-url@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz#292792386be51a8de9a454cb7b5c58ae22db0f79" + integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ== dependencies: - is-absolute-url "^3.0.3" - normalize-url "^4.5.0" - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" -postcss-normalize-whitespace@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.0.tgz#1faf147a4f8d3d93a3c75109d120b4eefa00589b" - integrity sha512-KRnxQvQAVkJfaeXSz7JlnD9nBN9sFZF9lrk9452Q2uRoqrRSkinqifF8Iex7wZGei2DZVG/qpmDFDmRvbNAOGA== +postcss-normalize-whitespace@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz#fbb009e6ebd312f8b2efb225c2fcc7cf32b400cd" + integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q== dependencies: - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" -postcss-ordered-values@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.0.0.tgz#a50f224c5f40c566b338b0663655478737dcebee" - integrity sha512-dPr+SRObiHueCIc4IUaG0aOGQmYkuNu50wQvdXTGKy+rzi2mjmPsbeDsheLk5WPb9Zyf2tp8E+I+h40cnivm6g== +postcss-opacity-percentage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz#0b0db5ed5db5670e067044b8030b89c216e1eb0a" + integrity sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ== + +postcss-ordered-values@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5" + integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q== dependencies: - cssnano-utils "^2.0.0" - postcss-value-parser "^4.1.0" + cssnano-utils "^4.0.2" + postcss-value-parser "^4.2.0" -postcss-reduce-idents@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.0.0.tgz#a6fbc9369b955daa756fe578de2ed916c01eed56" - integrity sha512-wDth7wkXAZ91i7GNe+/PJKyC9NOR2n04U0t5nnqlvlkKhMhnRn/8NJLYQRa7ZZHPGOZcOfvugrhblioTTg2X8A== +postcss-overflow-shorthand@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz#f5252b4a2ee16c68cd8a9029edb5370c4a9808af" + integrity sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q== dependencies: - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" -postcss-reduce-initial@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.0.0.tgz#c724e5513b0ae7f3d7bff16f0fc82133fb2f820a" - integrity sha512-wR6pXUaFbSMG1oCKx8pKVA+rnSXCHlca5jMrlmkmif+uig0HNUTV9oGN5kjKsM3mATQAldv2PF9Tbl2vqLFjnA== +postcss-page-break@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== + +postcss-place@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-10.0.0.tgz#ba36ee4786ca401377ced17a39d9050ed772e5a9" + integrity sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-preset-env@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.3.1.tgz#f3799f0f7a7ea384b3c16e073055c231d11bb3bf" + integrity sha512-8ZOOWVwQ0iMpfEYkYo+U6W7fE2dJ/tP6dtEFwPJ66eB5JjnFupfYh+y6zo+vWDO72nGhKOVdxwhTjfzcSNRg4Q== + dependencies: + "@csstools/postcss-alpha-function" "^1.0.0" + "@csstools/postcss-cascade-layers" "^5.0.2" + "@csstools/postcss-color-function" "^4.0.11" + "@csstools/postcss-color-function-display-p3-linear" "^1.0.0" + "@csstools/postcss-color-mix-function" "^3.0.11" + "@csstools/postcss-color-mix-variadic-function-arguments" "^1.0.1" + "@csstools/postcss-content-alt-text" "^2.0.7" + "@csstools/postcss-exponential-functions" "^2.0.9" + "@csstools/postcss-font-format-keywords" "^4.0.0" + "@csstools/postcss-gamut-mapping" "^2.0.11" + "@csstools/postcss-gradients-interpolation-method" "^5.0.11" + "@csstools/postcss-hwb-function" "^4.0.11" + "@csstools/postcss-ic-unit" "^4.0.3" + "@csstools/postcss-initial" "^2.0.1" + "@csstools/postcss-is-pseudo-class" "^5.0.3" + "@csstools/postcss-light-dark-function" "^2.0.10" + "@csstools/postcss-logical-float-and-clear" "^3.0.0" + "@csstools/postcss-logical-overflow" "^2.0.0" + "@csstools/postcss-logical-overscroll-behavior" "^2.0.0" + "@csstools/postcss-logical-resize" "^3.0.0" + "@csstools/postcss-logical-viewport-units" "^3.0.4" + "@csstools/postcss-media-minmax" "^2.0.9" + "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.5" + "@csstools/postcss-nested-calc" "^4.0.0" + "@csstools/postcss-normalize-display-values" "^4.0.0" + "@csstools/postcss-oklab-function" "^4.0.11" + "@csstools/postcss-progressive-custom-properties" "^4.2.0" + "@csstools/postcss-random-function" "^2.0.1" + "@csstools/postcss-relative-color-syntax" "^3.0.11" + "@csstools/postcss-scope-pseudo-class" "^4.0.1" + "@csstools/postcss-sign-functions" "^1.1.4" + "@csstools/postcss-stepped-value-functions" "^4.0.9" + "@csstools/postcss-text-decoration-shorthand" "^4.0.3" + "@csstools/postcss-trigonometric-functions" "^4.0.9" + "@csstools/postcss-unset-value" "^4.0.0" + autoprefixer "^10.4.21" + browserslist "^4.25.1" + css-blank-pseudo "^7.0.1" + css-has-pseudo "^7.0.3" + css-prefers-color-scheme "^10.0.0" + cssdb "^8.4.0" + postcss-attribute-case-insensitive "^7.0.1" + postcss-clamp "^4.1.0" + postcss-color-functional-notation "^7.0.11" + postcss-color-hex-alpha "^10.0.0" + postcss-color-rebeccapurple "^10.0.0" + postcss-custom-media "^11.0.6" + postcss-custom-properties "^14.0.6" + postcss-custom-selectors "^8.0.5" + postcss-dir-pseudo-class "^9.0.1" + postcss-double-position-gradients "^6.0.3" + postcss-focus-visible "^10.0.1" + postcss-focus-within "^9.0.1" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^6.0.0" + postcss-image-set-function "^7.0.0" + postcss-lab-function "^7.0.11" + postcss-logical "^8.1.0" + postcss-nesting "^13.0.2" + postcss-opacity-percentage "^3.0.0" + postcss-overflow-shorthand "^6.0.0" + postcss-page-break "^3.0.4" + postcss-place "^10.0.0" + postcss-pseudo-class-any-link "^10.0.1" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^8.0.1" + +postcss-pseudo-class-any-link@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz#06455431171bf44b84d79ebaeee9fd1c05946544" + integrity sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-reduce-idents@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz#b0d9c84316d2a547714ebab523ec7d13704cd486" + integrity sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA== dependencies: - browserslist "^4.16.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz#4401297d8e35cb6e92c8e9586963e267105586ba" + integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw== + dependencies: + browserslist "^4.23.0" caniuse-api "^3.0.0" -postcss-reduce-transforms@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.0.tgz#5c820f71fbd4eec82b323523642b7b2d1c7d29ef" - integrity sha512-iHdGODW4YzM3WjVecBhPQt6fpJC4lGQZxJKjkBNHpp2b8dzmvj0ogKThqya+IRodQEFzjfXgYeESkf172FH5Lw== +postcss-reduce-transforms@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz#6fa2c586bdc091a7373caeee4be75a0f3e12965d" + integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA== dependencies: - cssnano-utils "^2.0.0" - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.2.0" -postcss-selector-parser@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== +postcss-replace-overflow-wrap@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== + +postcss-selector-not@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz#f2df9c6ac9f95e9fe4416ca41a957eda16130172" + integrity sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA== dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" + postcss-selector-parser "^7.0.0" -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" - integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-sort-media-queries@^3.8.9: - version "3.9.10" - resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-3.9.10.tgz#7ad3b17706cc134e1d27372bcbb989760d2452fa" - integrity sha512-pyCWbMrpQq4WjcYFrcVAvxS/+iHnXK5pxa1SAm1s9U4HZjGYU4gkCHwbHbzJ2ZFiiRYpRNRp85QuFvg6ZyKHxw== +postcss-selector-parser@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz#4d6af97eba65d73bc4d84bcb343e865d7dd16262" + integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== dependencies: - sort-css-media-queries "1.5.4" + cssesc "^3.0.0" + util-deprecate "^1.0.2" -postcss-svgo@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.0.0.tgz#c8d806e573394ab24f1e233cac5be4c199e9f1b2" - integrity sha512-M3/VS4sFI1Yp9g0bPL+xzzCNz5iLdRUztoFaugMit5a8sMfkVzzhwqbsOlD8IFFymCdJDmXmh31waYHWw1K4BA== +postcss-sort-media-queries@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz#4556b3f982ef27d3bac526b99b6c0d3359a6cf97" + integrity sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA== dependencies: - postcss-value-parser "^4.1.0" - svgo "^2.3.0" + sort-css-media-queries "2.2.0" -postcss-unique-selectors@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.0.0.tgz#17856278f6c38d024defc9694d568bb09dd7f771" - integrity sha512-o9l4pF8SRn7aCMTmzb/kNv/kjV7wPZpZ8Nlb1Gq8v/Qvw969K1wanz1RVA0ehHzWe9+wHXaC2DvZlak/gdMJ5w== +postcss-svgo@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa" + integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g== dependencies: - alphanum-sort "^1.0.2" - postcss-selector-parser "^6.0.2" - uniqs "^2.0.0" - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + postcss-value-parser "^4.2.0" + svgo "^3.2.0" -postcss-zindex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.0.0.tgz#ffed3576b5a9f0001a9d78fdc075466e1da1839c" - integrity sha512-thJp90qNZedxzfljsAnu7V35L/Zue/nVvWzPDLKZuqHmwDuy1vd3xkFVYfEa8WZZQaetvHtsi3uwjVD3UJAVeg== +postcss-unique-selectors@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz#983ab308896b4bf3f2baaf2336e14e52c11a2088" + integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg== dependencies: - has "^1.0.3" - uniqs "^2.0.0" + postcss-selector-parser "^6.0.16" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss-zindex@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-6.0.2.tgz#e498304b83a8b165755f53db40e2ea65a99b56e1" + integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== -postcss@^8.2.10, postcss@^8.2.4, postcss@^8.2.9: - version "8.2.15" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.15.tgz#9e66ccf07292817d226fc315cbbf9bc148fbca65" - integrity sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q== +postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33: + version "8.5.2" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.2.tgz#e7b99cb9d2ec3e8dd424002e7c16517cb2b846bd" + integrity sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA== dependencies: - colorette "^1.2.2" - nanoid "^3.1.23" - source-map "^0.6.1" + nanoid "^3.3.8" + picocolors "^1.1.1" + source-map-js "^1.2.1" -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +postcss@^8.5.4: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" -pretty-error@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== dependencies: lodash "^4.17.20" - renderkid "^2.0.4" + renderkid "^3.0.0" pretty-time@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== -prism-react-renderer@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.2.0.tgz#5ad4f90c3e447069426c8a53a0eafde60909cdf4" - integrity sha512-GHqzxLYImx1iKN1jJURcuRoA/0ygCcNhfGw1IT8nPIMzarmKQ3Nc+JcG0gi8JXQzuh0C5ShE4npMIoqNin40hg== +prism-react-renderer@^2.3.0, prism-react-renderer@^2.3.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz#ac63b7f78e56c8f2b5e76e823a976d5ede77e35f" + integrity sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig== + dependencies: + "@types/prismjs" "^1.26.0" + clsx "^2.0.0" -prismjs@^1.23.0: - version "1.23.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.23.0.tgz#d3b3967f7d72440690497652a9d40ff046067f33" - integrity sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA== - optionalDependencies: - clipboard "^2.0.0" +prismjs@^1.29.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" + integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -prompts@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" - integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -prompts@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" - integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.5.0, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -property-information@^5.0.0, property-information@^5.3.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" - integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== - dependencies: - xtend "^4.0.0" - -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== +prop-types@^15.6.2, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= +property-information@^6.0.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== +pupa@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579" + integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== dependencies: - escape-goat "^2.0.0" + escape-goat "^4.0.0" -pure-color@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" - integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= +pvtsutils@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.6.tgz#ec46e34db7422b9e4fdc5490578c1883657d6001" + integrity sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg== + dependencies: + tslib "^2.8.1" -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= +pvutils@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.5.tgz#84b0dea4a5d670249aa9800511804ee0b7c2809c" + integrity sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA== -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qrcode@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.4.tgz#5cb81d86eb57c675febb08cf007fff963405da88" + integrity sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg== + dependencies: + dijkstrajs "^1.0.1" + pngjs "^5.0.0" + yargs "^15.3.1" -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +qs@~6.14.0: + version "6.14.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.1.tgz#a41d85b9d3902f31d27861790506294881871159" + integrity sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ== + dependencies: + side-channel "^1.1.0" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +quansync@^0.2.11: + version "0.2.11" + resolved "https://registry.yarnpkg.com/quansync/-/quansync-0.2.11.tgz#f9c3adda2e1272e4f8cf3f1457b04cbdb4ee692a" + integrity sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA== queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -6742,24 +10065,24 @@ randombytes@^2.1.0: range-parser@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== +raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" -rc@^1.2.8: +rc@1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -6769,95 +10092,48 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-base16-styling@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" - integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= - dependencies: - base16 "^1.0.0" - lodash.curry "^4.0.1" - lodash.flow "^3.3.0" - pure-color "^1.2.0" - -react-dev-utils@^11.0.1: - version "11.0.4" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-11.0.4.tgz#a7ccb60257a1ca2e0efe7a83e38e6700d17aa37a" - integrity sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A== - dependencies: - "@babel/code-frame" "7.10.4" - address "1.1.2" - browserslist "4.14.2" - chalk "2.4.2" - cross-spawn "7.0.3" - detect-port-alt "1.1.6" - escape-string-regexp "2.0.0" - filesize "6.1.0" - find-up "4.1.0" - fork-ts-checker-webpack-plugin "4.1.6" - global-modules "2.0.0" - globby "11.0.1" - gzip-size "5.1.1" - immer "8.0.1" - is-root "2.1.0" - loader-utils "2.0.0" - open "^7.0.2" - pkg-up "3.1.0" - prompts "2.4.0" - react-error-overlay "^6.0.9" - recursive-readdir "2.2.2" - shell-quote "1.7.2" - strip-ansi "6.0.0" - text-table "0.2.0" - -react-dom@^16.8.4: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" - integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" +react-async-hook@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/react-async-hook/-/react-async-hook-4.0.0.tgz#1f0467586654e1f33b7433bd98c300a0c5f9b3d0" + integrity sha512-97lgjFkOcHCTYSrsKBpsXg3iVWM0LnzedB749iP76sb3/8Ouu4nHIkCLEOrQWHVYqrYxjF05NN6GHoXWFkB3Kw== -react-error-overlay@^6.0.9: - version "6.0.9" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" - integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== +react-dom@^19.2.4: + version "19.2.4" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.4.tgz#6fac6bd96f7db477d966c7ec17c1a2b1ad8e6591" + integrity sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ== + dependencies: + scheduler "^0.27.0" -react-fast-compare@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" - integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== +react-fast-compare@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== -react-helmet@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726" - integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== +"react-helmet-async@npm:@slorber/react-helmet-async@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz#11fbc6094605cf60aa04a28c17e0aab894b4ecff" + integrity sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A== dependencies: - object-assign "^4.1.1" + "@babel/runtime" "^7.12.5" + invariant "^2.2.4" prop-types "^15.7.2" - react-fast-compare "^3.1.1" - react-side-effect "^2.1.0" + react-fast-compare "^3.2.0" + shallowequal "^1.1.0" + +react-icons@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.5.0.tgz#8aa25d3543ff84231685d3331164c00299cdfaf2" + integrity sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw== -react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-json-view@^1.21.1: - version "1.21.3" - resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" - integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== - dependencies: - flux "^4.0.1" - react-base16-styling "^0.6.0" - react-lifecycles-compat "^3.0.4" - react-textarea-autosize "^8.3.2" - -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== +react-json-view-lite@^2.3.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/react-json-view-lite/-/react-json-view-lite-2.5.0.tgz#c7ff011c7cc80e9900abc7aa4916c6a5c6d6c1c6" + integrity sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g== react-loadable-ssr-addon-v5-slorber@^1.0.1: version "1.0.1" @@ -6866,12 +10142,12 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" -react-loadable@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/react-loadable/-/react-loadable-5.5.0.tgz#582251679d3da86c32aae2c8e689c59f1196d8c4" - integrity sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg== +"react-loadable@npm:@docusaurus/react-loadable@6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz#de6c7f73c96542bd70786b8e522d535d69069dc4" + integrity sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ== dependencies: - prop-types "^15.5.0" + "@types/react" "*" react-router-config@^5.1.1: version "5.1.1" @@ -6880,62 +10156,48 @@ react-router-config@^5.1.1: dependencies: "@babel/runtime" "^7.1.2" -react-router-dom@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" - integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== +react-router-dom@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== dependencies: - "@babel/runtime" "^7.1.2" + "@babel/runtime" "^7.12.13" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.2.0" + react-router "5.3.4" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.2.0, react-router@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" - integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== +react-router@5.3.4, react-router@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== dependencies: - "@babel/runtime" "^7.1.2" + "@babel/runtime" "^7.12.13" history "^4.9.0" hoist-non-react-statics "^3.1.0" loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" path-to-regexp "^1.7.0" prop-types "^15.6.2" react-is "^16.6.0" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-side-effect@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.1.tgz#66c5701c3e7560ab4822a4ee2742dee215d72eb3" - integrity sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ== - -react-textarea-autosize@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.2.tgz#4f9374d357b0a6f6469956726722549124a1b2db" - integrity sha512-JrMWVgQSaExQByP3ggI1eA8zF4mF0+ddVuX7acUeK2V7bmrpjVOY72vmLz2IXFJSAXoY3D80nEzrn0GWajWK3Q== - dependencies: - "@babel/runtime" "^7.10.2" - use-composed-ref "^1.0.0" - use-latest "^1.0.0" +react-table@^7.8.0: + version "7.8.0" + resolved "https://registry.yarnpkg.com/react-table/-/react-table-7.8.0.tgz#07858c01c1718c09f7f1aed7034fcfd7bda907d2" + integrity sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA== -react@^16.8.4: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" +react@^19.2.4: + version "19.2.4" + resolved "https://registry.yarnpkg.com/react/-/react-19.2.4.tgz#438e57baa19b77cb23aab516cf635cd0579ee09a" + integrity sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ== -readable-stream@^2.0.1, readable-stream@^2.0.2: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -6945,243 +10207,286 @@ readable-stream@^2.0.1, readable-stream@^2.0.2: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== +readable-stream@^3.0.6: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" + picomatch "^2.2.1" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +recma-build-jsx@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz#c02f29e047e103d2fab2054954e1761b8ea253c4" + integrity sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew== dependencies: - picomatch "^2.2.1" + "@types/estree" "^1.0.0" + estree-util-build-jsx "^3.0.0" + vfile "^6.0.0" -reading-time@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.3.0.tgz#d13e74431589a4a9038669f24d5acbc08bbb015d" - integrity sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g== +recma-jsx@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/recma-jsx/-/recma-jsx-1.0.0.tgz#f7bef02e571a49d6ba3efdfda8e2efab48dbe3aa" + integrity sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q== + dependencies: + acorn-jsx "^5.0.0" + estree-util-to-js "^2.0.0" + recma-parse "^1.0.0" + recma-stringify "^1.0.0" + unified "^11.0.0" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= +recma-parse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/recma-parse/-/recma-parse-1.0.0.tgz#c351e161bb0ab47d86b92a98a9d891f9b6814b52" + integrity sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ== dependencies: - resolve "^1.1.6" + "@types/estree" "^1.0.0" + esast-util-from-js "^2.0.0" + unified "^11.0.0" + vfile "^6.0.0" -recursive-readdir@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== +recma-stringify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/recma-stringify/-/recma-stringify-1.0.0.tgz#54632030631e0c7546136ff9ef8fde8e7b44f130" + integrity sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g== dependencies: - minimatch "3.0.4" + "@types/estree" "^1.0.0" + estree-util-to-js "^2.0.0" + unified "^11.0.0" + vfile "^6.0.0" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== +reflect-metadata@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" + integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== + +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== dependencies: - regenerate "^1.4.0" + regenerate "^1.4.2" -regenerate@^1.4.0: +regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" -regexp.prototype.flags@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== +registry-auth-token@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca" + integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + "@pnpm/npm-conf" "^2.1.0" -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== +registry-url@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" + integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" + rc "1.2.8" -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== - dependencies: - rc "^1.2.8" +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== dependencies: - rc "^1.2.8" + jsesc "~3.0.2" -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== +rehype-katex@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/rehype-katex/-/rehype-katex-7.0.1.tgz#832e6d7af2744a228981d1b0fe89483a9e7c93a1" + integrity sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA== + dependencies: + "@types/hast" "^3.0.0" + "@types/katex" "^0.16.0" + hast-util-from-html-isomorphic "^2.0.0" + hast-util-to-text "^4.0.0" + katex "^0.16.0" + unist-util-visit-parents "^6.0.0" + vfile "^6.0.0" + +rehype-raw@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" + integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== dependencies: - jsesc "~0.5.0" + "@types/hast" "^3.0.0" + hast-util-raw "^9.0.0" + vfile "^6.0.0" -rehype-parse@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.2.tgz#aeb3fdd68085f9f796f1d3137ae2b85a98406964" - integrity sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug== +rehype-recma@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rehype-recma/-/rehype-recma-1.0.0.tgz#d68ef6344d05916bd96e25400c6261775411aa76" + integrity sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw== dependencies: - hast-util-from-parse5 "^5.0.0" - parse5 "^5.0.0" - xtend "^4.0.0" + "@types/estree" "^1.0.0" + "@types/hast" "^3.0.0" + hast-util-to-estree "^3.0.0" relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== -remark-admonitions@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/remark-admonitions/-/remark-admonitions-1.2.1.tgz#87caa1a442aa7b4c0cafa04798ed58a342307870" - integrity sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow== +remark-directive@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/remark-directive/-/remark-directive-3.0.1.tgz#689ba332f156cfe1118e849164cc81f157a3ef0a" + integrity sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A== dependencies: - rehype-parse "^6.0.2" - unified "^8.4.2" - unist-util-visit "^2.0.1" + "@types/mdast" "^4.0.0" + mdast-util-directive "^3.0.0" + micromark-extension-directive "^3.0.0" + unified "^11.0.0" -remark-emoji@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" - integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== +remark-emoji@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-4.0.1.tgz#671bfda668047689e26b2078c7356540da299f04" + integrity sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg== dependencies: - emoticon "^3.2.0" - node-emoji "^1.10.0" - unist-util-visit "^2.0.3" + "@types/mdast" "^4.0.2" + emoticon "^4.0.1" + mdast-util-find-and-replace "^3.0.1" + node-emoji "^2.1.0" + unified "^11.0.4" -remark-footnotes@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" - integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== - -remark-mdx@1.6.22: - version "1.6.22" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" - integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== - dependencies: - "@babel/core" "7.12.9" - "@babel/helper-plugin-utils" "7.10.4" - "@babel/plugin-proposal-object-rest-spread" "7.12.1" - "@babel/plugin-syntax-jsx" "7.12.1" - "@mdx-js/util" "1.6.22" - is-alphabetical "1.0.4" - remark-parse "8.0.3" - unified "9.2.0" - -remark-parse@8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" - integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== - dependencies: - ccount "^1.0.0" - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^2.0.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^2.0.0" - vfile-location "^3.0.0" - xtend "^4.0.1" - -remark-squeeze-paragraphs@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" - integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== +remark-frontmatter@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz#b68d61552a421ec412c76f4f66c344627dc187a2" + integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ== dependencies: - mdast-squeeze-paragraphs "^4.0.0" + "@types/mdast" "^4.0.0" + mdast-util-frontmatter "^2.0.0" + micromark-extension-frontmatter "^2.0.0" + unified "^11.0.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= +remark-gfm@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b" + integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-gfm "^3.0.0" + micromark-extension-gfm "^3.0.0" + remark-parse "^11.0.0" + remark-stringify "^11.0.0" + unified "^11.0.0" -renderkid@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" - integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== +remark-math@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/remark-math/-/remark-math-6.0.0.tgz#0acdf74675f1c195fea6efffa78582f7ed7fc0d7" + integrity sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA== dependencies: - css-select "^2.0.2" - dom-converter "^0.2" - htmlparser2 "^3.10.1" - lodash "^4.17.20" - strip-ansi "^3.0.0" + "@types/mdast" "^4.0.0" + mdast-util-math "^3.0.0" + micromark-extension-math "^3.0.0" + unified "^11.0.0" -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== +remark-mdx@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.1.0.tgz#f979be729ecb35318fa48e2135c1169607a78343" + integrity sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA== + dependencies: + mdast-util-mdx "^3.0.0" + micromark-extension-mdxjs "^3.0.0" + +remark-parse@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + micromark-util-types "^2.0.0" + unified "^11.0.0" + +remark-rehype@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.1.tgz#f864dd2947889a11997c0a2667cd6b38f685bca7" + integrity sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + mdast-util-to-hast "^13.0.0" + unified "^11.0.0" + vfile "^6.0.0" + +remark-stringify@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" + integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-to-markdown "^2.0.0" + unified "^11.0.0" + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" -repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.0.0: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== "require-like@>= 0.1.1": version "0.1.2" resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" - integrity sha1-rW8wwTvs15cBDEaK+ndcDAprR/o= + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== require-main-filename@^2.0.0: version "2.0.0" @@ -7191,19 +10496,12 @@ require-main-filename@^2.0.0: requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= +resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== resolve-from@^4.0.0: version "4.0.0" @@ -7215,81 +10513,78 @@ resolve-pathname@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== +resolve@^1.14.2: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= +responselike@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" + integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== dependencies: - lowercase-keys "^1.0.0" + lowercase-keys "^3.0.0" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: +robust-predicates@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rtl-detect@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.3.tgz#42145b9a4f9cf0b94c4542aba90d57f0d18559bf" - integrity sha512-2sMcZO60tL9YDEFe24gqddg3hJ+xSmJFN8IExcQUxeHxQzydQrN6GHPL+yAWgzItXSI7es53hcZC9pJneuZDKA== + resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" + integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== + +roughjs@^4.6.6: + version "4.6.6" + resolved "https://registry.yarnpkg.com/roughjs/-/roughjs-4.6.6.tgz#1059f49a5e0c80dee541a005b20cc322b222158b" + integrity sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ== + dependencies: + hachure-fill "^0.5.2" + path-data-parser "^0.1.0" + points-on-curve "^0.2.0" + points-on-path "^0.2.1" + +rpc-websockets@^9.0.2: + version "9.0.4" + resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-9.0.4.tgz#9d8ee82533b5d1e13d9ded729e3e38d0d8fa083f" + integrity sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ== + dependencies: + "@swc/helpers" "^0.5.11" + "@types/uuid" "^8.3.4" + "@types/ws" "^8.2.2" + buffer "^6.0.3" + eventemitter3 "^5.0.1" + uuid "^8.3.2" + ws "^8.5.0" + optionalDependencies: + bufferutil "^4.0.1" + utf-8-validate "^5.0.2" -rtlcss@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.1.2.tgz#4800d3d03525791a720f676a8ad2c6acf8efdfb2" - integrity sha512-b04YSX37siupPOWUEguEBReWX2w4QT89C0PI9g2JzZycbq7zrgPmTr1DA1pizSWpKRFdCjjnrx/SSvU4fOHmGg== +rtlcss@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.3.0.tgz#f8efd4d5b64f640ec4af8fa25b65bacd9e07cc97" + integrity sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig== dependencies: - chalk "^4.1.0" - find-up "^5.0.0" - mkdirp "^1.0.4" - postcss "^8.2.4" + escalade "^3.1.1" + picocolors "^1.0.0" + postcss "^8.4.21" strip-json-comments "^3.1.1" +run-applescript@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" + integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -7297,75 +10592,86 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^6.6.3: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" +rw@1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +rxjs@7.8.2: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex@^1.1.0: +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: - ret "~0.1.10" + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4, sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" +sax@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" +scheduler@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.27.0.tgz#0c4ef82d67d1e5c1e359e8fc76d3a87f045fe5bd" + integrity sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q== -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" +schema-dts@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/schema-dts/-/schema-dts-1.1.5.tgz#9237725d305bac3469f02b292a035107595dc324" + integrity sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg== schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: - "@types/json-schema" "^7.0.6" + "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^4.0.0, schema-utils@^4.0.1, schema-utils@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.0.tgz#3b669f04f71ff2dfb5aba7ce2d5a9d79b35622c0" + integrity sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +schema-utils@^4.2.0: + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + section-matter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" @@ -7377,93 +10683,81 @@ section-matter@^1.0.0: select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -select@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= - -selfsigned@^1.10.8: - version "1.10.11" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" - integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== +selfsigned@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-5.5.0.tgz#4c9ab7c7c9f35f18fb6a9882c253eb0e6bd6557b" + integrity sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew== dependencies: - node-forge "^0.10.0" + "@peculiar/x509" "^1.14.2" + pkijs "^3.3.3" -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== +semver-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" + integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== dependencies: - semver "^6.3.0" - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver "^7.3.5" -semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.7.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" +semver@^7.3.5, semver@^7.3.7, semver@^7.5.4: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== +send@~0.19.0, send@~0.19.1: + version "0.19.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" + integrity sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg== dependencies: debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" + fresh "~0.5.2" + http-errors "~2.0.1" mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" + ms "2.1.3" + on-finished "~2.4.1" range-parser "~1.2.1" - statuses "~1.5.0" + statuses "~2.0.2" -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" -serve-handler@^6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.3.tgz#1bf8c5ae138712af55c758477533b9117f6435e8" - integrity sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w== +serve-handler@^6.1.6: + version "6.1.6" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.6.tgz#50803c1d3e947cd4a341d617f8209b22bd76cfa1" + integrity sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ== dependencies: bytes "3.0.0" content-disposition "0.5.2" - fast-url-parser "1.1.3" mime-types "2.1.18" - minimatch "3.0.4" + minimatch "3.1.2" path-is-inside "1.0.2" - path-to-regexp "2.2.1" + path-to-regexp "3.3.0" range-parser "1.2.0" serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" batch "0.6.1" @@ -7473,45 +10767,42 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== +serve-static@~1.16.2: + version "1.16.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9" + integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA== dependencies: - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.1" + send "~0.19.1" set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0, setprototypeof@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: version "3.0.1" @@ -7520,12 +10811,10 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== shebang-command@^2.0.0: version "2.0.0" @@ -7534,175 +10823,151 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +shell-quote@^1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" + integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== -shelljs@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" + es-errors "^1.3.0" + object-inspect "^1.13.3" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== dependencies: - is-arrayish "^0.3.1" + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -sirv@^1.0.7: - version "1.0.11" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.11.tgz#81c19a29202048507d6ec0d8ba8910fda52eb5a4" - integrity sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg== +sirv@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" + integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== dependencies: - "@polka/url" "^1.0.0-next.9" - mime "^2.3.1" - totalist "^1.0.0" + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -sitemap@^6.3.6: - version "6.4.0" - resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-6.4.0.tgz#b4bc4edf36de742405a7572bc3e467ba484b852e" - integrity sha512-DoPKNc2/apQZTUnfiOONWctwq7s6dZVspxAZe2VPMNtoqNq7HgXRvlRnbIpKjf+8+piQdWncwcy+YhhTGY5USQ== +sitemap@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.2.tgz#6ce1deb43f6f177c68bc59cf93632f54e3ae6b72" + integrity sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw== dependencies: - "@types/node" "^14.14.28" + "@types/node" "^17.0.5" "@types/sax" "^1.2.1" arg "^5.0.0" sax "^1.2.4" +skin-tone@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237" + integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== + dependencies: + unicode-emoji-modifier-base "^1.0.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -sockjs-client@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" - integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== dependencies: - debug "^3.2.6" - eventsource "^1.0.7" - faye-websocket "^0.11.3" - inherits "^2.0.4" - json3 "^3.3.3" - url-parse "^1.5.1" + dot-case "^3.0.4" + tslib "^2.0.3" -sockjs@^0.3.21: - version "0.3.21" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" - 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@1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz#24182b12002a13d01ba943ddf74f5098d7c244ce" - integrity sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag== - -source-list-map@^2.0.0, source-list-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== +sort-css-media-queries@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz#aa33cf4a08e0225059448b6c40eddbf9f1c8334c" + integrity sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA== -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" +source-map-js@^1.0.1, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== -source-map-support@~0.5.12, source-map-support@~0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +source-map@^0.7.0: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== -space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== spdy-transport@^3.0.0: version "3.0.0" @@ -7727,81 +10992,48 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -state-toggle@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" - integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" +srcset@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" + integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: +"statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -std-env@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-2.3.0.tgz#66d4a4a4d5224242ed8e43f5d65cfa9095216eee" - integrity sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw== - dependencies: - ci-info "^3.0.0" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" +statuses@~2.0.1, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" +std-env@^3.7.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" + integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" string_decoder@^1.1.1: version "1.3.0" @@ -7817,6 +11049,14 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -7826,36 +11066,24 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@6.0.0, strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^2.0.0" + ansi-regex "^5.0.1" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: - ansi-regex "^4.1.0" + ansi-regex "^6.0.1" strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== strip-final-newline@^2.0.0: version "2.0.0" @@ -7870,175 +11098,140 @@ strip-json-comments@^3.1.1: strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -style-to-object@0.3.0, style-to-object@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" - integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== +style-to-object@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.8.tgz#67a29bca47eaa587db18118d68f9d95955e81292" + integrity sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g== dependencies: - inline-style-parser "0.1.1" + inline-style-parser "0.2.4" -stylehacks@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.0.0.tgz#c49b0b2cf9917fe37dc030b96a4c34698b932933" - integrity sha512-QOWm6XivDLb+fqffTZP8jrmPmPITVChl2KCY2R05nsCWwLi3VGhCdVc3IVGNwd1zzTt1jPd67zIKjpQfxzQZeA== +stylehacks@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6" + integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg== dependencies: - browserslist "^4.16.0" - postcss-selector-parser "^6.0.4" + browserslist "^4.23.0" + postcss-selector-parser "^6.0.16" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" +stylis@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.6.tgz#7c7b97191cb4f195f03ecab7d52f7902ed378320" + integrity sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ== -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" +superstruct@^0.15.4: + version "0.15.5" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" + integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== + +superstruct@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-2.0.2.tgz#3f6d32fbdc11c357deff127d591a39b996300c54" + integrity sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A== -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -svg-parser@^2.0.2: +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -svgo@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -svgo@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.3.0.tgz#6b3af81d0cbd1e19c83f5f63cec2cb98c70b5373" - integrity sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q== - dependencies: - "@trysound/sax" "0.1.1" - chalk "^4.1.0" - commander "^7.1.0" - css-select "^3.1.2" - css-tree "^1.1.2" - csso "^4.2.0" - stable "^0.1.8" - -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" - integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== - -terser-webpack-plugin@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz#51d295eb7cc56785a67a372575fdc46e42d5c20c" - integrity sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q== - dependencies: - jest-worker "^26.6.2" - p-limit "^3.1.0" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.7.0" - -terser@^4.6.3: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: +svgo@^3.0.2, svgo@^3.2.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.3.1" + css-what "^6.1.0" + csso "^5.0.5" + picocolors "^1.0.0" + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.3.11, terser-webpack-plugin@^5.3.9: + version "5.3.11" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz#93c21f44ca86634257cac176f884f942b7ba3832" + integrity sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.25" + jest-worker "^27.4.5" + schema-utils "^4.3.0" + serialize-javascript "^6.0.2" + terser "^5.31.1" + +terser@^5.10.0, terser@^5.15.1, terser@^5.31.1: + version "5.39.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.39.0.tgz#0e82033ed57b3ddf1f96708d123cca717d86ca3a" + integrity sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" + source-map-support "~0.5.20" -terser@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" - integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.19" +text-encoding-utf-8@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" + integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== -text-table@0.2.0, text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +thingies@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.5.0.tgz#5f7b882c933b85989f8466b528a6247a6881e04f" + integrity sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw== + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - -tiny-emitter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" - integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== - tiny-invariant@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" - integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== -tiny-warning@^1.0.0, tiny-warning@^1.0.3: +tiny-warning@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== +tinyexec@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.1.tgz#70c31ab7abbb4aea0a24f55d120e5990bfa1e0b1" + integrity sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw== -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" +tinypool@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591" + integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg== to-regex-range@^5.0.1: version "5.0.1" @@ -8047,67 +11240,84 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" +toidentifier@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + +totalist@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -totalist@^1.0.0: +tree-dump@^1.0.3, tree-dump@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4" + integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== -trim-trailing-lines@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" - integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== -trough@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" - integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== +ts-dedent@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" + integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== -ts-essentials@^2.0.3: - version "2.0.12" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" - integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== +ts-log@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.7.tgz#4f4512144898b77c9984e91587076fcb8518688e" + integrity sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg== -tslib@^1.9.0: +tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.6.0, tslib@^2.8.0, tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +tsyringe@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.10.0.tgz#d0c95815d584464214060285eaaadd94aa03299c" + integrity sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw== + dependencies: + tslib "^1.9.3" type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-is@~1.6.17, type-is@~1.6.18: +type-fest@^1.0.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + +type-fest@^2.13.0, type-fest@^2.5.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + +type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -8122,207 +11332,175 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -ua-parser-js@^0.7.18: - version "0.7.28" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31" - integrity sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g== +typescript-collections@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/typescript-collections/-/typescript-collections-1.3.3.tgz#62d50d93c018c094d425eabee649f00ec5cc0fea" + integrity sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ== -unbox-primitive@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" +ufo@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754" + integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== -unherit@^1.0.4: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" - integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== - dependencies: - inherits "^2.0.0" - xtend "^4.0.0" +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== +unicode-emoji-modifier-base@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459" + integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -unified@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" - integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== +unified@^11.0.0, unified@^11.0.3, unified@^11.0.4: + version "11.0.5" + resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== dependencies: - bail "^1.0.0" + "@types/unist" "^3.0.0" + bail "^2.0.0" + devlop "^1.0.0" extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^6.0.0" -unified@^8.4.2: - version "8.4.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" - integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== +unique-string@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" + integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" + crypto-random-string "^4.0.0" -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== +unist-util-find-after@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz#3fccc1b086b56f34c8b798e1ff90b5c54468e896" + integrity sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ== dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= +unist-util-is@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + dependencies: + "@types/unist" "^3.0.0" -unique-string@^2.0.0: +unist-util-position-from-estree@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz#d94da4df596529d1faa3de506202f0c9a23f2200" + integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== dependencies: - crypto-random-string "^2.0.0" - -unist-builder@2.0.3, unist-builder@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" - integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== - -unist-util-generated@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" - integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== - -unist-util-is@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" - integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + "@types/unist" "^3.0.0" -unist-util-position@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" - integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== - -unist-util-remove-position@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" - integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== dependencies: - unist-util-visit "^2.0.0" + "@types/unist" "^3.0.0" -unist-util-remove@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588" - integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== +unist-util-remove-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz#fea68a25658409c9460408bc6b4991b965b52163" + integrity sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== dependencies: - unist-util-is "^4.0.0" + "@types/unist" "^3.0.0" + unist-util-visit "^5.0.0" -unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" - integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== dependencies: - "@types/unist" "^2.0.2" + "@types/unist" "^3.0.0" -unist-util-visit-parents@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" - integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== +unist-util-visit-parents@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" + "@types/unist" "^3.0.0" + unist-util-is "^6.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: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" - integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - unist-util-visit-parents "^3.0.0" + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= +update-browserslist-db@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" + integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg== dependencies: - has-value "^0.3.1" - isobject "^3.0.0" + escalade "^3.2.0" + picocolors "^1.1.1" -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" -update-notifier@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== - dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" +update-notifier@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60" + integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og== + dependencies: + boxen "^7.0.0" + chalk "^5.0.1" + configstore "^6.0.0" + has-yarn "^3.0.0" + import-lazy "^4.0.0" + is-ci "^3.0.1" is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" + is-npm "^6.0.0" + is-yarn-global "^0.4.0" + latest-version "^7.0.0" + pupa "^3.1.0" + semver "^7.3.7" + semver-diff "^4.0.0" + xdg-basedir "^5.1.0" uri-js@^4.2.2: version "4.4.1" @@ -8331,11 +11509,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - url-loader@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" @@ -8345,87 +11518,58 @@ url-loader@^4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use-composed-ref@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.1.0.tgz#9220e4e94a97b7b02d7d27eaeab0b37034438bbc" - integrity sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg== - dependencies: - ts-essentials "^2.0.3" - -use-isomorphic-layout-effect@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225" - integrity sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ== - -use-latest@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.0.tgz#a44f6572b8288e0972ec411bdd0840ada366f232" - integrity sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw== +utf-8-validate@^5.0.2: + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== dependencies: - use-isomorphic-layout-effect "^1.0.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + node-gyp-build "^4.3.0" util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== +util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utility-types@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" - integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + version "3.11.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.11.0.tgz#607c40edb4f258915e901ea7995607fdf319424c" + integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw== utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.3.2, uuid@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" + integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== value-equal@^1.0.1: version "1.0.1" @@ -8435,51 +11579,71 @@ value-equal@^1.0.1: vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vendors@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== +vfile-location@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.3.tgz#cb9eacd20f2b6426d19451e0eafa3d0a846225c3" + integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== + dependencies: + "@types/unist" "^3.0.0" + vfile "^6.0.0" -vfile-location@^3.0.0, vfile-location@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" - integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== +vfile-message@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" + integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" -vfile-message@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" - integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== +vfile@^6.0.0, vfile@^6.0.1: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^2.0.0" + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + +vscode-jsonrpc@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz#f43dfa35fb51e763d17cd94dcca0c9458f35abf9" + integrity sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA== -vfile@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" - integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== +vscode-languageserver-protocol@3.17.5: + version "3.17.5" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz#864a8b8f390835572f4e13bd9f8313d0e3ac4bea" + integrity sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg== dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^2.0.0" - vfile-message "^2.0.0" + vscode-jsonrpc "8.2.0" + vscode-languageserver-types "3.17.5" -wait-on@^5.2.1: - version "5.3.0" - resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.3.0.tgz#584e17d4b3fe7b46ac2b9f8e5e102c005c2776c7" - integrity sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg== +vscode-languageserver-textdocument@~1.0.11: + version "1.0.12" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz#457ee04271ab38998a093c68c2342f53f6e4a631" + integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA== + +vscode-languageserver-types@3.17.5: + version "3.17.5" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz#3273676f0cf2eab40b3f44d085acbb7f08a39d8a" + integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg== + +vscode-languageserver@~9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz#500aef82097eb94df90d008678b0b6b5f474015b" + integrity sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g== dependencies: - axios "^0.21.1" - joi "^17.3.0" - lodash "^4.17.21" - minimist "^1.2.5" - rxjs "^6.6.3" + vscode-languageserver-protocol "3.17.5" -watchpack@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" - integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== +vscode-uri@~3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" + integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== + +watchpack@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" + integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -8491,149 +11655,144 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -web-namespaces@^1.0.0, web-namespaces@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" - integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== +web-namespaces@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== -webpack-bundle-analyzer@^4.4.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.1.tgz#c71fb2eaffc10a4754d7303b224adb2342069da1" - integrity sha512-j5m7WgytCkiVBoOGavzNokBOqxe6Mma13X1asfVYtKWM3wxBiRRu1u1iG0Iol5+qp9WgyhkMmBAcvjEfJ2bdDw== +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-bundle-analyzer@^4.10.2: + version "4.10.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd" + integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw== dependencies: + "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" acorn-walk "^8.0.0" - chalk "^4.1.0" - commander "^6.2.0" + commander "^7.2.0" + debounce "^1.2.1" + escape-string-regexp "^4.0.0" gzip-size "^6.0.0" - lodash "^4.17.20" + html-escaper "^2.0.2" opener "^1.5.2" - sirv "^1.0.7" + picocolors "^1.0.0" + sirv "^2.0.3" ws "^7.3.1" -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== +webpack-dev-middleware@^7.4.2: + version "7.4.5" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz#d4e8720aa29cb03bc158084a94edb4594e3b7ac0" + integrity sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA== dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" + colorette "^2.0.10" + memfs "^4.43.1" + mime-types "^3.0.1" + on-finished "^2.4.1" range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@^3.11.2: - version "3.11.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" - integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" + schema-utils "^4.0.0" + +webpack-dev-server@^5.2.2: + version "5.2.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz#7f36a78be7ac88833fd87757edee31469a9e47d3" + integrity sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ== + dependencies: + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^4.17.25" + "@types/express-serve-static-core" "^4.17.21" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^1.15.5" + "@types/sockjs" "^0.3.36" + "@types/ws" "^8.5.10" + ansi-html-community "^0.0.8" + bonjour-service "^1.2.1" + chokidar "^3.6.0" + colorette "^2.0.10" + compression "^1.8.1" + connect-history-api-fallback "^2.0.0" + express "^4.22.1" + graceful-fs "^4.2.6" + http-proxy-middleware "^2.0.9" + ipaddr.js "^2.1.0" + launch-editor "^2.6.1" + open "^10.0.3" + p-retry "^6.2.0" + schema-utils "^4.2.0" + selfsigned "^5.5.0" serve-index "^1.9.1" - sockjs "^0.3.21" - sockjs-client "^1.5.0" + sockjs "^0.3.24" spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" + webpack-dev-middleware "^7.4.2" + ws "^8.18.0" -webpack-merge@^5.7.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" - integrity sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA== +webpack-merge@^5.9.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== dependencies: clone-deep "^4.0.1" + flat "^5.0.2" wildcard "^2.0.0" -webpack-sources@^1.1.0, webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== +webpack-merge@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" + integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-sources@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" - integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" - -webpack@^5.28.0: - version "5.37.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.37.0.tgz#2ab00f613faf494504eb2beef278dab7493cc39d" - integrity sha512-yvdhgcI6QkQkDe1hINBAJ1UNevqNGTVaCkD2SSJcB8rcrNNl922RI8i2DXUAuNfANoxwsiXXEA4ZPZI9q2oGLA== - dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.47" - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/wasm-edit" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - acorn "^8.2.1" - browserslist "^4.14.5" + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.1" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.88.1, webpack@^5.95.0: + version "5.98.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.98.0.tgz#44ae19a8f2ba97537978246072fb89d10d1fbd17" + integrity sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA== + dependencies: + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.6" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" + acorn "^8.14.0" + browserslist "^4.24.0" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.8.0" - es-module-lexer "^0.4.0" - eslint-scope "^5.1.1" + enhanced-resolve "^5.17.1" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" - json-parse-better-errors "^1.0.2" + graceful-fs "^4.2.11" + 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.0.0" + schema-utils "^4.3.0" tapable "^2.1.1" - terser-webpack-plugin "^5.1.1" - watchpack "^2.0.0" - webpack-sources "^2.1.1" - -webpackbar@^5.0.0-3: - version "5.0.0-3" - resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.0-3.tgz#f4f96c8fb13001b2bb1348252db4c980ab93aaac" - integrity sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g== - dependencies: - ansi-escapes "^4.3.1" - chalk "^4.1.0" - consola "^2.15.0" + terser-webpack-plugin "^5.3.11" + watchpack "^2.4.1" + webpack-sources "^3.2.3" + +webpackbar@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-6.0.1.tgz#5ef57d3bf7ced8b19025477bc7496ea9d502076b" + integrity sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q== + dependencies: + ansi-escapes "^4.3.2" + chalk "^4.1.2" + consola "^3.2.3" figures "^3.2.0" + markdown-table "^2.0.0" pretty-time "^1.1.0" - std-env "^2.2.1" - text-table "^0.2.0" + std-env "^3.7.0" wrap-ansi "^7.0.0" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: @@ -8650,28 +11809,30 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" + tr46 "~0.0.3" + webidl-conversions "^3.0.0" which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== +which-typed-array@^1.1.16, which-typed-array@^1.1.2: + version "1.1.18" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" + integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== dependencies: - isexe "^2.0.0" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + for-each "^0.3.3" + gopd "^1.2.0" + has-tostringtag "^1.0.2" which@^2.0.1: version "2.0.2" @@ -8680,33 +11841,26 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== +widest-line@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== dependencies: - string-width "^4.0.0" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + string-width "^5.0.1" -worker-rpc@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" - integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== - dependencies: - microevent.ts "~0.1.1" +wildcard@^2.0.0, wildcard@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrap-ansi@^7.0.0: version "7.0.0" @@ -8717,12 +11871,16 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" -write-file-atomic@^3.0.0: +write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -8732,22 +11890,32 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - dependencies: - async-limiter "~1.0.0" +ws@^7.3.1, ws@^7.5.10: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== -ws@^7.3.1: - version "7.4.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" - integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== +ws@^8.18.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" + integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +ws@^8.5.0, ws@^8.6.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + +wsl-utils@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.1.0.tgz#8783d4df671d4d50365be2ee4c71917a0557baab" + integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== + dependencies: + is-wsl "^3.1.0" + +xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" + integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== xml-js@^1.6.11: version "1.6.11" @@ -8756,61 +11924,72 @@ xml-js@^1.6.11: dependencies: sax "^1.2.4" -xtend@^4.0.0, xtend@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +xterm-addon-attach@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/xterm-addon-attach/-/xterm-addon-attach-0.8.0.tgz#86e0ed08460efffb7d4bad74a57b600226594def" + integrity sha512-k8N5boSYn6rMJTTNCgFpiSTZ26qnYJf3v/nJJYexNO2sdAHDN3m1ivVQWVZ8CHJKKnZQw1rc44YP2NtgalWHfQ== + +xterm-addon-fit@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.7.0.tgz#b8ade6d96e63b47443862088f6670b49fb752c6a" + integrity sha512-tQgHGoHqRTgeROPnvmtEJywLKoC/V9eNs4bLLz7iyJr1aW/QFzRwfd3MGiJ6odJd9xEfxcW36/xRU47JkD5NKQ== + +xterm@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.2.1.tgz#b3fea7bdb55b9be1d4b31f4cd1091f26ac42afb8" + integrity sha512-cs5Y1fFevgcdoh2hJROMVIWwoBHD80P1fIP79gopLHJIE4kTzzblanoivxTiQ4+92YM9IxS36H1q0MxIJXQBcA== y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.8.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" + integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" get-caller-file "^2.0.1" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^3.0.0" + string-width "^4.2.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.2" + yargs-parser "^18.1.2" -yarn@^1.22.10: - version "1.22.10" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c" - integrity sha512-IanQGI9RRPAN87VGTF7zs2uxkSyQSrSPsju0COgbsKQOOXr5LtcVPeyXWgwVa0ywG3d8dg6kSYKGBuYK021qeA== +yarn@^1.22.21: + version "1.22.22" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.22.tgz#ac34549e6aa8e7ead463a7407e1c7390f61a6610" + integrity sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg== -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yocto-queue@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== -zwitch@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" - integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== +zwitch@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==