diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 31e5d1a5c9..3c76261821 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,100 +1,7 @@ -👋👋 Hello there! Welcome. Please follow the steps below to tell us about your contribution. +👋👋 Hello there! Welcome. Please follow the instruction below. -1. Select **one of the templates below** that fits your contribution -2. Remove this text as well as the other templates -3. Fill in all sections of the template -4. Summon a reviewr using @mentions (optional) -5. Click "Create pull request" +Click the `Preview` tab and select a PR template: ---- - -## Showcase addition - - - -* Name: *Project name* -* Description: *Describe your project* (See [Showcase guidelines](CONTRIBUTING/#showcase)) -* Link: -* Source: -* Tags: - * `analytics` - * `explorer` - * `educational` - * `game` - * `gateway` - * `opensource` - * `pooltool` - * `metadata` - * `nativetoken` - * `nft` - * `wallet` - - - ---- - -## Updating documentation - -#### Issue - -Fixes #issueId - - - -#### Description of the change - - - ---- - -## Bugfix - -Fixes #issueId - - - -#### Description - - - ---- - -## Quickfix - - +- [Add Showcase](?expand=1&template=showcase.md) +- [Add Builder Tool](?expand=1&template=builder-tool.md) +- [Update documentation or Fix a Bug](?expand=1&template=standard-change.md) diff --git a/.github/PULL_REQUEST_TEMPLATE/builder-tool.md b/.github/PULL_REQUEST_TEMPLATE/builder-tool.md new file mode 100644 index 0000000000..60bcf41a2c --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/builder-tool.md @@ -0,0 +1,51 @@ +👋 Hello there! Welcome. Please follow the steps below to tell us about your contribution. + +1. Please complete a Checklist +2. Fill in all sections of the template +3. Click "Create pull request" + +## Checklist + + <-- Please fill the boxes with [x] before submitting a pull request --> + +- [ ] I have read the [How to Contribute](https://developers.cardano.org/docs/portal-contribute/). +- [ ] I have read the [Builder Tool Requirements](https://github.com/cardano-foundation/developer-portal/edit/staging/src/data/builder-tools.js) +- [ ] I have run `yarn build` after adding my changes **without getting any errors**. + +## Builder Tool addition + +<-- Provide information for every bullet in the list below. The tags you select must match the tags in your changes to the builder-tools.js --> + +* Title: *Project name* +* Description: *Describe your project* +* Website: +* Getstarted: +* Tags: + * `chainindex` + * `cli` + * `golang` + * `IDE` + * `java` + * `javascript` + * `marlowe` + * `net` + * `nft` + * `operatortool` + * `oracle` + * `plutus` + * `python` + * `rust` + * `purescript` + * `websocket` + * `http` + * `json` + * `haskell` + * `typescript` + * `wallet` + * `serialization` + * `sdk` + * `redis` + * `sql` + * `lowlevel` + * `testing` + * `hosted` \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE/showcase.md b/.github/PULL_REQUEST_TEMPLATE/showcase.md new file mode 100644 index 0000000000..f70a25b9c7 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/showcase.md @@ -0,0 +1,43 @@ +👋 Hello there! Welcome. Please follow the steps below to tell us about your contribution. + +1. Please complete a Checklist +2. Fill in all sections of the template +3. Click "Create pull request" + +## Checklist + + <-- Please fill the boxes with [x] before submitting a pull request --> + +- [ ] I have read the [How to Contribute](https://developers.cardano.org/docs/portal-contribute/). +- [ ] I have read the [Showcase Requirements](https://github.com/cardano-foundation/developer-portal/edit/staging/src/data/showcases.js) +- [ ] I have run `yarn build` after adding my changes **without getting any errors**. + +## Showcase addition + +<-- Provide information for every bullet in the list below. The tags you select must match the tags in your changes to the showcase.js --> + +* Title: *Project name* +* Description: *Describe your project* +* Website: +* Source: +* Tags: + * `analytics` + * `daotool` + * `dex` + * `ecosystem` + * `explorer` + * `educational` + * `game` + * `gateway` + * `identity` + * `marketplace` + * `minting` + * `opensource` + * `pooltool` + * `metadata` + * `token` + * `nftproject` + * `nftsupport` + * `opensource` + * `wallet` + * `catalyst` \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE/standard-change.md b/.github/PULL_REQUEST_TEMPLATE/standard-change.md new file mode 100644 index 0000000000..6d2c2034f8 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/standard-change.md @@ -0,0 +1,16 @@ +👋 Hello there! Welcome. Please follow the steps below to tell us about your contribution. + +1. Please complete a Checklist +2. Fill in all sections of the template +3. Click "Create pull request" + +## Checklist + + <-- Please fill the boxes with [x] before submitting a pull request --> + +- [ ] I have read the [How to Contribute](https://developers.cardano.org/docs/portal-contribute/). +- [ ] I have run `yarn build` after adding my changes **without getting any errors**. + +## Updating documentation or Bugfix + +<-- Help us understand your motivation by explaining why you decided to make this change. We must be able to understand the purpose of your change from this description. Does this fix a bug? Does it close an issue? If so please mention it. --> \ No newline at end of file diff --git a/.github/actions/yarn-build/Dockerfile b/.github/actions/yarn-build/Dockerfile new file mode 100644 index 0000000000..58573836b9 --- /dev/null +++ b/.github/actions/yarn-build/Dockerfile @@ -0,0 +1,7 @@ +FROM node:lts-alpine + +RUN apk add --no-cache git +RUN npm i -g --force yarn +COPY "entrypoint.sh" "/entrypoint.sh" +ENTRYPOINT ["/entrypoint.sh"] +CMD ["help"] diff --git a/.github/actions/yarn-build/README.md b/.github/actions/yarn-build/README.md new file mode 100644 index 0000000000..00f722e1bf --- /dev/null +++ b/.github/actions/yarn-build/README.md @@ -0,0 +1,28 @@ +# Build Yarn Action + +This github actions provides arbirary actions for the yarn cli command. +The main reason for writing this was that i needed to add a fix for gits +safe directory thing, see entrypoint.sh. + +The code mostly is taken from https://github.com/Borales/actions-yarn +but simplified. Mostly removed the npm auth token stuff, which we wont need +in the near future. And then the original action might have a fix for +the git safedir issue built in so we might want to remove this action +alltogether. + + +To use this action + name: CI + on: [push] + jobs: + build: + name: Test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/yarn-build + with: + cmd: install # will run `yarn install` command + - uses: ./.github/actions/yarn-build + with: + cmd: build # will run `yarn build` command diff --git a/.github/actions/yarn-build/action.yml b/.github/actions/yarn-build/action.yml new file mode 100644 index 0000000000..d4d2b2b8b5 --- /dev/null +++ b/.github/actions/yarn-build/action.yml @@ -0,0 +1,14 @@ +name: "GitHub Action for Yarn" +description: "Wraps the yarn CLI to enable common yarn commands" +branding: + icon: "package" + color: "blue" +inputs: + cmd: + description: "Yarn command" + required: true +runs: + using: "docker" + image: "Dockerfile" + args: + - ${{ inputs.cmd }} diff --git a/.github/actions/yarn-build/entrypoint.sh b/.github/actions/yarn-build/entrypoint.sh new file mode 100755 index 0000000000..1f145ad161 --- /dev/null +++ b/.github/actions/yarn-build/entrypoint.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +# had to add this line due to changes within git +# see: https://github.com/actions/runner/issues/2033 +git config --global --add safe.directory /github/workspace + +sh -c "yarn $*" diff --git a/.github/workflows/yarn-build.yml b/.github/workflows/yarn-build.yml new file mode 100644 index 0000000000..5ddbc8e7b7 --- /dev/null +++ b/.github/workflows/yarn-build.yml @@ -0,0 +1,23 @@ +name: "Yarn Build" + +on: + push: + pull_request: + +jobs: + build: + name: Build documentation + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install + uses: ./.github/actions/yarn-build + with: + cmd: install + + - name: Build + uses: ./.github/actions/yarn-build + with: + cmd: build diff --git a/.gitignore b/.gitignore index 2074bde7ae..6d2531d799 100644 --- a/.gitignore +++ b/.gitignore @@ -38,8 +38,15 @@ yarn-error.log* # intellij .idea -# Auto generated content like CIPs, Rust Library and Token Registry +# Auto generated content like CIPs, Rust Library, Token Registry and Changelog /docs/governance/cardano-improvement-proposals/* /static/img/cip/* /docs/native-tokens/token-registry/* /docs/get-started/cardano-serialization-lib/* +**/changelog + +# (only check in yarn.lock when deliberately establishing a software baseline) +yarn.lock + +# Temporary files that sometimes get checked in by accident +.yarn/** diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..b941c9800a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,1254 @@ +## What's Changed +## 2021.8.0 (2021-02-28) + +All of the merged PRs in February + +#### PRs: 6 + + +- Cleaned up. by ([@katomm](https://github.com/katomm)) in [#1](https://github.com/cardano-foundation/developer-portal/pull/1) +- Design by ([@katomm](https://github.com/katomm)) in [#2](https://github.com/cardano-foundation/developer-portal/pull/2) +- Varia by ([@katomm](https://github.com/katomm)) in [#3](https://github.com/cardano-foundation/developer-portal/pull/3) +- Updated search config. by ([@katomm](https://github.com/katomm)) in [#4](https://github.com/cardano-foundation/developer-portal/pull/4) +- Content by ([@katomm](https://github.com/katomm)) in [#5](https://github.com/cardano-foundation/developer-portal/pull/5) +- Content by ([@katomm](https://github.com/katomm)) in [#6](https://github.com/cardano-foundation/developer-portal/pull/6) + +#### Contributors: 1 + +- katomm ([@katomm](https://github.com/katomm)) + +## 2021.12.0 (2021-03-31) + +All of the merged PRs in March + +#### PRs: 13 + + +- Designpatch by ([@katomm](https://github.com/katomm)) in [#7](https://github.com/cardano-foundation/developer-portal/pull/7) +- Design by ([@katomm](https://github.com/katomm)) in [#8](https://github.com/cardano-foundation/developer-portal/pull/8) +- Update design and add few content examples by ([@katomm](https://github.com/katomm)) in [#9](https://github.com/cardano-foundation/developer-portal/pull/9) +- Tools by ([@katomm](https://github.com/katomm)) in [#10](https://github.com/cardano-foundation/developer-portal/pull/10) +- New focus by ([@katomm](https://github.com/katomm)) in [#11](https://github.com/cardano-foundation/developer-portal/pull/11) +- Fix broken links by ([@katomm](https://github.com/katomm)) in [#12](https://github.com/cardano-foundation/developer-portal/pull/12) +- Refactor by ([@katomm](https://github.com/katomm)) in [#13](https://github.com/cardano-foundation/developer-portal/pull/13) +- Add Cardano token registry and Create metadata transaction articles by ([@Nazeim](https://github.com/Nazeim)) in [#14](https://github.com/cardano-foundation/developer-portal/pull/14) +- Spo by ([@katomm](https://github.com/katomm)) in [#15](https://github.com/cardano-foundation/developer-portal/pull/15) +- Spo2 by ([@katomm](https://github.com/katomm)) in [#16](https://github.com/cardano-foundation/developer-portal/pull/16) +- Overview articles by ([@Nazeim](https://github.com/Nazeim)) in [#17](https://github.com/cardano-foundation/developer-portal/pull/17) +- Design by ([@katomm](https://github.com/katomm)) in [#18](https://github.com/cardano-foundation/developer-portal/pull/18) +- Design by ([@katomm](https://github.com/katomm)) in [#19](https://github.com/cardano-foundation/developer-portal/pull/19) + +#### Contributors: 2 + +- katomm ([@katomm](https://github.com/katomm)) +- Nazeim ([@Nazeim](https://github.com/Nazeim)) + +## 2021.16.0 (2021-04-30) + +All of the merged PRs in April + +#### PRs: 21 + + +- Content by ([@katomm](https://github.com/katomm)) in [#20](https://github.com/cardano-foundation/developer-portal/pull/20) +- Create LICENSE by ([@katomm](https://github.com/katomm)) in [#21](https://github.com/cardano-foundation/developer-portal/pull/21) +- Update README and "how to contribute"-article by ([@katomm](https://github.com/katomm)) in [#22](https://github.com/cardano-foundation/developer-portal/pull/22) +- Bring the main branch up to date by ([@katomm](https://github.com/katomm)) in [#23](https://github.com/cardano-foundation/developer-portal/pull/23) +- Migrate stake pool course content by ([@Nazeim](https://github.com/Nazeim)) in [#24](https://github.com/cardano-foundation/developer-portal/pull/24) +- Fixes, contributors page and style guide by ([@katomm](https://github.com/katomm)) in [#25](https://github.com/cardano-foundation/developer-portal/pull/25) +- Fixes by ([@katomm](https://github.com/katomm)) in [#26](https://github.com/cardano-foundation/developer-portal/pull/26) +- Design by ([@katomm](https://github.com/katomm)) in [#27](https://github.com/cardano-foundation/developer-portal/pull/27) +- Prepare SPO and project funding categories by ([@katomm](https://github.com/katomm)) in [#28](https://github.com/cardano-foundation/developer-portal/pull/28) +- Fixes by ([@katomm](https://github.com/katomm)) in [#29](https://github.com/cardano-foundation/developer-portal/pull/29) +- Fix notes style by ([@Nazeim](https://github.com/Nazeim)) in [#30](https://github.com/cardano-foundation/developer-portal/pull/30) +- Update note boxes by ([@katomm](https://github.com/katomm)) in [#31](https://github.com/cardano-foundation/developer-portal/pull/31) +- Add getting started with Blockfrost by ([@katomm](https://github.com/katomm)) in [#32](https://github.com/cardano-foundation/developer-portal/pull/32) +- Spotlight -> Dev Blog to use it more broadly. by ([@katomm](https://github.com/katomm)) in [#33](https://github.com/cardano-foundation/developer-portal/pull/33) +- Stake pool course by ([@katomm](https://github.com/katomm)) in [#34](https://github.com/cardano-foundation/developer-portal/pull/34) +- Design patch by ([@katomm](https://github.com/katomm)) in [#36](https://github.com/cardano-foundation/developer-portal/pull/36) +- changed SpaceBudz description; added cardanocli-js by ([@alessandrokonrad](https://github.com/alessandrokonrad)) in [#37](https://github.com/cardano-foundation/developer-portal/pull/37) +- Cardanocli wrapper by ([@katomm](https://github.com/katomm)) in [#38](https://github.com/cardano-foundation/developer-portal/pull/38) +- Add Funding Types by ([@Nazeim](https://github.com/Nazeim)) in [#39](https://github.com/cardano-foundation/developer-portal/pull/39) +- Style guide revised by ([@katomm](https://github.com/katomm)) in [#40](https://github.com/cardano-foundation/developer-portal/pull/40) +- New line markdown fix by ([@Scitz0](https://github.com/Scitz0)) in [#44](https://github.com/cardano-foundation/developer-portal/pull/44) + +#### Contributors: 4 + +- katomm ([@katomm](https://github.com/katomm)) +- Nazeim ([@Nazeim](https://github.com/Nazeim)) +- alessandrokonrad ([@alessandrokonrad](https://github.com/alessandrokonrad)) +- Scitz0 ([@Scitz0](https://github.com/Scitz0)) + +## 2021.21.0 (2021-05-31) + +All of the merged PRs in May + +#### PRs: 15 + + +- Update Project Funding and Cardano Token Registry Sections by ([@Nazeim](https://github.com/Nazeim)) in [#46](https://github.com/cardano-foundation/developer-portal/pull/46) +- Code style by ([@katomm](https://github.com/katomm)) in [#47](https://github.com/cardano-foundation/developer-portal/pull/47) +- Introduce category/tag feature in showcase section by ([@katomm](https://github.com/katomm)) in [#48](https://github.com/cardano-foundation/developer-portal/pull/48) +- Add showcase projects and categories by ([@katomm](https://github.com/katomm)) in [#50](https://github.com/cardano-foundation/developer-portal/pull/50) +- Blockfrost by ([@katomm](https://github.com/katomm)) in [#51](https://github.com/cardano-foundation/developer-portal/pull/51) +- Update showcase projects by ([@katomm](https://github.com/katomm)) in [#52](https://github.com/cardano-foundation/developer-portal/pull/52) +- Several small content things by ([@katomm](https://github.com/katomm)) in [#53](https://github.com/cardano-foundation/developer-portal/pull/53) +- Initial approach for Gimbalabs' Dandelion APIs view by ([@rcmorano](https://github.com/rcmorano)) in [#54](https://github.com/cardano-foundation/developer-portal/pull/54) +- Cardano node build guide for Linux and MacOS (Windows still in-progress) by ([@Mercurial](https://github.com/Mercurial)) in [#55](https://github.com/cardano-foundation/developer-portal/pull/55) +- Hero Banner css fix *Temporary- by ([@Mercurial](https://github.com/Mercurial)) in [#56](https://github.com/cardano-foundation/developer-portal/pull/56) +- Finalized *Running cardano-node Guide- by ([@Mercurial](https://github.com/Mercurial)) in [#57](https://github.com/cardano-foundation/developer-portal/pull/57) +- Add 'Educational' category to showcase section by ([@rcmorano](https://github.com/rcmorano)) in [#58](https://github.com/cardano-foundation/developer-portal/pull/58) +- Add Gimbalabs' Playground reference to Educational category by ([@rcmorano](https://github.com/rcmorano)) in [#59](https://github.com/cardano-foundation/developer-portal/pull/59) +- Minor fixes by ([@katomm](https://github.com/katomm)) in [#60](https://github.com/cardano-foundation/developer-portal/pull/60) +- Stake pool course: intro + classic utx0 model by ([@ubinatus](https://github.com/ubinatus)) in [#61](https://github.com/cardano-foundation/developer-portal/pull/61) + +#### Contributors: 5 + +- Nazeim ([@Nazeim](https://github.com/Nazeim)) +- katomm ([@katomm](https://github.com/katomm)) +- rcmorano ([@rcmorano](https://github.com/rcmorano)) +- Mercurial ([@Mercurial](https://github.com/Mercurial)) +- ubinatus ([@ubinatus](https://github.com/ubinatus)) + +## 2021.25.0 (2021-06-30) + +All of the merged PRs in June + +#### PRs: 24 + + +- Marketing a stake pool by ([@Nazeim](https://github.com/Nazeim)) in [#63](https://github.com/cardano-foundation/developer-portal/pull/63) +- Fix for Ogmios new GitHub organization by ([@katomm](https://github.com/katomm)) in [#64](https://github.com/cardano-foundation/developer-portal/pull/64) +- Add new Cardano branded assets by ([@katomm](https://github.com/katomm)) in [#65](https://github.com/cardano-foundation/developer-portal/pull/65) +- Cardano Wallets Guide **it is still in-complete due to the nature of the TestNet Faucet*- by ([@Mercurial](https://github.com/Mercurial)) in [#66](https://github.com/cardano-foundation/developer-portal/pull/66) +- Updated assets by ([@katomm](https://github.com/katomm)) in [#67](https://github.com/cardano-foundation/developer-portal/pull/67) +- Provide a basic skeleton for the get started category by ([@katomm](https://github.com/katomm)) in [#68](https://github.com/cardano-foundation/developer-portal/pull/68) +- Update native token section by ([@katomm](https://github.com/katomm)) in [#69](https://github.com/cardano-foundation/developer-portal/pull/69) +- Create category title images for overview pages by ([@katomm](https://github.com/katomm)) in [#70](https://github.com/cardano-foundation/developer-portal/pull/70) +- Finalized `Listening for Payments` article by ([@Mercurial](https://github.com/Mercurial)) in [#71](https://github.com/cardano-foundation/developer-portal/pull/71) +- Misc content by ([@katomm](https://github.com/katomm)) in [#72](https://github.com/cardano-foundation/developer-portal/pull/72) +- Update funding and contributors by ([@katomm](https://github.com/katomm)) in [#73](https://github.com/cardano-foundation/developer-portal/pull/73) +- Fix structure and broken links in the marketing SPOs article by ([@Nazeim](https://github.com/Nazeim)) in [#74](https://github.com/cardano-foundation/developer-portal/pull/74) +- Stake pool operation update by ([@katomm](https://github.com/katomm)) in [#76](https://github.com/cardano-foundation/developer-portal/pull/76) +- Finalized Receive Payments with Cardano-wallet article by ([@Mercurial](https://github.com/Mercurial)) in [#77](https://github.com/cardano-foundation/developer-portal/pull/77) +- NFTs and minting native assets section finished by ([@ruttkowa](https://github.com/ruttkowa)) in [#78](https://github.com/cardano-foundation/developer-portal/pull/78) +- Text review by ([@katomm](https://github.com/katomm)) in [#79](https://github.com/cardano-foundation/developer-portal/pull/79) +- Text review by ([@katomm](https://github.com/katomm)) in [#80](https://github.com/cardano-foundation/developer-portal/pull/80) +- Bring main branch up to date by ([@katomm](https://github.com/katomm)) in [#81](https://github.com/cardano-foundation/developer-portal/pull/81) +- Varia by ([@katomm](https://github.com/katomm)) in [#82](https://github.com/cardano-foundation/developer-portal/pull/82) +- Upgrade Docusaurus to 2.0.0-beta.2 by ([@katomm](https://github.com/katomm)) in [#83](https://github.com/cardano-foundation/developer-portal/pull/83) +- Revert "Upgrade Docusaurus to 2.0.0-beta.2" by ([@katomm](https://github.com/katomm)) in [#84](https://github.com/cardano-foundation/developer-portal/pull/84) +- Rust lib, menu structure, minor fixes by ([@katomm](https://github.com/katomm)) in [#85](https://github.com/cardano-foundation/developer-portal/pull/85) +- Add .netlify.toml file with redirect example by ([@katomm](https://github.com/katomm)) in [#86](https://github.com/cardano-foundation/developer-portal/pull/86) +- Simplify the redirects. by ([@katomm](https://github.com/katomm)) in [#87](https://github.com/cardano-foundation/developer-portal/pull/87) + +#### Contributors: 4 + +- Nazeim ([@Nazeim](https://github.com/Nazeim)) +- katomm ([@katomm](https://github.com/katomm)) +- Mercurial ([@Mercurial](https://github.com/Mercurial)) +- ruttkowa ([@ruttkowa](https://github.com/ruttkowa)) +## 2021.29.0 (2021-07-31) + +All of the merged PRs in July + +#### PRs: 80 + + +- Revise Cardano Token Registry by ([@katomm](https://github.com/katomm)) in [#88](https://github.com/cardano-foundation/developer-portal/pull/88) +- Hero Banner Updates and Docusarus Upgrade to Beta 3 by ([@Mercurial](https://github.com/Mercurial)) in [#89](https://github.com/cardano-foundation/developer-portal/pull/89) +- Reduce the developer community links in the footer with its own page by ([@katomm](https://github.com/katomm)) in [#90](https://github.com/cardano-foundation/developer-portal/pull/90) +- Revise funding category by ([@katomm](https://github.com/katomm)) in [#91](https://github.com/cardano-foundation/developer-portal/pull/91) +- Design and structure by ([@katomm](https://github.com/katomm)) in [#92](https://github.com/cardano-foundation/developer-portal/pull/92) +- Content fixes by ([@katomm](https://github.com/katomm)) in [#93](https://github.com/cardano-foundation/developer-portal/pull/93) +- Add technical concepts by ([@katomm](https://github.com/katomm)) in [#94](https://github.com/cardano-foundation/developer-portal/pull/94) +- Content update by ([@katomm](https://github.com/katomm)) in [#95](https://github.com/cardano-foundation/developer-portal/pull/95) +- Move playgrounds into signpost article to be consistent by ([@katomm](https://github.com/katomm)) in [#96](https://github.com/cardano-foundation/developer-portal/pull/96) +- Finalized Articles for Transaction Metadata Category by ([@Mercurial](https://github.com/Mercurial)) in [#97](https://github.com/cardano-foundation/developer-portal/pull/97) +- Added all the links needed for any reference of the Testnet Faucet by ([@Mercurial](https://github.com/Mercurial)) in [#98](https://github.com/cardano-foundation/developer-portal/pull/98) +- Prepare for launch by ([@katomm](https://github.com/katomm)) in [#99](https://github.com/cardano-foundation/developer-portal/pull/99) +- Adjustments by ([@Mercurial](https://github.com/Mercurial)) in [#100](https://github.com/cardano-foundation/developer-portal/pull/100) +- Prepare for launch by ([@katomm](https://github.com/katomm)) in [#101](https://github.com/cardano-foundation/developer-portal/pull/101) +- Prepare for launch by ([@katomm](https://github.com/katomm)) in [#102](https://github.com/cardano-foundation/developer-portal/pull/102) +- Add testnets and devnets by ([@katomm](https://github.com/katomm)) in [#103](https://github.com/cardano-foundation/developer-portal/pull/103) +- Text review by ([@katomm](https://github.com/katomm)) in [#104](https://github.com/cardano-foundation/developer-portal/pull/104) +- Minor tweaks and bring the showcase projects to 50 by ([@katomm](https://github.com/katomm)) in [#105](https://github.com/cardano-foundation/developer-portal/pull/105) +- Prepare main branch for launch by ([@katomm](https://github.com/katomm)) in [#106](https://github.com/cardano-foundation/developer-portal/pull/106) +- Replace staging links with production links by ([@katomm](https://github.com/katomm)) in [#107](https://github.com/cardano-foundation/developer-portal/pull/107) +- Replace staging links with production links by ([@katomm](https://github.com/katomm)) in [#108](https://github.com/cardano-foundation/developer-portal/pull/108) +- Cache fix redirect by ([@katomm](https://github.com/katomm)) in [#109](https://github.com/cardano-foundation/developer-portal/pull/109) +- Cache fix redirect by ([@katomm](https://github.com/katomm)) in [#110](https://github.com/cardano-foundation/developer-portal/pull/110) +- temporary fix for the cache by ([@Mercurial](https://github.com/Mercurial)) in [#111](https://github.com/cardano-foundation/developer-portal/pull/111) +- Temporary fix for the cache by ([@katomm](https://github.com/katomm)) in [#112](https://github.com/cardano-foundation/developer-portal/pull/112) +- Added Google Tag Manager plugin by ([@Mercurial](https://github.com/Mercurial)) in [#113](https://github.com/cardano-foundation/developer-portal/pull/113) +- Google Tag Manager plugin deployment by ([@Mercurial](https://github.com/Mercurial)) in [#114](https://github.com/cardano-foundation/developer-portal/pull/114) +- Add DEADPXLZ to the the Cardano Developer portal project showcase page by ([@DEADPXLZ](https://github.com/DEADPXLZ)) in [#117](https://github.com/cardano-foundation/developer-portal/pull/117) +- chore(builder-tools): typo by ([@mmahut](https://github.com/mmahut)) in [#118](https://github.com/cardano-foundation/developer-portal/pull/118) +- Crypto-specific Haskell learning resource and typos by ([@tweakch](https://github.com/tweakch)) in [#119](https://github.com/cardano-foundation/developer-portal/pull/119) +- Update cardano-components.md by ([@lambdacc](https://github.com/lambdacc)) in [#122](https://github.com/cardano-foundation/developer-portal/pull/122) +- add Kryptoids NFT project to the project showcase by ([@kryptoids](https://github.com/kryptoids)) in [#123](https://github.com/cardano-foundation/developer-portal/pull/123) +- Add two projects and minor fixes by ([@katomm](https://github.com/katomm)) in [#124](https://github.com/cardano-foundation/developer-portal/pull/124) +- added nami wallet by ([@alessandrokonrad](https://github.com/alessandrokonrad)) in [#126](https://github.com/cardano-foundation/developer-portal/pull/126) +- fix: wrong youtube link on transaction fee by ([@ygorgasparin](https://github.com/ygorgasparin)) in [#131](https://github.com/cardano-foundation/developer-portal/pull/131) +- Update showcases.js by ([@nemo83](https://github.com/nemo83)) in [#132](https://github.com/cardano-foundation/developer-portal/pull/132) +- Revise "add your project"-guidelines by ([@katomm](https://github.com/katomm)) in [#133](https://github.com/cardano-foundation/developer-portal/pull/133) +- Add devblog post and make the previews a bit more appealing by ([@katomm](https://github.com/katomm)) in [#136](https://github.com/cardano-foundation/developer-portal/pull/136) +- Fix typos and Project Catalyst by ([@katomm](https://github.com/katomm)) in [#138](https://github.com/cardano-foundation/developer-portal/pull/138) +- Update main with project guidelines, new projects, minor fixes and blog post by ([@katomm](https://github.com/katomm)) in [#139](https://github.com/cardano-foundation/developer-portal/pull/139) +- fix markdown warnings in styleguide by ([@tweakch](https://github.com/tweakch)) in [#143](https://github.com/cardano-foundation/developer-portal/pull/143) +- Add SPOCRA to the list of Stake pool resources by ([@jadjei](https://github.com/jadjei)) in [#142](https://github.com/cardano-foundation/developer-portal/pull/142) +- Request to Add Metro Mermaids Mint Tool by ([@frog357](https://github.com/frog357)) in [#141](https://github.com/cardano-foundation/developer-portal/pull/141) +- Added CardanoWaves & CardanoAlerts by ([@bitm4ster](https://github.com/bitm4ster)) in [#144](https://github.com/cardano-foundation/developer-portal/pull/144) +- Add new projects and various improvements by ([@katomm](https://github.com/katomm)) in [#153](https://github.com/cardano-foundation/developer-portal/pull/153) +- Add guide multi-witness transactions by ([@tweakch](https://github.com/tweakch)) in [#154](https://github.com/cardano-foundation/developer-portal/pull/154) +- Update contributors and showcase guidelines by ([@katomm](https://github.com/katomm)) in [#155](https://github.com/cardano-foundation/developer-portal/pull/155) +- Add multi-witness transactions guide, update contributors, clarify guidelines by ([@katomm](https://github.com/katomm)) in [#156](https://github.com/cardano-foundation/developer-portal/pull/156) +- Add one project into showcase by ([@atrhacker](https://github.com/atrhacker)) in [#157](https://github.com/cardano-foundation/developer-portal/pull/157) +- Add Stellar Hood by ([@TurboEgon](https://github.com/TurboEgon)) in [#129](https://github.com/cardano-foundation/developer-portal/pull/129) +- Add two projects to showcase by ([@katomm](https://github.com/katomm)) in [#166](https://github.com/cardano-foundation/developer-portal/pull/166) +- Content updates by ([@katomm](https://github.com/katomm)) in [#169](https://github.com/cardano-foundation/developer-portal/pull/169) +- Adds missing periods to `portal-contribute.md` by ([@will0101](https://github.com/will0101)) in [#171](https://github.com/cardano-foundation/developer-portal/pull/171) +- Content update by ([@katomm](https://github.com/katomm)) in [#173](https://github.com/cardano-foundation/developer-portal/pull/173) +- Improve integrate cardano guides by ([@tweakch](https://github.com/tweakch)) in [#174](https://github.com/cardano-foundation/developer-portal/pull/174) +- Showcase/ShowcaseCard: refactors the component by ([@will0101](https://github.com/will0101)) in [#172](https://github.com/cardano-foundation/developer-portal/pull/172) +- Added the .NET Wallet/Serialization Library to the Tools section. by ([@nothingalike](https://github.com/nothingalike)) in [#175](https://github.com/cardano-foundation/developer-portal/pull/175) +- Various links by ([@katomm](https://github.com/katomm)) in [#178](https://github.com/cardano-foundation/developer-portal/pull/178) +- Update main branch by ([@katomm](https://github.com/katomm)) in [#179](https://github.com/cardano-foundation/developer-portal/pull/179) +- add july spotlight article by ([@cislakk](https://github.com/cislakk)) in [#168](https://github.com/cardano-foundation/developer-portal/pull/168) +- Publish July spotlight article by ([@katomm](https://github.com/katomm)) in [#186](https://github.com/cardano-foundation/developer-portal/pull/186) +- Update showcases.js by ([@TurboEgon](https://github.com/TurboEgon)) in [#167](https://github.com/cardano-foundation/developer-portal/pull/167) +- Changed port 1338 to 1337 to match later requests by ([@hrvojecukman](https://github.com/hrvojecukman)) in [#180](https://github.com/cardano-foundation/developer-portal/pull/180) +- Update showcase descriptions without claims of being the first something. See #167 by ([@katomm](https://github.com/katomm)) in [#188](https://github.com/cardano-foundation/developer-portal/pull/188) +- Update showcase descriptions + fix cardano-wallet port by ([@katomm](https://github.com/katomm)) in [#189](https://github.com/cardano-foundation/developer-portal/pull/189) +- Update portal-contribute.md by ([@tweakch](https://github.com/tweakch)) in [#185](https://github.com/cardano-foundation/developer-portal/pull/185) +- Create CODE_OF_CONDUCT.md by ([@tweakch](https://github.com/tweakch)) in [#183](https://github.com/cardano-foundation/developer-portal/pull/183) +- Create CONTRIBUTING.md by ([@tweakch](https://github.com/tweakch)) in [#184](https://github.com/cardano-foundation/developer-portal/pull/184) +- Added Crypto Heroez project to the showcase. by ([@jhysek](https://github.com/jhysek)) in [#165](https://github.com/cardano-foundation/developer-portal/pull/165) +- Update main branch by ([@katomm](https://github.com/katomm)) in [#190](https://github.com/cardano-foundation/developer-portal/pull/190) +- Request to add JES-Art to the showcase by ([@sp33dy](https://github.com/sp33dy)) in [#135](https://github.com/cardano-foundation/developer-portal/pull/135) +- Added NFTdot.io entry as per latest requirements by ([@nftdot](https://github.com/nftdot)) in [#187](https://github.com/cardano-foundation/developer-portal/pull/187) +- Fix links in Rust lib by ([@katomm](https://github.com/katomm)) in [#191](https://github.com/cardano-foundation/developer-portal/pull/191) +- builder-tools: adding cardano-metadata-oracle by ([@mmahut](https://github.com/mmahut)) in [#192](https://github.com/cardano-foundation/developer-portal/pull/192) +- Merge PR #135, #191 and #192 into main by ([@katomm](https://github.com/katomm)) in [#195](https://github.com/cardano-foundation/developer-portal/pull/195) +- General Markdown Fixes on Mint Page by ([@nothingalike](https://github.com/nothingalike)) in [#196](https://github.com/cardano-foundation/developer-portal/pull/196) +- Merge PR #187 and #196 into main by ([@katomm](https://github.com/katomm)) in [#198](https://github.com/cardano-foundation/developer-portal/pull/198) +- Fixed typos and markdown by ([@ruttkowa](https://github.com/ruttkowa)) in [#199](https://github.com/cardano-foundation/developer-portal/pull/199) +- Replace announcement with Cardano Stack Exchange notice by ([@katomm](https://github.com/katomm)) in [#200](https://github.com/cardano-foundation/developer-portal/pull/200) +- Merge PR #199 and #200 into main by ([@katomm](https://github.com/katomm)) in [#202](https://github.com/cardano-foundation/developer-portal/pull/202) + +#### Contributors: 27 + +- Mercurial ([@Mercurial](https://github.com/Mercurial)) +- katomm ([@katomm](https://github.com/katomm)) +- DEADPXLZ ([@DEADPXLZ](https://github.com/DEADPXLZ)) +- mmahut ([@mmahut](https://github.com/mmahut)) +- tweakch ([@tweakch](https://github.com/tweakch)) +- lambdacc ([@lambdacc](https://github.com/lambdacc)) +- kryptoids ([@kryptoids](https://github.com/kryptoids)) +- alessandrokonrad ([@alessandrokonrad](https://github.com/alessandrokonrad)) +- ygorgasparin ([@ygorgasparin](https://github.com/ygorgasparin)) +- nemo83 ([@nemo83](https://github.com/nemo83)) +- jadjei ([@jadjei](https://github.com/jadjei)) +- frog357atrhacker ([@frog357atrhacker](https://github.com/frog357atrhacker)) +- TurboEgon ([@TurboEgon](https://github.com/TurboEgon)) +- bitm4ster ([@bitm4ster](https://github.com/bitm4ster)) +- will0101 ([@will0101](https://github.com/will0101)) +- nothingalike ([@nothingalike](https://github.com/nothingalike)) +- cislakk ([@cislakk](https://github.com/cislakk)) +- hrvojecukman ([@hrvojecukman](https://github.com/hrvojecukman)) +- jhysek ([@jhysek](https://github.com/jhysek)) +- sp33dy ([@sp33dy](https://github.com/sp33dy)) +- nftdot ([@nftdot](https://github.com/nftdot)) +- ruttkowa ([@ruttkowa](https://github.com/ruttkowa)) + +## 2021.34.0 (2021-08-31) + +All of the merged PRs in August + +#### PRs: 37 + + +- Add Pigy Token to the Showcase by ([@PrinzMonty](https://github.com/PrinzMonty)) in [#128](https://github.com/cardano-foundation/developer-portal/pull/128) +- Add tokhun.io project by ([@Tokhun](https://github.com/Tokhun)) in [#205](https://github.com/cardano-foundation/developer-portal/pull/205) +- Merge PR #128 and #205 into main by ([@katomm](https://github.com/katomm)) in [#207](https://github.com/cardano-foundation/developer-portal/pull/207) +- Request to add Politikoz to the ShowCase by ([@thiagosenechal](https://github.com/thiagosenechal)) in [#206](https://github.com/cardano-foundation/developer-portal/pull/206) +- added H.Y.P.E. Skulls entry to showcases by ([@7wwtwinkletoes](https://github.com/7wwtwinkletoes)) in [#208](https://github.com/cardano-foundation/developer-portal/pull/208) +- Add tag/category feature for builder tools by ([@katomm](https://github.com/katomm)) in [#212](https://github.com/cardano-foundation/developer-portal/pull/212) +- Update CardanoSharp build statuses for developers by ([@nothingalike](https://github.com/nothingalike)) in [#214](https://github.com/cardano-foundation/developer-portal/pull/214) +- Merge PR #206, #208, #212, and #214 into main by ([@katomm](https://github.com/katomm)) in [#218](https://github.com/cardano-foundation/developer-portal/pull/218) +- Add testnet faucet by ([@katomm](https://github.com/katomm)) in [#219](https://github.com/cardano-foundation/developer-portal/pull/219) +- fix spelling and script params when build and sign minting transaction by ([@shawnim](https://github.com/shawnim)) in [#222](https://github.com/cardano-foundation/developer-portal/pull/222) +- create nft minting standard blog post by ([@cislakk](https://github.com/cislakk)) in [#226](https://github.com/cardano-foundation/developer-portal/pull/226) +- Merge PR #219, #222 and #226 into main by ([@katomm](https://github.com/katomm)) in [#227](https://github.com/cardano-foundation/developer-portal/pull/227) +- Add Guild Ops Suite as Operator tool by ([@rdlrt](https://github.com/rdlrt)) in [#228](https://github.com/cardano-foundation/developer-portal/pull/228) +- Correction by ([@adijdhv](https://github.com/adijdhv)) in [#231](https://github.com/cardano-foundation/developer-portal/pull/231) +- CardanoSharp requires updated Getting Started by ([@nothingalike](https://github.com/nothingalike)) in [#233](https://github.com/cardano-foundation/developer-portal/pull/233) +- Fixes broken link by ([@fdel15](https://github.com/fdel15)) in [#236](https://github.com/cardano-foundation/developer-portal/pull/236) +- Add libada-go library by ([@katomm](https://github.com/katomm)) in [#230](https://github.com/cardano-foundation/developer-portal/pull/230) +- House keeping 08 11 2021 by ([@Mercurial](https://github.com/Mercurial)) in [#229](https://github.com/cardano-foundation/developer-portal/pull/229) +- [DEPLOY] staging to master by ([@Mercurial](https://github.com/Mercurial)) in [#241](https://github.com/cardano-foundation/developer-portal/pull/241) +- Bump color-string from 1.5.4 to 1.6.0 by ([@dependabot](https://github.com/dependabot)) in [#238](https://github.com/cardano-foundation/developer-portal/pull/238) +- Bump prismjs from 1.23.0 to 1.24.1 by ([@dependabot](https://github.com/dependabot)) in [#237](https://github.com/cardano-foundation/developer-portal/pull/237) +- Bump path-parse from 1.0.6 to 1.0.7 by ([@dependabot](https://github.com/dependabot)) in [#242](https://github.com/cardano-foundation/developer-portal/pull/242) +- Add showcase guideline proposed in #176 by ([@katomm](https://github.com/katomm)) in [#235](https://github.com/cardano-foundation/developer-portal/pull/235) +- Added The Galgos NFT project by ([@thegalgos](https://github.com/thegalgos)) in [#163](https://github.com/cardano-foundation/developer-portal/pull/163) +- Add Python Module by ([@emesik](https://github.com/emesik)) in [#220](https://github.com/cardano-foundation/developer-portal/pull/220) +- fix urls and native token sentence by ([@cislakk](https://github.com/cislakk)) in [#240](https://github.com/cardano-foundation/developer-portal/pull/240) +- doc fix: add missing backslash from code example by ([@arivictor](https://github.com/arivictor)) in [#246](https://github.com/cardano-foundation/developer-portal/pull/246) +- removed duplicate for copy command by ([@atx](https://github.com/atx))-barnes in [#244](https://github.com/cardano-foundation/developer-portal/pull/244) +- IO Fix by ([@cislakk](https://github.com/cislakk)) in [#245](https://github.com/cardano-foundation/developer-portal/pull/245) +- Update get started with developer community by ([@katomm](https://github.com/katomm)) in [#249](https://github.com/cardano-foundation/developer-portal/pull/249) +- august developer spotlight article mercury by ([@cislakk](https://github.com/cislakk)) in [#256](https://github.com/cardano-foundation/developer-portal/pull/256) +- Merged PRs #176, #163, #220, #240, #246, #244, #245, #249, #256 to main by ([@Mercurial](https://github.com/Mercurial)) in [#260](https://github.com/cardano-foundation/developer-portal/pull/260) +- Fix Spelling of Address by ([@thecharlesjenkins](https://github.com/thecharlesjenkins)) in [#258](https://github.com/cardano-foundation/developer-portal/pull/258) +- Fix spelling of 'metadata' by ([@Bishop19](https://github.com/Bishop19)) in [#261](https://github.com/cardano-foundation/developer-portal/pull/261) +- quickfix typo by ([@dankoman30](https://github.com/dankoman30)) in [#262](https://github.com/cardano-foundation/developer-portal/pull/262) +- fix repetition of 'the' by ([@6346563751](https://github.com/6346563751)) in [#263](https://github.com/cardano-foundation/developer-portal/pull/263) +- removed unsigned_algorithms by ([@alexanderwatanabe](https://github.com/alexanderwatanabe)) in [#264](https://github.com/cardano-foundation/developer-portal/pull/264) + +#### Contributors: 21 + +- PrinzMonty ([@PrinzMonty](https://github.com/PrinzMonty)) +- Tokhun ([@Tokhun](https://github.com/Tokhun)) +- thiagosenechal ([@thiagosenechal](https://github.com/thiagosenechal)) +- 7wwtwinkletoes ([@7wwtwinkletoes](https://github.com/7wwtwinkletoes)) +- shawnim ([@shawnim](https://github.com/shawnim)) +- cislakk ([@cislakk](https://github.com/cislakk)) +- katomm ([@katomm](https://github.com/katomm)) +- rdlrt ([@rdlrt](https://github.com/rdlrt)) +- adijdhv ([@adijdhv](https://github.com/adijdhv)) +- nothingalike ([@nothingalike](https://github.com/nothingalike)) +- fdel15 ([@fdel15](https://github.com/fdel15)) +- Mercurial ([@Mercurial](https://github.com/Mercurial)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- thegalgos ([@thegalgos](https://github.com/thegalgos)) +- emesik ([@emesik](https://github.com/emesik)) +- arivictor ([@arivictor](https://github.com/arivictor)) +- atx ([@atx](https://github.com/atx)) +- thecharlesjenkins ([@thecharlesjenkins](https://github.com/thecharlesjenkins)) +- Bishop19 ([@Bishop19](https://github.com/Bishop19)) +- dankoman30 ([@dankoman30](https://github.com/dankoman30)) +- 6346563751 ([@6346563751](https://github.com/6346563751)) +- alexanderwatanabe ([@alexanderwatanabe](https://github.com/alexanderwatanabe)) + +## 2021.38.0 (2021-09-30) + +All of the merged PRs in September + +#### PRs: 27 + + +- Fix typo in portal style guide by ([@bcbowen](https://github.com/bcbowen)) in [#269](https://github.com/cardano-foundation/developer-portal/pull/269) +- Update testnet page (Alonzo) by ([@katomm](https://github.com/katomm)) in [#280](https://github.com/cardano-foundation/developer-portal/pull/280) +- Merge PRs #258, #261, #262, #263, #264, #269, and #280 into main by ([@katomm](https://github.com/katomm)) in [#281](https://github.com/cardano-foundation/developer-portal/pull/281) +- "Get Stared" typo fix by ([@chrisbbreuer](https://github.com/chrisbbreuer)) in [#270](https://github.com/cardano-foundation/developer-portal/pull/270) +- Correct "Minting" Link under Setup by ([@mikegcoleman](https://github.com/mikegcoleman)) in [#273](https://github.com/cardano-foundation/developer-portal/pull/273) +- Add explorer link and made them both English by ([@mikegcoleman](https://github.com/mikegcoleman)) in [#276](https://github.com/cardano-foundation/developer-portal/pull/276) +- Upgrade Docusaurus to v2.0.0 beta.6 by ([@katomm](https://github.com/katomm)) in [#282](https://github.com/cardano-foundation/developer-portal/pull/282) +- set placeholder fee for fee-calculating transaction by ([@rphair](https://github.com/rphair)) in [#283](https://github.com/cardano-foundation/developer-portal/pull/283) +- Add smart contract category by ([@katomm](https://github.com/katomm)) in [#284](https://github.com/cardano-foundation/developer-portal/pull/284) +- Merge PR #282, #283 and #284 into main by ([@katomm](https://github.com/katomm)) in [#286](https://github.com/cardano-foundation/developer-portal/pull/286) +- Update searchconfig.json by ([@katomm](https://github.com/katomm)) in [#287](https://github.com/cardano-foundation/developer-portal/pull/287) +- Add playgrounds by ([@katomm](https://github.com/katomm)) in [#288](https://github.com/cardano-foundation/developer-portal/pull/288) +- Bump axios from 0.21.1 to 0.21.4 by ([@dependabot](https://github.com/dependabot)) in [#285](https://github.com/cardano-foundation/developer-portal/pull/285) +- Fixes Cardano Explorer and Pull Request Template links by ([@Rudigus](https://github.com/Rudigus)) in [#272](https://github.com/cardano-foundation/developer-portal/pull/272) +- Adding alonzo genesis files by ([@Im0](https://github.com/Im0)) in [#291](https://github.com/cardano-foundation/developer-portal/pull/291) +- fix typo by ([@cislakk](https://github.com/cislakk)) in [#305](https://github.com/cardano-foundation/developer-portal/pull/305) +- Removing the random constraint for building wallet by ([@Im0](https://github.com/Im0)) in [#297](https://github.com/cardano-foundation/developer-portal/pull/297) +- september spotlight article by ([@cislakk](https://github.com/cislakk)) in [#306](https://github.com/cardano-foundation/developer-portal/pull/306) +- Update creating-wallet-faucet.md by ([@javierlabanca](https://github.com/javierlabanca)) in [#307](https://github.com/cardano-foundation/developer-portal/pull/307) +- Delete duplicate article by ([@katomm](https://github.com/katomm)) in [#310](https://github.com/cardano-foundation/developer-portal/pull/310) +- Use `HydraBuildList` to provide latest release binaries (with fallback) by ([@tweakch](https://github.com/tweakch)) in [#300](https://github.com/cardano-foundation/developer-portal/pull/300) +- Bump prismjs from 1.24.1 to 1.25.0 by ([@dependabot](https://github.com/dependabot)) in [#311](https://github.com/cardano-foundation/developer-portal/pull/311) +- fix broken faucet link by ([@vladanghene](https://github.com/vladanghene)) in [#312](https://github.com/cardano-foundation/developer-portal/pull/312) +- minor bug by ([@gitmachtl](https://github.com/gitmachtl)) in [#314](https://github.com/cardano-foundation/developer-portal/pull/314) +- Spotlight fixes by ([@katomm](https://github.com/katomm)) in [#315](https://github.com/cardano-foundation/developer-portal/pull/315) +- Varia by ([@katomm](https://github.com/katomm)) in [#320](https://github.com/cardano-foundation/developer-portal/pull/320) +- minor documentation tweaks on Ogmios. by ([@KtorZ](https://github.com/KtorZ)) in [#327](https://github.com/cardano-foundation/developer-portal/pull/327) + +#### Contributors: 14 + +- bcbowen ([@bcbowen](https://github.com/bcbowen)) +- katomm ([@katomm](https://github.com/katomm)) +- chrisbbreuer ([@chrisbbreuer](https://github.com/chrisbbreuer)) +- mikegcoleman ([@mikegcoleman](https://github.com/mikegcoleman)) +- rphair ([@rphair](https://github.com/rphair)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- Rudigus ([@Rudigus](https://github.com/Rudigus)) +- Im0 ([@Im0](https://github.com/Im0)) +- cislakk ([@cislakk](https://github.com/cislakk)) +- javierlabanca ([@javierlabanca](https://github.com/javierlabanca)) +- tweakch ([@tweakch](https://github.com/tweakch)) +- vladanghene ([@vladanghene](https://github.com/vladanghene)) +- gitmachtl ([@gitmachtl](https://github.com/gitmachtl)) +- KtorZ ([@KtorZ](https://github.com/KtorZ)) + +## 2021.43.0 (2021-10-31) + +All of the merged PRs in October + +#### PRs: 24 + + +- Fix small typos in minting.md by ([@Luxroy](https://github.com/Luxroy)) in [#334](https://github.com/cardano-foundation/developer-portal/pull/334) +- Changed "10000 blocks" to "10000 slots" by ([@brouwerQ](https://github.com/brouwerQ)) in [#324](https://github.com/cardano-foundation/developer-portal/pull/324) +- added cardano-tools.io by ([@wutzebaer](https://github.com/wutzebaer)) in [#277](https://github.com/cardano-foundation/developer-portal/pull/277) +- Add cardano-wallet-js by ([@leobel](https://github.com/leobel)) in [#313](https://github.com/cardano-foundation/developer-portal/pull/313) +- update instructions for cardano-wallet 2021.09.09 by ([@dlo](https://github.com/dlo)) in [#319](https://github.com/cardano-foundation/developer-portal/pull/319) +- Minor correction by ([@lambdacc](https://github.com/lambdacc)) in [#344](https://github.com/cardano-foundation/developer-portal/pull/344) +- Update node checkout references, replace home directory references by ([@rdlrt](https://github.com/rdlrt)) in [#341](https://github.com/cardano-foundation/developer-portal/pull/341) +- Change witness count to 2 for minting transactions by ([@brouwerQ](https://github.com/brouwerQ)) in [#322](https://github.com/cardano-foundation/developer-portal/pull/322) +- Change witness count to 2 for minting transactions by ([@brouwerQ](https://github.com/brouwerQ)) in [#323](https://github.com/cardano-foundation/developer-portal/pull/323) +- Fixes documentation Stake Pool Course Handbook by ([@os11k](https://github.com/os11k)) in [#342](https://github.com/cardano-foundation/developer-portal/pull/342) +- Fix captcha issue raised in #339 by ([@katomm](https://github.com/katomm)) in [#346](https://github.com/cardano-foundation/developer-portal/pull/346) +- Showcase fixes by ([@katomm](https://github.com/katomm)) in [#349](https://github.com/cardano-foundation/developer-portal/pull/349) +- Add careers on Cardano page by ([@katomm](https://github.com/katomm)) in [#350](https://github.com/cardano-foundation/developer-portal/pull/350) +- Update running-cardano.md by ([@arielelkin](https://github.com/arielelkin)) in [#352](https://github.com/cardano-foundation/developer-portal/pull/352) +- Update installing-cardano-wallet.md by ([@arielelkin](https://github.com/arielelkin)) in [#353](https://github.com/cardano-foundation/developer-portal/pull/353) +- Update minting.md by ([@arielelkin](https://github.com/arielelkin)) in [#356](https://github.com/cardano-foundation/developer-portal/pull/356) +- Update installing-cardano-node.md by ([@extramileit](https://github.com/extramileit)) in [#361](https://github.com/cardano-foundation/developer-portal/pull/361) +- added pooldata API to builder tools by ([@mik1893](https://github.com/mik1893)) in [#364](https://github.com/cardano-foundation/developer-portal/pull/364) +- Update installing-cardano-wallet.md by ([@simonholmes001](https://github.com/simonholmes001)) in [#372](https://github.com/cardano-foundation/developer-portal/pull/372) +- Stake Pool Course - Handbook - minor changes by ([@os11k](https://github.com/os11k)) in [#373](https://github.com/cardano-foundation/developer-portal/pull/373) +- Showcase addition: Ansible cardano-node by ([@moaipool](https://github.com/moaipool)) in [#376](https://github.com/cardano-foundation/developer-portal/pull/376) +- Update minting-nfts.md by ([@Couder82](https://github.com/Couder82)) in [#379](https://github.com/cardano-foundation/developer-portal/pull/379) +- october spotlight article by ([@cislakk](https://github.com/cislakk)) in [#393](https://github.com/cardano-foundation/developer-portal/pull/393) +- Turn "funding" into "governance category + bring CIPs in by ([@katomm](https://github.com/katomm)) in [#394](https://github.com/cardano-foundation/developer-portal/pull/394) + +#### Contributors: 16 + +- katomm ([@katomm](https://github.com/katomm)) +- Luxroy ([@Luxroy](https://github.com/Luxroy)) +- brouwerQ ([@brouwerQ](https://github.com/brouwerQ)) +- wutzebaer ([@wutzebaer](https://github.com/wutzebaer)) +- leobel ([@leobel](https://github.com/leobel)) +- dlo ([@dlo](https://github.com/dlo)) +- lambdacc ([@lambdacc](https://github.com/lambdacc)) +- rdlrt ([@rdlrt](https://github.com/rdlrt)) +- os11k ([@os11k](https://github.com/os11k)) +- arielelkin ([@arielelkin](https://github.com/arielelkin)) +- extramileit ([@extramileit](https://github.com/extramileit)) +- mik1893 ([@mik1893](https://github.com/mik1893)) +- simonholmes001 ([@simonholmes001](https://github.com/simonholmes001)) +- moaipool ([@moaipool](https://github.com/moaipool)) +- Couder82 ([@Couder82](https://github.com/Couder82)) +- cislakk ([@cislakk](https://github.com/cislakk)) + +## 2021.47.0 (2021-11-30) + +All of the merged PRs in November + +#### PRs: 26 + + +- Update minting-nfts.md by ([@inspiraluna](https://github.com/inspiraluna)) in [#382](https://github.com/cardano-foundation/developer-portal/pull/382) +- YouTube typo fixed by ([@Duzij](https://github.com/Duzij)) in [#391](https://github.com/cardano-foundation/developer-portal/pull/391) +- Improve search config by ([@katomm](https://github.com/katomm)) in [#397](https://github.com/cardano-foundation/developer-portal/pull/397) +- updated docs for cardanosharp by ([@nothingalike](https://github.com/nothingalike)) in [#399](https://github.com/cardano-foundation/developer-portal/pull/399) +- fixed 404 to min ada value calculations by ([@nirhy](https://github.com/nirhy)) in [#400](https://github.com/cardano-foundation/developer-portal/pull/400) +- Updated CardanoSharp Logo and Website by ([@nothingalike](https://github.com/nothingalike)) in [#401](https://github.com/cardano-foundation/developer-portal/pull/401) +- Standardize code block formatting in Stake Pool Course handhook by ([@dlo](https://github.com/dlo)) in [#385](https://github.com/cardano-foundation/developer-portal/pull/385) +- Fix typo by ([@dikaio](https://github.com/dikaio)) in [#404](https://github.com/cardano-foundation/developer-portal/pull/404) +- Update testnets-and-devnets.md by ([@Fallenstedt](https://github.com/Fallenstedt)) in [#405](https://github.com/cardano-foundation/developer-portal/pull/405) +- updated with testnet version by ([@nilaysaha](https://github.com/nilaysaha)) in [#407](https://github.com/cardano-foundation/developer-portal/pull/407) +- Showcase housekeeping by ([@katomm](https://github.com/katomm)) in [#408](https://github.com/cardano-foundation/developer-portal/pull/408) +- Add weekly report (also retroactive) by ([@katomm](https://github.com/katomm)) in [#409](https://github.com/cardano-foundation/developer-portal/pull/409) +- Update minting-nft to use transction build command by ([@mzfr](https://github.com/mzfr)) in [#377](https://github.com/cardano-foundation/developer-portal/pull/377) +- Add Fracada to builder tools. by ([@katomm](https://github.com/katomm)) in [#410](https://github.com/cardano-foundation/developer-portal/pull/410) +- Simple spelling correction. by ([@jsyme222](https://github.com/jsyme222)) in [#411](https://github.com/cardano-foundation/developer-portal/pull/411) +- Update weekly report, week ending November 19th by ([@katomm](https://github.com/katomm)) in [#412](https://github.com/cardano-foundation/developer-portal/pull/412) +- Add py2hs to plutus.md by ([@cffls](https://github.com/cffls)) in [#413](https://github.com/cardano-foundation/developer-portal/pull/413) +- Add Typhon wallet by ([@katomm](https://github.com/katomm)) in [#416](https://github.com/cardano-foundation/developer-portal/pull/416) +- Minor changes for node installation on Linux by ([@os11k](https://github.com/os11k)) in [#417](https://github.com/cardano-foundation/developer-portal/pull/417) +- November spotlight interview by ([@cislakk](https://github.com/cislakk)) in [#418](https://github.com/cardano-foundation/developer-portal/pull/418) +- Update installing-cardano-wallet.md for Linux by ([@os11k](https://github.com/os11k)) in [#420](https://github.com/cardano-foundation/developer-portal/pull/420) +- Bump algoliasearch-helper from 3.4.4 to 3.6.2 by ([@dependabot](https://github.com/dependabot)) in [#421](https://github.com/cardano-foundation/developer-portal/pull/421) +- Grafana Dashboard Tutorial by ([@sanskys](https://github.com/sanskys)) in [#422](https://github.com/cardano-foundation/developer-portal/pull/422) +- Updated cardano node instalation with 8.10.7 ghc by ([@os11k](https://github.com/os11k)) in [#424](https://github.com/cardano-foundation/developer-portal/pull/424) +- Add weekly report by ([@katomm](https://github.com/katomm)) in [#425](https://github.com/cardano-foundation/developer-portal/pull/425) +- Correcting minor typo by ([@brendonthiede](https://github.com/brendonthiede)) in [#427](https://github.com/cardano-foundation/developer-portal/pull/427) + +#### Contributors: 16 + +- katomm ([@katomm](https://github.com/katomm)) +- inspiraluna ([@inspiraluna](https://github.com/inspiraluna)) +- Duzij ([@Duzij](https://github.com/Duzij)) +- nothingalike ([@nothingalike](https://github.com/nothingalike)) +- nirhy ([@nirhy](https://github.com/nirhy)) +- dlo ([@dlo](https://github.com/dlo)) +- dikaio ([@dikaio](https://github.com/dikaio)) +- Fallenstedt ([@Fallenstedt](https://github.com/Fallenstedt)) +- nilaysaha ([@nilaysaha](https://github.com/nilaysaha)) +- mzfr ([@mzfr](https://github.com/mzfr)) +- jsyme222 ([@jsyme222](https://github.com/katomm)) +- cffls ([@cffls](https://github.com/katomm)) +- os11k ([@os11k](https://github.com/os11k)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- sanskys ([@sanskys](https://github.com/sanskys)) +- brendonthiede ([@brendonthiede](https://github.com/brendonthiede)) +## 2021.51.0 (2021-12-31) + +All of the merged PRs in December + +#### PRs: 16 + + +- Explain base16 encoding of token names by ([@honungsburk](https://github.com/honungsburk)) in [#428](https://github.com/cardano-foundation/developer-portal/pull/428) +- Adding Staking Rewards Calculator to the Showcases by ([@dynamicstrategies](https://github.com/dynamicstrategies)) in [#432](https://github.com/cardano-foundation/developer-portal/pull/432) +- Update weekly report, week ending December 3rd by ([@katomm](https://github.com/katomm)) in [#433](https://github.com/cardano-foundation/developer-portal/pull/433) +- Fix typo by ([@hKedia](https://github.com/hKedia)) in [#434](https://github.com/cardano-foundation/developer-portal/pull/434) +- Upgrade Docusaurus to 2.0.0-beta.9 by ([@katomm](https://github.com/katomm)) in [#436](https://github.com/cardano-foundation/developer-portal/pull/436) +- Update Plutus tutorial link by ([@rdlrt](https://github.com/rdlrt)) in [#438](https://github.com/cardano-foundation/developer-portal/pull/438) +- Prerequisites of build of cardano-node on ARM by ([@JanRajtr](https://github.com/JanRajtr)) in [#437](https://github.com/cardano-foundation/developer-portal/pull/437) +- Updated Dandelion references for the new gimbalabs.com website by ([@rcmorano](https://github.com/rcmorano)) in [#441](https://github.com/cardano-foundation/developer-portal/pull/441) +- Update weekly report, week ending December 10th by ([@katomm](https://github.com/katomm)) in [#442](https://github.com/cardano-foundation/developer-portal/pull/442) +- CIP Integration (Cardano Improvement Proposals) by ([@katomm](https://github.com/katomm)) in [#444](https://github.com/cardano-foundation/developer-portal/pull/444) +- General styling fix on index page by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#445](https://github.com/cardano-foundation/developer-portal/pull/445) +- december spotlight article with adapools by ([@cislakk](https://github.com/cislakk)) in [#447](https://github.com/cardano-foundation/developer-portal/pull/447) +- Update weekly report, week ending December 17th by ([@katomm](https://github.com/katomm)) in [#448](https://github.com/cardano-foundation/developer-portal/pull/448) +- Upgrade Docusaurus 2.0.0-beta.14 by ([@katomm](https://github.com/katomm)) in [#451](https://github.com/cardano-foundation/developer-portal/pull/451) +- Add jq to the list of needed packages for CentOS by ([@morucci](https://github.com/morucci)) in [#452](https://github.com/cardano-foundation/developer-portal/pull/452) +- Update weekly report, week ending xmas. by ([@katomm](https://github.com/katomm)) in [#453](https://github.com/cardano-foundation/developer-portal/pull/453) + +#### Contributors: 10 + +- honungsburk ([@honungsburk](https://github.com/honungsburk)) +- dynamicstrategies ([@dynamicstrategies](https://github.com/dynamicstrategies)) +- katomm ([@katomm](https://github.com/katomm)) +- hKedia ([@hKedia](https://github.com/hKedia)) +- rdlrt ([@rdlrt](https://github.com/rdlrt)) +- JanRajtr ([@JanRajtr](https://github.com/JanRajtr)) +- rcmorano ([@rcmorano](https://github.com/rcmorano)) +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- cislakk ([@cislakk](https://github.com/cislakk)) +- morucci ([@morucci](https://github.com/morucci)) + +## 2022.4.0 (2022-01-31) + +All of the merged PRs in January + +#### PRs: 34 + + +- Added Catalyt Fund 6 results by ([@rcmorano](https://github.com/rcmorano)) in [#455](https://github.com/cardano-foundation/developer-portal/pull/455) +- Updated cardano node installation for Mac/Mac M1 by ([@os11k](https://github.com/os11k)) in [#456](https://github.com/cardano-foundation/developer-portal/pull/456) +- Add Rust Library autogenerated content script by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#459](https://github.com/cardano-foundation/developer-portal/pull/459) +- update application link for the third cohort by ([@benleelawrence](https://github.com/benleelawrence)) in [#461](https://github.com/cardano-foundation/developer-portal/pull/461) +- use hex for asset names by ([@shawnim](https://github.com/shawnim)) in [#454](https://github.com/cardano-foundation/developer-portal/pull/454) +- Use stack install command to install cardano-wallet by ([@morucci](https://github.com/morucci)) in [#460](https://github.com/cardano-foundation/developer-portal/pull/460) +- Finalize serialization-lib docs auto generation by ([@katomm](https://github.com/katomm)) in [#464](https://github.com/cardano-foundation/developer-portal/pull/464) +- Update weekly report, week ending January 7th by ([@katomm](https://github.com/katomm)) in [#468](https://github.com/cardano-foundation/developer-portal/pull/468) +- Update overview.md by ([@nemo83](https://github.com/nemo83)) in [#465](https://github.com/cardano-foundation/developer-portal/pull/465) +- Add ADAdice to the project showcase by ([@Flavien](https://github.com/Flavien)) in [#466](https://github.com/cardano-foundation/developer-portal/pull/466) +- Exploring cardano-wallet - Some simplifications by ([@morucci](https://github.com/morucci)) in [#467](https://github.com/cardano-foundation/developer-portal/pull/467) +- Update grafana-dashboard-tutorial.md by ([@sanskys](https://github.com/sanskys)) in [#469](https://github.com/cardano-foundation/developer-portal/pull/469) +- chore(get-started): updating cardano-node requirements by ([@mmahut](https://github.com/mmahut)) in [#462](https://github.com/cardano-foundation/developer-portal/pull/462) +- Update minting-nfts.md by ([@Couder82](https://github.com/Couder82)) in [#473](https://github.com/cardano-foundation/developer-portal/pull/473) +- Modify Rust Library script 'replace' functions with regex by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#474](https://github.com/cardano-foundation/developer-portal/pull/474) +- Token Registry Script by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#475](https://github.com/cardano-foundation/developer-portal/pull/475) +- Correct era on Alonzo line by ([@javidigani](https://github.com/javidigani)) in [#476](https://github.com/cardano-foundation/developer-portal/pull/476) +- Bump follow-redirects from 1.14.5 to 1.14.7 by ([@dependabot](https://github.com/dependabot)) in [#479](https://github.com/cardano-foundation/developer-portal/pull/479) +- Add a new showcase tag (DEX) & new showcase project (MuesliSwap) by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#480](https://github.com/cardano-foundation/developer-portal/pull/480) +- Bump shelljs from 0.8.4 to 0.8.5 by ([@dependabot](https://github.com/dependabot)) in [#482](https://github.com/cardano-foundation/developer-portal/pull/482) +- Bump cabal version in Installing Node page by ([@rdlrt](https://github.com/rdlrt)) in [#483](https://github.com/cardano-foundation/developer-portal/pull/483) +- cardano-wallet-interface showcase addition by ([@HarmonicPool](https://github.com/HarmonicPool)) in [#471](https://github.com/cardano-foundation/developer-portal/pull/471) +- Update weekly report, week ending January 14th by ([@katomm](https://github.com/katomm)) in [#484](https://github.com/cardano-foundation/developer-portal/pull/484) +- Added Builder Tool: Cardano Light Tools by ([@orpheus](https://github.com/orpheus))-antpool in [#443](https://github.com/cardano-foundation/developer-portal/pull/443) +- Automint - Python library by ([@mcvetyty](https://github.com/mcvetyty)) in [#431](https://github.com/cardano-foundation/developer-portal/pull/431) +- Update configure-topology-files.md - Readability by ([@deibid](https://github.com/deibid)) in [#488](https://github.com/cardano-foundation/developer-portal/pull/488) +- Update weekly report, week ending January 21 by ([@katomm](https://github.com/katomm)) in [#489](https://github.com/cardano-foundation/developer-portal/pull/489) +- Added Cardahub by ([@cardahub](https://github.com/cardahub))-dev in [#485](https://github.com/cardano-foundation/developer-portal/pull/485) +- Bump nanoid from 3.1.30 to 3.2.0 by ([@dependabot](https://github.com/dependabot)) in [#491](https://github.com/cardano-foundation/developer-portal/pull/491) +- Add January 2022 spotlight article by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#493](https://github.com/cardano-foundation/developer-portal/pull/493) +- Add SundaeSwap DEX into showcases by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#494](https://github.com/cardano-foundation/developer-portal/pull/494) +- Small update on number of tokens left after burning by ([@pavlinyordanov](https://github.com/pavlinyordanov)) in [#497](https://github.com/cardano-foundation/developer-portal/pull/497) +- Bump node-fetch from 2.6.6 to 2.6.7 by ([@dependabot](https://github.com/dependabot)) in [#498](https://github.com/cardano-foundation/developer-portal/pull/498) +- Update weekly report, week ending January 28th by ([@katomm](https://github.com/katomm)) in [#499](https://github.com/cardano-foundation/developer-portal/pull/499) + +#### Contributors: 21 + +- rcmorano ([@rcmorano](https://github.com/rcmorano)) +- benleelawrence ([@benleelawrence](https://github.com/benleelawrence)) +- shawnim ([@shawnim](https://github.com/shawnim)) +- morucci ([@morucci](https://github.com/morucci)) +- katomm ([@katomm](https://github.com/katomm)) +- nemo83 ([@nemo83](https://github.com/nemo83)) +- Flavien ([@Flavien](https://github.com/Flavien)) +- sanskys ([@sanskys](https://github.com/sanskys)) +- mmahut ([@mmahut](https://github.com/mmahut)) +- Couder82 ([@Couder82](https://github.com/Couder82)) +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- javidigani ([@javidigani](https://github.com/javidigani)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- rdlrt ([@rdlrt](https://github.com/rdlrt)) +- HarmonicPool ([@HarmonicPool](https://github.com/HarmonicPool)) +- orpheus ([@orpheus](https://github.com/orpheus)) +- mcvetyty ([@mcvetyty](https://github.com/mcvetyty)) +- deibid ([@deibid](https://github.com/deibid)) +- cardahub ([@cardahub](https://github.com/cardahub)) +- pavlinyordanov ([@pavlinyordanov](https://github.com/pavlinyordanov)) +- os11k ([@os11k](https://github.com/os11k)) + +## 2022.8.0 (2022-02-28) + +All of the merged PRs in February + +#### PRs: 22 + + +- Bump simple-get from 4.0.0 to 4.0.1 by ([@dependabot](https://github.com/dependabot)) in [#500](https://github.com/cardano-foundation/developer-portal/pull/500) +- Fixing IFPS typos by ([@plauche](https://github.com/plauche)) in [#501](https://github.com/cardano-foundation/developer-portal/pull/501) +- update number of wallets by ([@robinboening](https://github.com/robinboening)) in [#477](https://github.com/cardano-foundation/developer-portal/pull/477) +- Add dcSpark's Flint Wallet by ([@katomm](https://github.com/katomm)) in [#502](https://github.com/cardano-foundation/developer-portal/pull/502) +- Add 9 technical concept videos (Nerd Out) by ([@katomm](https://github.com/katomm)) in [#503](https://github.com/cardano-foundation/developer-portal/pull/503) +- Update builder tools by ([@katomm](https://github.com/katomm)) in [#504](https://github.com/cardano-foundation/developer-portal/pull/504) +- Fix for #496 by ([@katomm](https://github.com/katomm)) in [#505](https://github.com/cardano-foundation/developer-portal/pull/505) +- Update weekly report, week ending February 4 by ([@katomm](https://github.com/katomm)) in [#510](https://github.com/cardano-foundation/developer-portal/pull/510) +- installing-cardano-wallet.md - fix windows url by ([@OlofBlomqvist](https://github.com/OlofBlomqvist)) in [#513](https://github.com/cardano-foundation/developer-portal/pull/513) +- Modify design of Tools and Showcase page by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#514](https://github.com/cardano-foundation/developer-portal/pull/514) +- Category updates by ([@katomm](https://github.com/katomm)) in [#515](https://github.com/cardano-foundation/developer-portal/pull/515) +- Add PyCardano to builder tools by ([@cffls](https://github.com/cffls)) in [#508](https://github.com/cardano-foundation/developer-portal/pull/508) +- CardaStat pool analytics tool to add to showcases. by ([@DenDev](https://github.com/DenDev))-247 in [#511](https://github.com/cardano-foundation/developer-portal/pull/511) +- Showcase updates by ([@katomm](https://github.com/katomm)) in [#516](https://github.com/cardano-foundation/developer-portal/pull/516) +- Builder tools updates by ([@katomm](https://github.com/katomm)) in [#517](https://github.com/cardano-foundation/developer-portal/pull/517) +- Add Oura tool and Rust category tag by ([@katomm](https://github.com/katomm)) in [#518](https://github.com/cardano-foundation/developer-portal/pull/518) +- fix compiler name by ([@ofirgeller](https://github.com/ofirgeller)) in [#519](https://github.com/cardano-foundation/developer-portal/pull/519) +- Bump follow-redirects from 1.14.7 to 1.14.8 by ([@dependabot](https://github.com/dependabot)) in [#520](https://github.com/cardano-foundation/developer-portal/pull/520) +- Remove Legacy key from Creating keys and addresses by ([@os11k](https://github.com/os11k)) in [#521](https://github.com/cardano-foundation/developer-portal/pull/521) +- Updated with link to the testnet metadata explorer by ([@shelley](https://github.com/shelley))-dev in [#522](https://github.com/cardano-foundation/developer-portal/pull/522) +- Update ansible-cardano-node.md by ([@moaipool](https://github.com/moaipool)) in [#525](https://github.com/cardano-foundation/developer-portal/pull/525) +- Update weekly report, week ending February 11th and 18th by ([@katomm](https://github.com/katomm)) in [#526](https://github.com/cardano-foundation/developer-portal/pull/526) + +#### Contributors: 10 + +- dependabot ([@dependabot](https://github.com/dependabot)) +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- dalvaren ([@dalvaren](https://github.com/dalvaren)) +- D3vJohn ([@D3vJohn](https://github.com/D3vJohn)) +- BharatAtEMURGOIO ([@BharatAtEMURGOIO](https://github.com/BharatAtEMURGOIO)) +- sanskys ([@sanskys](https://github.com/sanskys)) +- Habacef ([@Habacef](https://github.com/Habacef)) +- Godspeed ([@Godspeed](https://github.com/Godspeed)) +- katomm ([@katomm](https://github.com/katomm)) +- dynamicstrategies ([@dynamicstrategies](https://github.com/dynamicstrategies)) + +## 2022.12.0 (2022-03-31) + +All of the merged PRs in March + +#### PRs: 25 + + +- Adding MermADA Minting by ([@MermADA](https://github.com/MermADA)) in [#527](https://github.com/cardano-foundation/developer-portal/pull/527) +- Bump prismjs from 1.25.0 to 1.27.0 by ([@dependabot](https://github.com/dependabot)) in [#529](https://github.com/cardano-foundation/developer-portal/pull/529) +- Update listening-for-payments-cli.md by ([@jirihofman](https://github.com/jirihofman)) in [#531](https://github.com/cardano-foundation/developer-portal/pull/531) +- Add February Spotlight Article and fix title of January Article by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#533](https://github.com/cardano-foundation/developer-portal/pull/533) +- Update retrieving-metadata.md by ([@dalvaren](https://github.com/dalvaren)) in [#532](https://github.com/cardano-foundation/developer-portal/pull/532) +- Update marketing-spo.md by ([@D3vJohn](https://github.com/D3vJohn)) in [#535](https://github.com/cardano-foundation/developer-portal/pull/535) +- Update overview.md by ([@D3vJohn](https://github.com/D3vJohn)) in [#538](https://github.com/cardano-foundation/developer-portal/pull/538) +- Update cardano-key-pairs.md by ([@D3vJohn](https://github.com/D3vJohn)) in [#539](https://github.com/cardano-foundation/developer-portal/pull/539) +- Update guild-ops-suite.md by ([@D3vJohn](https://github.com/D3vJohn)) in [#540](https://github.com/cardano-foundation/developer-portal/pull/540) +- Update ansible-cardano-node.md by ([@D3vJohn](https://github.com/D3vJohn)) in [#541](https://github.com/cardano-foundation/developer-portal/pull/541) +- cleaned up commands,outputs by ([@BharatAtEMURGOIO](https://github.com/BharatAtEMURGOIO)) in [#545](https://github.com/cardano-foundation/developer-portal/pull/545) +- Update overview.md by ([@D3vJohn](https://github.com/D3vJohn)) in [#547](https://github.com/cardano-foundation/developer-portal/pull/547) +- Update marlowe.md by ([@D3vJohn](https://github.com/D3vJohn)) in [#548](https://github.com/cardano-foundation/developer-portal/pull/548) +- Update overview.md by ([@D3vJohn](https://github.com/D3vJohn)) in [#549](https://github.com/cardano-foundation/developer-portal/pull/549) +- Update overview.md by ([@D3vJohn](https://github.com/D3vJohn)) in [#550](https://github.com/cardano-foundation/developer-portal/pull/550) +- Update overview.md by ([@D3vJohn](https://github.com/D3vJohn)) in [#551](https://github.com/cardano-foundation/developer-portal/pull/551) +- Grafana Tutorial: Adding Chapter 8 on Leadership Schedule and including Screenshots by ([@sanskys](https://github.com/sanskys)) in [#552](https://github.com/cardano-foundation/developer-portal/pull/552) +- Add Minswap Dex to showcases by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#554](https://github.com/cardano-foundation/developer-portal/pull/554) +- Add Adax Pro Dex to showcases by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#555](https://github.com/cardano-foundation/developer-portal/pull/555) +- Update register-stake-keys.md by ([@Habacef](https://github.com/Habacef)) in [#556](https://github.com/cardano-foundation/developer-portal/pull/556) +- Adding ADAZOO to the Showcase! by ([@Godspeed](https://github.com/Godspeed))-exe in [#560](https://github.com/cardano-foundation/developer-portal/pull/560) +- Add Netlify deploy status badge by ([@katomm](https://github.com/katomm)) in [#563](https://github.com/cardano-foundation/developer-portal/pull/563) +- added cardano-wallet-connector by ([@dynamicstrategies](https://github.com/dynamicstrategies)) in [#562](https://github.com/cardano-foundation/developer-portal/pull/562) +- Replace announcement by ([@katomm](https://github.com/katomm)) in [#564](https://github.com/cardano-foundation/developer-portal/pull/564) +- Update weekly report, week ending March 25 by ([@katomm](https://github.com/katomm)) in [#565](https://github.com/cardano-foundation/developer-portal/pull/565) + +#### Contributors: 12 + +- MermADA ([@MermADA](https://github.com/MermADA)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- jirihofman ([@jirihofman](https://github.com/jirihofman)) +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- dalvaren ([@dalvaren](https://github.com/dalvaren)) +- D3vJohn ([@D3vJohn](https://github.com/D3vJohn)) +- BharatAtEMURGOIO ([@BharatAtEMURGOIO](https://github.com/BharatAtEMURGOIO)) +- sanskys ([@sanskys](https://github.com/sanskys)) +- Habacef ([@Habacef](https://github.com/Habacef)) +- Godspeed ([@Godspeed](https://github.com/Godspeed)) +- katomm ([@katomm](https://github.com/katomm)) +- dynamicstrategies ([@dynamicstrategies](https://github.com/dynamicstrategies)) + +## 2022.16.0 (2022-04-30) + +All of the merged PRs in April + +#### PRs: 31 + + +- documented a Create React App example under Serialization-Lib section in Get Started by ([@dynamicstrategies](https://github.com/dynamicstrategies)) in [#566](https://github.com/cardano-foundation/developer-portal/pull/566) +- Bump minimist from 1.2.5 to 1.2.6 by ([@dependabot](https://github.com/dependabot)) in [#568](https://github.com/cardano-foundation/developer-portal/pull/568) +- commit march spotlight article by ([@cislakk](https://github.com/cislakk)) in [#569](https://github.com/cardano-foundation/developer-portal/pull/569) +- uring-complete -> Turing-complete by ([@Ghospel](https://github.com/Ghospel)) in [#570](https://github.com/cardano-foundation/developer-portal/pull/570) +- Upgrade Docusaurus v2 beta18 by ([@katomm](https://github.com/katomm)) in [#572](https://github.com/cardano-foundation/developer-portal/pull/572) +- Add new builder tool tag (IDE) and IntelliJ IDE builder tool by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#573](https://github.com/cardano-foundation/developer-portal/pull/573) +- Add new showcase project Pavia by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#574](https://github.com/cardano-foundation/developer-portal/pull/574) +- Add showcase project Atala Scan by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#575](https://github.com/cardano-foundation/developer-portal/pull/575) +- Fix autogenerated image path by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#589](https://github.com/cardano-foundation/developer-portal/pull/589) +- Add showcase JPG.store by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#576](https://github.com/cardano-foundation/developer-portal/pull/576) +- Add showcase Galaxy Of Art by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#577](https://github.com/cardano-foundation/developer-portal/pull/577) +- Add showcase Explorer Png by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#581](https://github.com/cardano-foundation/developer-portal/pull/581) +- Add showcase CNFT Jungle by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#582](https://github.com/cardano-foundation/developer-portal/pull/582) +- Add showcase CardanoCube by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#583](https://github.com/cardano-foundation/developer-portal/pull/583) +- Add builder tool Typhonjs by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#585](https://github.com/cardano-foundation/developer-portal/pull/585) +- Add new builder-tools tag chain-index by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#584](https://github.com/cardano-foundation/developer-portal/pull/584) +- Add showcase Build On Cardano by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#587](https://github.com/cardano-foundation/developer-portal/pull/587) +- Add showcase GeroWallet by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#578](https://github.com/cardano-foundation/developer-portal/pull/578) +- Add showcase GameChanger Wallet by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#579](https://github.com/cardano-foundation/developer-portal/pull/579) +- Add showcase CWallet by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#586](https://github.com/cardano-foundation/developer-portal/pull/586) +- Add Showcase Building On Cardano by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#590](https://github.com/cardano-foundation/developer-portal/pull/590) +- Modify filter order for builder tools and showcases by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#591](https://github.com/cardano-foundation/developer-portal/pull/591) +- Add showcase WingRiders by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#592](https://github.com/cardano-foundation/developer-portal/pull/592) +- Temporarily lowering the broken link detection to warn. by ([@katomm](https://github.com/katomm)) in [#594](https://github.com/cardano-foundation/developer-portal/pull/594) +- Add turf to showcases by ([@gglucass](https://github.com/gglucass)) in [#593](https://github.com/cardano-foundation/developer-portal/pull/593) +- Add Cicada Tactics to Game showcase by ([@CicadaNFT](https://github.com/CicadaNFT)) in [#509](https://github.com/cardano-foundation/developer-portal/pull/509) +- Fix tag for Cicada Tactics showcase by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#598](https://github.com/cardano-foundation/developer-portal/pull/598) +- Add April Spotlight by ([@katomm](https://github.com/katomm)) in [#599](https://github.com/cardano-foundation/developer-portal/pull/599) +- cardano-wallet: Stack no longer supported by ([@sevanspowell](https://github.com/sevanspowell)) in [#567](https://github.com/cardano-foundation/developer-portal/pull/567) +- Bump cross-fetch from 3.1.4 to 3.1.5 by ([@dependabot](https://github.com/dependabot)) in [#601](https://github.com/cardano-foundation/developer-portal/pull/601) +- Update weekly report, week ending April 29 by ([@katomm](https://github.com/katomm)) in [#602](https://github.com/cardano-foundation/developer-portal/pull/602) + +#### Contributors: 9 + +- dynamicstrategies ([@dynamicstrategies](https://github.com/dynamicstrategies)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- cislakk ([@cislakk](https://github.com/cislakk)) +- Ghospel ([@Ghospel](https://github.com/Ghospel)) +- katomm ([@katomm](https://github.com/katomm)) +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- gglucass ([@gglucass](https://github.com/gglucass)) +- CicadaNFT ([@CicadaNFT](https://github.com/CicadaNFT)) +- sevanspowell ([@sevanspowell](https://github.com/sevanspowell)) + +## 2022.21.0 (2022-05-31) + +All of the merged PRs in May + +#### PRs: 31 + + +- Bump async from 2.6.3 to 2.6.4 by ([@dependabot](https://github.com/dependabot)) in [#603](https://github.com/cardano-foundation/developer-portal/pull/603) +- Replace outdated website link on Crypto Knitties showcase by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#604](https://github.com/cardano-foundation/developer-portal/pull/604) +- cSnapshots Developer tool by ([@stakepool247](https://github.com/stakepool247)) in [#605](https://github.com/cardano-foundation/developer-portal/pull/605) +- Improve Dev Blogs by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#607](https://github.com/cardano-foundation/developer-portal/pull/607) +- Extend the editorial style guide by ([@katomm](https://github.com/katomm)) in [#608](https://github.com/cardano-foundation/developer-portal/pull/608) +- Handbook. Minor changes regarding metadata json by ([@os11k](https://github.com/os11k)) in [#610](https://github.com/cardano-foundation/developer-portal/pull/610) +- Add sticky contribute button to home, showcases and builder tools by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#612](https://github.com/cardano-foundation/developer-portal/pull/612) +- Add note that at least once you have to create a production build by ([@katomm](https://github.com/katomm)) in [#613](https://github.com/cardano-foundation/developer-portal/pull/613) +- Added check to make sure directories exist. by ([@richmiles](https://github.com/richmiles)) in [#615](https://github.com/cardano-foundation/developer-portal/pull/615) +- Add Koios to the Builder-Tools by ([@rdlrt](https://github.com/rdlrt)) in [#617](https://github.com/cardano-foundation/developer-portal/pull/617) +- Fix sticky button to be clickable anywhere by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#618](https://github.com/cardano-foundation/developer-portal/pull/618) +- Updating plutus.md by ([@LukaKurnjek](https://github.com/LukaKurnjek)) in [#611](https://github.com/cardano-foundation/developer-portal/pull/611) +- Modifying CCVault into Eternl by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#621](https://github.com/cardano-foundation/developer-portal/pull/621) +- Add showcase Pool Peek by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#622](https://github.com/cardano-foundation/developer-portal/pull/622) +- Add Project Catalyst Fund 7 Voting Results by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#624](https://github.com/cardano-foundation/developer-portal/pull/624) +- Add Project Catalyst Fund 8 Voting Results by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#626](https://github.com/cardano-foundation/developer-portal/pull/626) +- Tangocrypto by ([@javiertc](https://github.com/javiertc)) in [#619](https://github.com/cardano-foundation/developer-portal/pull/619) +- Updated Grafana Dashboard Tutorial by ([@os11k](https://github.com/os11k)) in [#625](https://github.com/cardano-foundation/developer-portal/pull/625) +- Add more technical concepts by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#627](https://github.com/cardano-foundation/developer-portal/pull/627) +- Add few more developer tools by ([@KtorZ](https://github.com/KtorZ)) in [#629](https://github.com/cardano-foundation/developer-portal/pull/629) +- Add showcase tag catalyst and showcase Lido Nation by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#631](https://github.com/cardano-foundation/developer-portal/pull/631) +- Remove doubled favourite tag by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#630](https://github.com/cardano-foundation/developer-portal/pull/630) +- Add showcase CNFT.me by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#632](https://github.com/cardano-foundation/developer-portal/pull/632) +- Add new technical concept video by Andrew Westberg by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#633](https://github.com/cardano-foundation/developer-portal/pull/633) +- Add truncate (shorten version of article) to blogs that don't have it by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#638](https://github.com/cardano-foundation/developer-portal/pull/638) +- Build out the "how to contribute"-page by ([@katomm](https://github.com/katomm)) in [#644](https://github.com/cardano-foundation/developer-portal/pull/644) +- golang cardano serialisation library by ([@matiwinnetou](https://github.com/matiwinnetou)) in [#646](https://github.com/cardano-foundation/developer-portal/pull/646) +- Fix broken link to Testnet Faucet by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#634](https://github.com/cardano-foundation/developer-portal/pull/634) +- Add Milkomeda interview into Dev Blog by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#648](https://github.com/cardano-foundation/developer-portal/pull/648) +- Modify contribute button href to relative path by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#649](https://github.com/cardano-foundation/developer-portal/pull/649) +- fix typo in Cardano Wall by ([@lodl](https://github.com/lodl)) in [#650](https://github.com/cardano-foundation/developer-portal/pull/650) + +#### Contributors: 12 + +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- stakepool247 ([@stakepool247](https://github.com/stakepool247)) +- katomm ([@katomm](https://github.com/katomm)) +- os11k ([@os11k](https://github.com/os11k)) +- richmiles ([@richmiles](https://github.com/richmiles)) +- rdlrt ([@rdlrt](https://github.com/rdlrt)) +- LukaKurnjek ([@LukaKurnjek](https://github.com/LukaKurnjek)) +- javiertc ([@javiertc](https://github.com/javiertc)) +- KtorZ ([@KtorZ](https://github.com/KtorZ)) +- matiwinnetou ([@matiwinnetou](https://github.com/matiwinnetou)) +- lodl ([@lodl](https://github.com/lodl)) + +## 2022.25.0 (2022-06-30) + +All of the merged PRs in June + +#### PRs: 7 + + +- Add testnet explorer by ([@cardanians](https://github.com/cardanians)) in [#671](https://github.com/cardano-foundation/developer-portal/pull/671) +- Bump sharp from 0.30.3 to 0.30.6 by ([@dependabot](https://github.com/dependabot)) in [#652](https://github.com/cardano-foundation/developer-portal/pull/652) +- Update register-stake-keys.md by ([@adrabenche](https://github.com/adrabenche)) in [#662](https://github.com/cardano-foundation/developer-portal/pull/662) +- Add go-ouroboros-network library, add golang tag by ([@wolf31o2](https://github.com/wolf31o2)) in [#659](https://github.com/cardano-foundation/developer-portal/pull/659) +- Update overview.md by ([@avilsmeier](https://github.com/avilsmeier)) in [#657](https://github.com/cardano-foundation/developer-portal/pull/657) +- Modify CIP, Token Registry and Rust Library scripts by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#654](https://github.com/cardano-foundation/developer-portal/pull/654) +- Fix devblog by ([@katomm](https://github.com/katomm)) in [#653](https://github.com/cardano-foundation/developer-portal/pull/653) + +#### Contributors: 7 + +- cardanians ([@cardanians](https://github.com/cardanians)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- adrabenche ([@adrabenche](https://github.com/adrabenche)) +- wolf31o2 ([@wolf31o2](https://github.com/wolf31o2)) +- avilsmeier ([@avilsmeier](https://github.com/avilsmeier)) +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- katomm ([@katomm](https://github.com/katomm)) +## 2022.30.0 (2022-07-31) + +All of the merged PRs in July + +#### PRs: 37 + + +- Update docusaurus.config.js by ([@sanskys](https://github.com/sanskys)) in [#658](https://github.com/cardano-foundation/developer-portal/pull/658) +- Added cscli to builder tools with new 'CLI' tag and corresponding getting started docs by ([@safestak](https://github.com/safestak))-keith in [#664](https://github.com/cardano-foundation/developer-portal/pull/664) +- new pages: Air Gap Environment, Secure Transaction Workflow by ([@rphair](https://github.com/rphair)) in [#665](https://github.com/cardano-foundation/developer-portal/pull/665) +- Add eUTxO showcase by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#667](https://github.com/cardano-foundation/developer-portal/pull/667) +- Add period at the end of description for all showcases/builder tools by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#668](https://github.com/cardano-foundation/developer-portal/pull/668) +- Update MuesliSwap landing page image by ([@MuesliSwapTeam](https://github.com/MuesliSwapTeam)) in [#673](https://github.com/cardano-foundation/developer-portal/pull/673) +- Cardano node install - added libsecp256k1 details and more by ([@os11k](https://github.com/os11k)) in [#675](https://github.com/cardano-foundation/developer-portal/pull/675) +- fix: broken link on integrate cardano page by ([@fodder1997](https://github.com/fodder1997)) in [#661](https://github.com/cardano-foundation/developer-portal/pull/661) +- Add ImperatorLang by ([@nielstron](https://github.com/nielstron)) in [#672](https://github.com/cardano-foundation/developer-portal/pull/672) +- Name change of community advisor role by ([@thenic95](https://github.com/thenic95)) in [#677](https://github.com/cardano-foundation/developer-portal/pull/677) +- Modify tagline on main page by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#684](https://github.com/cardano-foundation/developer-portal/pull/684) +- marlowe playground links updated by ([@rzgarespo](https://github.com/rzgarespo)) in [#685](https://github.com/cardano-foundation/developer-portal/pull/685) +- change the link and description of CIP meetings as they are now being held in discord instead of crowdcast by ([@thenic95](https://github.com/thenic95)) in [#688](https://github.com/cardano-foundation/developer-portal/pull/688) +- Update Docusaurus to 2.0.0-beta.21 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#686](https://github.com/cardano-foundation/developer-portal/pull/686) +- Update Node version for Netlify deployment by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#693](https://github.com/cardano-foundation/developer-portal/pull/693) +- Add Koios Interview to Developer Blog section by ([@thenic95](https://github.com/thenic95)) in [#690](https://github.com/cardano-foundation/developer-portal/pull/690) +- Update Node version documentation by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#694](https://github.com/cardano-foundation/developer-portal/pull/694) +- Add showcase Paradiso by ([@aarondunnington](https://github.com/aarondunnington)) in [#645](https://github.com/cardano-foundation/developer-portal/pull/645) +- New tag showcase section "DAO Tool" and remove & replace tag from RoundTable by ([@thenic95](https://github.com/thenic95)) in [#697](https://github.com/cardano-foundation/developer-portal/pull/697) +- Replace image for project RoundTable in showcase section by ([@thenic95](https://github.com/thenic95)) in [#698](https://github.com/cardano-foundation/developer-portal/pull/698) +- Fixed broken link on plutus.md by ([@vcottagiri](https://github.com/vcottagiri)) in [#695](https://github.com/cardano-foundation/developer-portal/pull/695) +- Modify build scripts: Replace fs.rmdir with fs.rm by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#692](https://github.com/cardano-foundation/developer-portal/pull/692) +- Fix broken link to key pairs by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#687](https://github.com/cardano-foundation/developer-portal/pull/687) +- Added HAZELnet for Community Creation by ([@nilscodes](https://github.com/nilscodes)) in [#679](https://github.com/cardano-foundation/developer-portal/pull/679) +- Announce the Cardano State of the Developer EcoSystem 2022 by ([@KtorZ](https://github.com/KtorZ)) in [#704](https://github.com/cardano-foundation/developer-portal/pull/704) +- Fix hover effect on buttons & make border thicker by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#703](https://github.com/cardano-foundation/developer-portal/pull/703) +- Update Developer Portal - weekly reports by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#705](https://github.com/cardano-foundation/developer-portal/pull/705) +- rectified --mint= syntax to correct form --mint by ([@BharatAtEMURGOIO](https://github.com/BharatAtEMURGOIO)) in [#706](https://github.com/cardano-foundation/developer-portal/pull/706) +- Modify announcement bar to be closable by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#707](https://github.com/cardano-foundation/developer-portal/pull/707) +- Update weekly report by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#710](https://github.com/cardano-foundation/developer-portal/pull/710) +- Fix broken links in getting started section and remove one link from tangocrypto that requires a sign-in by ([@thenic95](https://github.com/thenic95)) in [#713](https://github.com/cardano-foundation/developer-portal/pull/713) +- CVM - Cardano Version Manager :) by ([@orelvis15](https://github.com/orelvis15)) in [#682](https://github.com/cardano-foundation/developer-portal/pull/682) +- Fix broken images for builder tools Lucid and Pallas by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#709](https://github.com/cardano-foundation/developer-portal/pull/709) +- Add Robert Phair to the contributor list by ([@katomm](https://github.com/katomm)) in [#714](https://github.com/cardano-foundation/developer-portal/pull/714) +- Fix broken links for Jobs at dcSpark and EMURGO by ([@thenic95](https://github.com/thenic95)) in [#708](https://github.com/cardano-foundation/developer-portal/pull/708) +- Fix broken code consoles in CSCLI markdown file by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#712](https://github.com/cardano-foundation/developer-portal/pull/712) +- Revert "CVM - Cardano Version Manager :)" by ([@katomm](https://github.com/katomm)) in [#715](https://github.com/cardano-foundation/developer-portal/pull/715) + +#### Contributors: 17 + +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- Sanskys ([@Sanskys](https://github.com/Sanskys)) +- safestak ([@safestak](https://github.com/safestak)) +- rphair ([@rphair](https://github.com/rphair)) +- MuesliSwapTeam ([@MuesliSwapTeam](https://github.com/MuesliSwapTeam)) +- os11k ([@os11k](https://github.com/os11k)) +- fodder1997 ([@fodder1997](https://github.com/fodder1997)) +- nielstron ([@nielstron](https://github.com/nielstron)) +- thenic95 ([@thenic95](https://github.com/thenic95)) +- rzgarespo ([@rzgarespo](https://github.com/rzgarespo)) +- aarondunnington ([@aarondunnington](https://github.com/aarondunnington)) +- vcottagiri ([@vcottagiri](https://github.com/vcottagiri)) +- nilscodes ([@nilscodes](https://github.com/nilscodes)) +- KtorZ ([@KtorZ](https://github.com/KtorZ)) +- BharatAtEMURGOIO ([@BharatAtEMURGOIO](https://github.com/BharatAtEMURGOIO)) +- orelvis15 ([@orelvis15](https://github.com/orelvis15)) +- katomm ([@katomm](https://github.com/katomm)) + +## 2022.34.0 (2022-08-31) + +All of the merged PRs in August + +#### PRs: 21 + + +- Move CVM from showcase to builder tools by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#716](https://github.com/cardano-foundation/developer-portal/pull/716) +- Revert "Move CVM from showcase to builder tools" by ([@katomm](https://github.com/katomm)) in [#721](https://github.com/cardano-foundation/developer-portal/pull/721) +- Remove broken links and references to projects that have been abandoned (KEVM, IELE, GLOW) by ([@thenic95](https://github.com/thenic95)) in [#722](https://github.com/cardano-foundation/developer-portal/pull/722) +- Update Docusaurus to 2.0.1 by ([@katomm](https://github.com/katomm)) in [#718](https://github.com/cardano-foundation/developer-portal/pull/718) +- restore original announcement bar (revert #704) by ([@rphair](https://github.com/rphair)) in [#717](https://github.com/cardano-foundation/developer-portal/pull/717) +- Optimize showcase images that were partly several MB in size by ([@katomm](https://github.com/katomm)) in [#720](https://github.com/cardano-foundation/developer-portal/pull/720) +- Add dapps-on-cardano showcase by ([@katomm](https://github.com/katomm)) in [#719](https://github.com/cardano-foundation/developer-portal/pull/719) +- Remove coming soon pages and update the sidebar (revert #658) by ([@katomm](https://github.com/katomm)) in [#723](https://github.com/cardano-foundation/developer-portal/pull/723) +- Modify broken link by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#696](https://github.com/cardano-foundation/developer-portal/pull/696) +- Update weekly report 08.03 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#724](https://github.com/cardano-foundation/developer-portal/pull/724) +- Fix broken links and one typo in the Plutus section by ([@thenic95](https://github.com/thenic95)) in [#728](https://github.com/cardano-foundation/developer-portal/pull/728) +- Fixed image for dapps-on-cardano by ([@nilscodes](https://github.com/nilscodes)) in [#729](https://github.com/cardano-foundation/developer-portal/pull/729) +- Remove outdated projects by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#727](https://github.com/cardano-foundation/developer-portal/pull/727) +- Update weekly report 10.03 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#732](https://github.com/cardano-foundation/developer-portal/pull/732) +- Add August 2022 Developer Interview with Strica.io by ([@thenic95](https://github.com/thenic95)) in [#736](https://github.com/cardano-foundation/developer-portal/pull/736) +- Remove requirement to order alphabetically by ([@katomm](https://github.com/katomm)) in [#739](https://github.com/cardano-foundation/developer-portal/pull/739) +- Update weekly report 17.08 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#741](https://github.com/cardano-foundation/developer-portal/pull/741) +- Rework 'Get Started: Cardano Components' by ([@KtorZ](https://github.com/KtorZ)) in [#744](https://github.com/cardano-foundation/developer-portal/pull/744) +- Update kes_period.md by ([@CarlosLopezDeLara](https://github.com/CarlosLopezDeLara)) in [#747](https://github.com/cardano-foundation/developer-portal/pull/747) +- [Typo] [minting.md] "Amout" -> "Amount" by ([@sourabhxyz](https://github.com/sourabhxyz)) in [#743](https://github.com/cardano-foundation/developer-portal/pull/743) +- Add new filter to check latest showcases and builder tools by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#749](https://github.com/cardano-foundation/developer-portal/pull/749) + +#### Contributors: 9 + +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- katomm ([@katomm](https://github.com/katomm)) +- thenic95 ([@thenic95](https://github.com/thenic95)) +- rphair ([@rphair](https://github.com/rphair)) +- nilscodes ([@nilscodes](https://github.com/nilscodes)) +- CarlosLopezDeLara ([@CarlosLopezDeLara](https://github.com/CarlosLopezDeLara)) +- KtorZ ([@KtorZ](https://github.com/KtorZ)) +- sourabhxyz ([@sourabhxyz](https://github.com/sourabhxyz)) +- klntsky ([@klntsky](https://github.com/klntsky)) + +## 2022.38.0 (2022-09-30) + +All of the merged PRs in Septemeber + +#### PRs: 37 + + +- Add cardano-transaction-lib by ([@klntsky](https://github.com/klntsky)) in [#750](https://github.com/cardano-foundation/developer-portal/pull/750) +- Update Weekly Report 31.08 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#752](https://github.com/cardano-foundation/developer-portal/pull/752) +- Addition of HeliosLang by ([@christianschmitz](https://github.com/christianschmitz)) in [#755](https://github.com/cardano-foundation/developer-portal/pull/755) +- feat: Add haltscam project by ([@HT](https://github.com/HT))-Moh in [#702](https://github.com/cardano-foundation/developer-portal/pull/702) +- Add a new builder tool tag - PureScript by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#753](https://github.com/cardano-foundation/developer-portal/pull/753) +- Revert "Addition of HeliosLang" by ([@katomm](https://github.com/katomm)) in [#756](https://github.com/cardano-foundation/developer-portal/pull/756) +- Fix displaying unfiltered 10 last projects in showcases by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#757](https://github.com/cardano-foundation/developer-portal/pull/757) +- Add Aiken and Pix to Builder Tools by ([@rvcas](https://github.com/rvcas)) in [#761](https://github.com/cardano-foundation/developer-portal/pull/761) +- Add NuFi wallet showcase by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#758](https://github.com/cardano-foundation/developer-portal/pull/758) +- Update weekly report 07-09 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#763](https://github.com/cardano-foundation/developer-portal/pull/763) +- Addition of HeliosLang with corrected github link by ([@christianschmitz](https://github.com/christianschmitz)) in [#760](https://github.com/cardano-foundation/developer-portal/pull/760) +- (Urgent) STAGING BROKEN: Fix bracket issue in builder tools. by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#765](https://github.com/cardano-foundation/developer-portal/pull/765) +- Add NFT Gift Card Creator showcase by ([@minolinpwork](https://github.com/minolinpwork)) in [#754](https://github.com/cardano-foundation/developer-portal/pull/754) +- Add Book Token showcase by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#725](https://github.com/cardano-foundation/developer-portal/pull/725) +- Fix cardano-node build instructions on recent MacOS M1 by ([@KtorZ](https://github.com/KtorZ)) in [#769](https://github.com/cardano-foundation/developer-portal/pull/769) +- Update weekly report 09.14 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#773](https://github.com/cardano-foundation/developer-portal/pull/773) +- Rework labels & filters on builder-tools by ([@KtorZ](https://github.com/KtorZ)) in [#767](https://github.com/cardano-foundation/developer-portal/pull/767) +- add voteaire to showcase by ([@thenic95](https://github.com/thenic95)) in [#775](https://github.com/cardano-foundation/developer-portal/pull/775) +- Add Cardano Signer builder tool by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#774](https://github.com/cardano-foundation/developer-portal/pull/774) +- cardano-signer: replace narrative thumbnail with logo by ([@rphair](https://github.com/rphair)) in [#777](https://github.com/cardano-foundation/developer-portal/pull/777) +- Add StakePool Operator Scripts builder tool by ([@rphair](https://github.com/rphair)) in [#779](https://github.com/cardano-foundation/developer-portal/pull/779) +- Add Github Changelog by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#776](https://github.com/cardano-foundation/developer-portal/pull/776) +- Modify maximum Changelog users icons from 10 to 20 before unfold option by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#781](https://github.com/cardano-foundation/developer-portal/pull/781) +- Various open graph images by ([@katomm](https://github.com/katomm)) in [#788](https://github.com/cardano-foundation/developer-portal/pull/788) +- Fix dates and weeks in Changelog by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#790](https://github.com/cardano-foundation/developer-portal/pull/790) +- Open graph images patch by ([@katomm](https://github.com/katomm)) in [#795](https://github.com/cardano-foundation/developer-portal/pull/795) +- Add September 2022 Developer Interview with ADAO by ([@thenic95](https://github.com/thenic95)) in [#794](https://github.com/cardano-foundation/developer-portal/pull/794) +- Add why contribute section by ([@weqanhet](https://github.com/weqanhet)) in [#793](https://github.com/cardano-foundation/developer-portal/pull/793) +- Remove weekly report markdown file (Replaced by Changelog) by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#789](https://github.com/cardano-foundation/developer-portal/pull/789) +- Update project structure documentation by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#785](https://github.com/cardano-foundation/developer-portal/pull/785) +- Update hydra links for node binaries by ([@zliu41](https://github.com/zliu41)) in [#799](https://github.com/cardano-foundation/developer-portal/pull/799) +- Updated script for getting pool statistic by ([@os11k](https://github.com/os11k)) in [#798](https://github.com/cardano-foundation/developer-portal/pull/798) +- added Loxe to careers page by ([@manonthemat](https://github.com/manonthemat)) in [#796](https://github.com/cardano-foundation/developer-portal/pull/796) +- Add "known problems"-section to "how to contribute?" by ([@katomm](https://github.com/katomm)) in [#792](https://github.com/cardano-foundation/developer-portal/pull/792) +- remove adaex and adapools from Showcase by ([@rphair](https://github.com/rphair)) in [#800](https://github.com/cardano-foundation/developer-portal/pull/800) +- Add cexplorer by ([@cexplorer](https://github.com/cexplorer)) in [#745](https://github.com/cardano-foundation/developer-portal/pull/745) +- Add Discord and Developer Ecosystem Survey into footer by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#804](https://github.com/cardano-foundation/developer-portal/pull/804) + +#### Contributors: 15 + +- klntsky ([@klntsky](https://github.com/klntsky)) +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- katomm ([@katomm](https://github.com/katomm)) +- christianschmitz ([@christianschmitz](https://github.com/christianschmitz)) +- HT ([@HT](https://github.com/HT)) +- rvcas ([@rvcas](https://github.com/rvcas)) +- minolinpwork ([@minolinpwork](https://github.com/minolinpwork)) +- KtorZ ([@KtorZ](https://github.com/KtorZ)) +- thenic95 ([@thenic95](https://github.com/thenic95)) +- rphair ([@rphair](https://github.com/rphair)) +- weqanhet ([@weqanhet](https://github.com/weqanhet)) +- zliu41 ([@zliu41](https://github.com/zliu41)) +- os11k ([@os11k](https://github.com/os11k)) +- manonthemat ([@manonthemat](https://github.com/manonthemat)) +- cexplorer ([@cexplorer](https://github.com/cexplorer)) + +## 2022.42.0 (2022-10-31) + +All of the merged PRs in October +#### PRs: 27 + +- Update Changelog (End of September) by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#803](https://github.com/cardano-foundation/developer-portal/pull/803) +- Current Staging Build is broken, remove API tag from Cexplorer to fix it by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#802](https://github.com/cardano-foundation/developer-portal/pull/802) +- Add Mesh into builder tools and showcases by ([@jinglescode](https://github.com/jinglescode)) in [#784](https://github.com/cardano-foundation/developer-portal/pull/784) +- Adding a link to Plutus resources on Cardano Docs by ([@olgahryniuk](https://github.com/olgahryniuk)) in [#809](https://github.com/cardano-foundation/developer-portal/pull/809) +- Adding Cardano Leader Slot by ([@QuixoteSystems](https://github.com/QuixoteSystems)) in [#807](https://github.com/cardano-foundation/developer-portal/pull/807) +- Add Frankenwallet builder tool by ([@rphair](https://github.com/rphair)) in [#808](https://github.com/cardano-foundation/developer-portal/pull/808) +- Add Connect with wallet builder tool by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#816](https://github.com/cardano-foundation/developer-portal/pull/816) +- Add Project Catalyst Fund 9 Voting Results by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#813](https://github.com/cardano-foundation/developer-portal/pull/813) +- add open graph image for adao blog by ([@thenic95](https://github.com/thenic95)) in [#801](https://github.com/cardano-foundation/developer-portal/pull/801) +- Fix tutorial links in plutus.md by ([@ch1bo](https://github.com/ch1bo)) in [#819](https://github.com/cardano-foundation/developer-portal/pull/819) +- Update testnet files + outcome from cli query tip by ([@williamalvarez92](https://github.com/williamalvarez92)) in [#814](https://github.com/cardano-foundation/developer-portal/pull/814) +- Add cnft (npm lib) builder tool by ([@Jack](https://github.com/Jack))-0 in [#817](https://github.com/cardano-foundation/developer-portal/pull/817) +- Add Open Graph image for Showcase and Builder Tools section by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#821](https://github.com/cardano-foundation/developer-portal/pull/821) +- Add Bakrypt.io builder tool by ([@Wolfy18](https://github.com/Wolfy18)) in [#820](https://github.com/cardano-foundation/developer-portal/pull/820) +- Installing cardano-node: MacOS missing openssl by ([@pgrange](https://github.com/pgrange)) in [#791](https://github.com/cardano-foundation/developer-portal/pull/791) +- Add CARP builder tool by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#822](https://github.com/cardano-foundation/developer-portal/pull/822) +- Add Pooldata.live builder tool by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#824](https://github.com/cardano-foundation/developer-portal/pull/824) +- Add amount of PRs in Changelog by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#823](https://github.com/cardano-foundation/developer-portal/pull/823) +- Add Plutip builder tool by ([@mikekeke](https://github.com/mikekeke)) in [#783](https://github.com/cardano-foundation/developer-portal/pull/783) +- Add Carda Station to showcase by ([@cardadev](https://github.com/cardadev)) in [#830](https://github.com/cardano-foundation/developer-portal/pull/830) +- Discover Native Tokens: correct link to NFT Support showcase by ([@rphair](https://github.com/rphair)) in [#828](https://github.com/cardano-foundation/developer-portal/pull/828) +- Add yarn build workflow by ([@oversize](https://github.com/oversize)) in [#832](https://github.com/cardano-foundation/developer-portal/pull/832) +- Add Koios Python builder tool by ([@QuixoteSystems](https://github.com/QuixoteSystems)) in [#806](https://github.com/cardano-foundation/developer-portal/pull/806) +- Remove un-reusable functions from reusable.ts script file by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#834](https://github.com/cardano-foundation/developer-portal/pull/834) +- Updating Cardano-Signer website url by ([@gitmachtl](https://github.com/gitmachtl)) in [#840](https://github.com/cardano-foundation/developer-portal/pull/840) +- Add Demeter.run builder tool by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#838](https://github.com/cardano-foundation/developer-portal/pull/838) +- Add more technical concepts by Andrew Westberg by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#843](https://github.com/cardano-foundation/developer-portal/pull/843) + +#### Contributors: 15 + +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- jinglescode ([@jinglescode](https://github.com/jinglescode)) +- olgahryniuk ([@olgahryniuk](https://github.com/olgahryniuk)) +- QuixoteSystems ([@QuixoteSystems](https://github.com/QuixoteSystems)) +- rphair ([@rphair](https://github.com/rphair)) +- thenic95 ([@thenic95](https://github.com/thenic95)) +- ch1bo ([@ch1bo](https://github.com/ch1bo)) +- williamalvarez92 ([@williamalvarez92](https://github.com/williamalvarez92)) +- Jack ([@Jack](https://github.com/Jack)) +- Wolfy18 ([@Wolfy18](https://github.com/Wolfy18)) +- pgrange ([@pgrange](https://github.com/pgrange)) +- mikekeke ([@mikekeke](https://github.com/mikekeke)) +- cardadev ([@cardadev](https://github.com/cardadev)) +- oversize ([@oversize](https://github.com/oversize)) +- gitmachtl ([@gitmachtl](https://github.com/gitmachtl)) + +## 2022.46.0 (2022-11-30) + +All of the merged PRs in November +#### PRs: 18 + +- link transparently to operations book Environments page by ([@rphair](https://github.com/rphair)) in [#846](https://github.com/cardano-foundation/developer-portal/pull/846) +- Update Changelog (End of October) by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#847](https://github.com/cardano-foundation/developer-portal/pull/847) +- Add Changelog link into Contribute section by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#844](https://github.com/cardano-foundation/developer-portal/pull/844) +- Add multiple PR templates by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#845](https://github.com/cardano-foundation/developer-portal/pull/845) +- Add STAMPD showcase by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#841](https://github.com/cardano-foundation/developer-portal/pull/841) +- Fix displaying missing CIPs by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#848](https://github.com/cardano-foundation/developer-portal/pull/848) +- Modify image for 'Cardano connect with wallet' builder tool by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#842](https://github.com/cardano-foundation/developer-portal/pull/842) +- chore: add vercel deploys by ([@cf-web3-team-integrations](https://github.com/cf-web3-team-integrations)) in [#855](https://github.com/cardano-foundation/developer-portal/pull/855) +- Replace Changelog title and remove copyright by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#851](https://github.com/cardano-foundation/developer-portal/pull/851) +- fix(gh-actions): revert vercel deployments by ([@cf-web3-team-integrations](https://github.com/cf-web3-team-integrations)) in [#857](https://github.com/cardano-foundation/developer-portal/pull/857) +- Fix preprod typo by ([@fabianbormann](https://github.com/fabianbormann)) in [#858](https://github.com/cardano-foundation/developer-portal/pull/858) +- Added Grafana Loki page by ([@os11k](https://github.com/os11k)) in [#859](https://github.com/cardano-foundation/developer-portal/pull/859) +- Update testnet faucet link by ([@EKivutha](https://github.com/EKivutha)) in [#850](https://github.com/cardano-foundation/developer-portal/pull/850) +- Add Kogmios builder-tool by ([@AndrewWestberg](https://github.com/AndrewWestberg)) in [#860](https://github.com/cardano-foundation/developer-portal/pull/860) +- Replace outdated website link for Marlowe Playground by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#854](https://github.com/cardano-foundation/developer-portal/pull/854) +- Add TapTools showcase by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#782](https://github.com/cardano-foundation/developer-portal/pull/782) +- Added "User wallet authentication" to documentation by ([@inimrod](https://github.com/inimrod)) in [#863](https://github.com/cardano-foundation/developer-portal/pull/863) +- Add Shareslake to showcase by ([@miguelaeh](https://github.com/miguelaeh)) in [#867](https://github.com/cardano-foundation/developer-portal/pull/867) + +#### Contributors: 9 + +- rphair ([@rphair](https://github.com/rphair)) +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- cf-web3-team-integrations ([@cf-web3-team-integrations](https://github.com/cf-web3-team-integrations)) +- fabianbormann ([@fabianbormann](https://github.com/fabianbormann)) +- os11k ([@os11k](https://github.com/os11k)) +- EKivutha ([@EKivutha](https://github.com/EKivutha)) +- AndrewWestberg ([@AndrewWestberg](https://github.com/AndrewWestberg)) +- inimrod ([@inimrod](https://github.com/inimrod)) +- miguelaeh ([@miguelaeh](https://github.com/miguelaeh)) + +## 2022.50.0 (2022-12-31) + +All of the merged PRs in December +#### PRs: 21 + +- Add Lending Pond showcase and a new Lending tag by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#730](https://github.com/cardano-foundation/developer-portal/pull/730) +- Add NFT Creator showcase by ([@minolinpwork](https://github.com/minolinpwork)) in [#766](https://github.com/cardano-foundation/developer-portal/pull/766) +- Add CNFTLab party showcase by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#839](https://github.com/cardano-foundation/developer-portal/pull/839) +- Bump loader-utils from 2.0.3 to 2.0.4 by ([@dependabot](https://github.com/dependabot)) in [#862](https://github.com/cardano-foundation/developer-portal/pull/862) +- Add changelog data for November 2022 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#869](https://github.com/cardano-foundation/developer-portal/pull/869) +- Add nmkr studio in builder tools by ([@schaier-io](https://github.com/schaier-io)) in [#865](https://github.com/cardano-foundation/developer-portal/pull/865) +- Remove showcase Paradiso by ([@aarondunnington](https://github.com/aarondunnington)) in [#874](https://github.com/cardano-foundation/developer-portal/pull/874) +- replace HydraBuildList with static but currently valid links by ([@rphair](https://github.com/rphair)) in [#873](https://github.com/cardano-foundation/developer-portal/pull/873) +- Added links for latest Marlowe development documentation. by ([@bwbush](https://github.com/bwbush)) in [#872](https://github.com/cardano-foundation/developer-portal/pull/872) +- Add more technical concepts by Andrew Westberg by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#878](https://github.com/cardano-foundation/developer-portal/pull/878) +- Add Bridge filter into showcases by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#880](https://github.com/cardano-foundation/developer-portal/pull/880) +- Fix some typos in minting.md by ([@AntonEriksson978](https://github.com/AntonEriksson978)) in [#882](https://github.com/cardano-foundation/developer-portal/pull/882) +- Update Docusaurus to 2.2.0 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#883](https://github.com/cardano-foundation/developer-portal/pull/883) +- Skip creating an empty policy script by ([@eyeinsky](https://github.com/eyeinsky)) in [#885](https://github.com/cardano-foundation/developer-portal/pull/885) +- Add Chainport to Showcase by ([@eserilev](https://github.com/eserilev)) in [#875](https://github.com/cardano-foundation/developer-portal/pull/875) +- Add Cardano Verify Datasignature builder tool by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#890](https://github.com/cardano-foundation/developer-portal/pull/890) +- Added "Pet Registry" project to showcase by ([@fangio10](https://github.com/fangio10)) in [#893](https://github.com/cardano-foundation/developer-portal/pull/893) +- Add Koios Api Python package project to builder tools by ([@cardano-apexpool](https://github.com/cardano-apexpool)) in [#896](https://github.com/cardano-foundation/developer-portal/pull/896) +- Minor improvement of the native tokens docs by ([@tomveich](https://github.com/tomveich)) in [#900](https://github.com/cardano-foundation/developer-portal/pull/900) +- Add Koios tag to Builder Tools by ([@rphair](https://github.com/rphair)) in [#898](https://github.com/cardano-foundation/developer-portal/pull/898) +- Ignore yarn state, but still track yarn.lock by ([@rphair](https://github.com/rphair)) in [#901](https://github.com/cardano-foundation/developer-portal/pull/901) + +#### Contributors: 13 + +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- minolinpwork ([@minolinpwork](https://github.com/minolinpwork)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- schaier-io ([@schaier-io](https://github.com/schaier-io)) +- aarondunnington ([@aarondunnington](https://github.com/aarondunnington)) +- rphair ([@rphair](https://github.com/rphair)) +- bwbush ([@bwbush](https://github.com/bwbush)) +- AntonEriksson978 ([@AntonEriksson978](https://github.com/AntonEriksson978)) +- eyeinsky ([@eyeinsky](https://github.com/eyeinsky)) +- eserilev ([@eserilev](https://github.com/eserilev)) +- fangio10 ([@fangio10](https://github.com/fangio10)) +- cardano-apexpool ([@cardano-apexpool](https://github.com/cardano-apexpool)) +- tomveich ([@tomveich](https://github.com/tomveich)) + +## 2023.4.0 (2023-01-31) + +All of the merged PRs in January + +#### PRs: 24 + +- Add gimbalabs developer spotlight interview for January 2023 by ([@thenic95](https://github.com/thenic95)) in [#909](https://github.com/cardano-foundation/developer-portal/pull/909) +- Update Contributor instructions for yarn.lock by ([@rphair](https://github.com/rphair)) in [#906](https://github.com/cardano-foundation/developer-portal/pull/906) +- Add Tokhun.io minting tag in Showcase by ([@rphair](https://github.com/rphair)) in [#908](https://github.com/cardano-foundation/developer-portal/pull/908) +- Add Milkomeda to Showcase by ([@rphair](https://github.com/rphair)) in [#899](https://github.com/cardano-foundation/developer-portal/pull/899) +- Add Cardano Token Registry Python API to Builder Tools by ([@cardano-apexpool](https://github.com/cardano-apexpool)) in [#897](https://github.com/cardano-foundation/developer-portal/pull/897) +- Add more technical concepts by Andrew Westberg by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#913](https://github.com/cardano-foundation/developer-portal/pull/913) +- Update Changelog for Decemeber by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#912](https://github.com/cardano-foundation/developer-portal/pull/912) +- add Mesh documentation in Get Started by ([@jinglescode](https://github.com/jinglescode)) in [#916](https://github.com/cardano-foundation/developer-portal/pull/916) +- Bump json5 from 2.2.1 to 2.2.3 by ([@dependabot](https://github.com/dependabot)) in [#919](https://github.com/cardano-foundation/developer-portal/pull/919) +- Replace plutus-playground with demeter.run by ([@OlofBlomqvist](https://github.com/OlofBlomqvist)) in [#910](https://github.com/cardano-foundation/developer-portal/pull/910) +- Security Best Practices: proofreading & clarification by ([@rphair](https://github.com/rphair)) in [#921](https://github.com/cardano-foundation/developer-portal/pull/921) +- Dev Community links: fix CIPs server invite by ([@rphair](https://github.com/rphair)) in [#922](https://github.com/cardano-foundation/developer-portal/pull/922) +- Add eopsin as Smart Contract language by ([@nielstron](https://github.com/nielstron)) in [#929](https://github.com/cardano-foundation/developer-portal/pull/929) +- Add eopsin to builder tools by ([@nielstron](https://github.com/nielstron)) in [#928](https://github.com/cardano-foundation/developer-portal/pull/928) +- Add Aiken as smart contract language by ([@OlofBlomqvist](https://github.com/OlofBlomqvist)) in [#926](https://github.com/cardano-foundation/developer-portal/pull/926) +- Fix typo in stake pool course by ([@dschrempf](https://github.com/dschrempf)) in [#931](https://github.com/cardano-foundation/developer-portal/pull/931) +- Stake Pool Course introduction: grammar, usage, formatting by ([@dschrempf](https://github.com/dschrempf)) in [#930](https://github.com/cardano-foundation/developer-portal/pull/930) +- Add Periodic DNS Resolver to builder tools by ([@Fuma419](https://github.com/Fuma419)) in [#925](https://github.com/cardano-foundation/developer-portal/pull/925) +- Add new Project Catalyst Website and update texts by ([@thenic95](https://github.com/thenic95)) in [#933](https://github.com/cardano-foundation/developer-portal/pull/933) +- Add Raw Cardano Explorer showcase by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#932](https://github.com/cardano-foundation/developer-portal/pull/932) +- Add showcase Cardano Relay Map by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#935](https://github.com/cardano-foundation/developer-portal/pull/935) +- Add showcase NFTada.io by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#934](https://github.com/cardano-foundation/developer-portal/pull/934) +- Add Koios + Ogmios Java Clients to Builder Tools, plus ogmios + kotlin tags by ([@edridudi](https://github.com/edridudi)) in [#936](https://github.com/cardano-foundation/developer-portal/pull/936) +- Fix: typos by ([@omahs](https://github.com/omahs)) in [#937](https://github.com/cardano-foundation/developer-portal/pull/937) + + +#### Contributors: 12 + +- thenic95 ([@thenic95](https://github.com/thenic95)) +- rphair ([@rphair](https://github.com/rphair)) +- cardano-apexpool ([@cardano-apexpool](https://github.com/cardano-apexpool)) +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- jinglescode ([@jinglescode](https://github.com/jinglescode)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- OlofBlomqvist ([@OlofBlomqvist](https://github.com/OlofBlomqvist)) +- nielstron ([@nielstron](https://github.com/nielstron)) +- dschrempf ([@dschrempf](https://github.com/dschrempf)) +- Fuma419 ([@Fuma419](https://github.com/Fuma419)) +- edridudi ([@edridudi](https://github.com/edridudi)) +- omahs ([@omahs](https://github.com/omahs)) + +## 2023.8.0 (2023-02-28) + +All of the merged PRs in February + +#### PRs: 24 + +- Add BALANCE to Showcase by ([@Balance-Analytics](https://github.com/Balance-Analytics)) in [#946](https://github.com/cardano-foundation/developer-portal/pull/946) +- Add changelog for January 2023 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#947](https://github.com/cardano-foundation/developer-portal/pull/947) +- Add Finitum Bridge to showcase by ([@inimrod](https://github.com/inimrod)) in [#942](https://github.com/cardano-foundation/developer-portal/pull/942) +- Remove 'Edit this page' button from autogenerated content pages by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#950](https://github.com/cardano-foundation/developer-portal/pull/950) +- Bump http-cache-semantics from 4.1.0 to 4.1.1 by ([@dependabot](https://github.com/dependabot)) in [#943](https://github.com/cardano-foundation/developer-portal/pull/943) +- Replace 'Committers' in Changelog with 'Contributors' by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#951](https://github.com/cardano-foundation/developer-portal/pull/951) +- Add proper Aiken get-started page and other improvements by ([@katomm](https://github.com/katomm)) in [#955](https://github.com/cardano-foundation/developer-portal/pull/955) +- Add peerreview.money to Showcase by ([@thisisjago](https://github.com/thisisjago)) in [#949](https://github.com/cardano-foundation/developer-portal/pull/949) +- Bump ua-parser-js from 0.7.32 to 0.7.33 by ([@dependabot](https://github.com/dependabot)) in [#938](https://github.com/cardano-foundation/developer-portal/pull/938) +- Update Docusaurus to 2.3.1 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#956](https://github.com/cardano-foundation/developer-portal/pull/956) +- Add Aiken's acca to builder tools by ([@matiwinnetou](https://github.com/matiwinnetou)) in [#958](https://github.com/cardano-foundation/developer-portal/pull/958) +- Bump ([@sideway/formula](https://github.com/sideway/formula)) from 3.0.0 to 3.0.1 by ([@dependabot](https://github.com/dependabot)) in [#954](https://github.com/cardano-foundation/developer-portal/pull/954) +- Fixed M1 installation by ([@os11k](https://github.com/os11k)) in [#957](https://github.com/cardano-foundation/developer-portal/pull/957) +- Add ([@dotare/cardano-delegation](https://github.com/dotare/cardano-delegation)) to Builder Tools by ([@DorienP](https://github.com/DorienP)) in [#953](https://github.com/cardano-foundation/developer-portal/pull/953) +- Added Aiken tag to Builder Tools by ([@rphair](https://github.com/rphair)) in [#960](https://github.com/cardano-foundation/developer-portal/pull/960) +- New monthly addition (February 2023) to the Developer Blog - NEWM Interview by ([@thenic95](https://github.com/thenic95)) in [#961](https://github.com/cardano-foundation/developer-portal/pull/961) +- Add Cardano Studio to Showcases by ([@bugii](https://github.com/bugii)) in [#907](https://github.com/cardano-foundation/developer-portal/pull/907) +- fix broken links by ([@gufmar](https://github.com/gufmar)) in [#967](https://github.com/cardano-foundation/developer-portal/pull/967) +- Add technical concepts for January 2023 by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#948](https://github.com/cardano-foundation/developer-portal/pull/948) +- Update Mesh docs by ([@jinglescode](https://github.com/jinglescode)) in [#974](https://github.com/cardano-foundation/developer-portal/pull/974) +- Updating Plutus pioneer program section by ([@LukaKurnjek](https://github.com/LukaKurnjek)) in [#972](https://github.com/cardano-foundation/developer-portal/pull/972) +- Update the NEWM blog to the newest version by ([@thenic95](https://github.com/thenic95)) in [#969](https://github.com/cardano-foundation/developer-portal/pull/969) +- Updating links and text for the Plutus page. by ([@LukaKurnjek](https://github.com/LukaKurnjek)) in [#962](https://github.com/cardano-foundation/developer-portal/pull/962) + +#### Contributors: 17 + +- Balance-Analytics ([@Balance-Analytics](https://github.com/Balance-Analytics)) +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- inimrod ([@inimrod](https://github.com/inimrod)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- katomm ([@katomm](https://github.com/katomm)) +- thisisjago ([@thisisjago](https://github.com/thisisjago)) +- matiwinnetou ([@matiwinnetou](https://github.com/matiwinnetou)) +- sideway/formula ([@sideway/formula](https://github.com/sideway/formula)) +- os11k ([@os11k](https://github.com/os11k)) +- dotare/cardano-delegation ([@dotare/cardano-delegation](https://github.com/dotare/cardano-delegation)) +- DorienP ([@DorienP](https://github.com/DorienP)) +- rphair ([@rphair](https://github.com/rphair)) +- thenic95 ([@thenic95](https://github.com/thenic95)) +- bugii ([@bugii](https://github.com/bugii)) +- gufmar ([@gufmar](https://github.com/gufmar)) +- jinglescode ([@jinglescode](https://github.com/jinglescode)) +- LukaKurnjek ([@LukaKurnjek](https://github.com/LukaKurnjek)) + +## 2023.12.0 (2023-03-31) + +All of the merged PRs in March + +#### PRs: 24 + +- Add Changelog for February by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#975](https://github.com/cardano-foundation/developer-portal/pull/975) +- Installing cardano-node: update links to binaries by ([@WesleyBatista](https://github.com/WesleyBatista)) in [#978](https://github.com/cardano-foundation/developer-portal/pull/978) +- Minting NFTs: missing command output by ([@36thchambersoftware](https://github.com/36thchambersoftware)) in [#980](https://github.com/cardano-foundation/developer-portal/pull/980) +- Modify testnet and devnets page by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#963](https://github.com/cardano-foundation/developer-portal/pull/963) +- Add more technical concepts by Andrew Westberg by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#982](https://github.com/cardano-foundation/developer-portal/pull/982) +- Remove Loxe Inc. from careers list by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#981](https://github.com/cardano-foundation/developer-portal/pull/981) +- Add DCOne Webhook API to Builder Tools by ([@DCOneCrypto](https://github.com/DCOneCrypto)) in [#977](https://github.com/cardano-foundation/developer-portal/pull/977) +- Update installing-cardano-node.md by ([@os11k](https://github.com/os11k)) in [#979](https://github.com/cardano-foundation/developer-portal/pull/979) +- Modify spelling and add more clear description on testnet page by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#983](https://github.com/cardano-foundation/developer-portal/pull/983) +- Add Crystal libraries by ([@wout](https://github.com/wout)) in [#984](https://github.com/cardano-foundation/developer-portal/pull/984) +- Bump webpack from 5.75.0 to 5.76.1 by ([@dependabot](https://github.com/dependabot)) in [#987](https://github.com/cardano-foundation/developer-portal/pull/987) +- Rename eopsin to opshin by ([@nielstron](https://github.com/nielstron)) in [#989](https://github.com/cardano-foundation/developer-portal/pull/989) +- [Current Yarn Build fix] Modify regex in CIP script. by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#992](https://github.com/cardano-foundation/developer-portal/pull/992) +- New Developer Spotlight blog for March 2023. Interview with Jingles, co-founder of Mesh by ([@thenic95](https://github.com/thenic95)) in [#994](https://github.com/cardano-foundation/developer-portal/pull/994) +- Modify NFT minting course with addition of network selection by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#993](https://github.com/cardano-foundation/developer-portal/pull/993) +- Modify CIP, Rust Library and Token Registry script constant namings. by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#996](https://github.com/cardano-foundation/developer-portal/pull/996) +- Correct grammar and spelling for Mainnet and testnets (staging) by ([@rphair](https://github.com/rphair)) in [#991](https://github.com/cardano-foundation/developer-portal/pull/991) +- Update Showcase item Haltscam, including rename to Profiler by ([@HT-Moh](https://github.com/HT-Moh)) in [#997](https://github.com/cardano-foundation/developer-portal/pull/997) +- Tag Cardano Client Library as favorite by ([@matiwinnetou](https://github.com/matiwinnetou)) in [#1004](https://github.com/cardano-foundation/developer-portal/pull/1004) +- Add Real World Marlowe to Marlowe page by ([@rphair](https://github.com/rphair)) in [#990](https://github.com/cardano-foundation/developer-portal/pull/990) +- Add Lace to showcase by ([@olgahryniuk](https://github.com/olgahryniuk)) in [#985](https://github.com/cardano-foundation/developer-portal/pull/985) +- Add blurb about Plutus PBL course by ([@workshop-maybe](https://github.com/workshop-maybe)) in [#1009](https://github.com/cardano-foundation/developer-portal/pull/1009) +- Revert "Add Lace to showcase" by ([@fill-the-fill](https://github.com/fill-the-fill)) in [#1007](https://github.com/cardano-foundation/developer-portal/pull/1007) +- Update installing-cardano-node with minor fixes by ([@os11k](https://github.com/os11k)) in [#1008](https://github.com/cardano-foundation/developer-portal/pull/1008) + +#### Contributors: 14 + +- fill-the-fill ([@fill-the-fill](https://github.com/fill-the-fill)) +- WesleyBatista ([@WesleyBatista](https://github.com/WesleyBatista)) +- 36thchambersoftware ([@36thchambersoftware](https://github.com/36thchambersoftware)) +- DCOneCrypto ([@DCOneCrypto](https://github.com/DCOneCrypto)) +- os11k ([@os11k](https://github.com/os11k)) +- wout ([@wout](https://github.com/wout)) +- dependabot ([@dependabot](https://github.com/dependabot)) +- nielstron ([@nielstron](https://github.com/nielstron)) +- thenic95 ([@thenic95](https://github.com/thenic95)) +- rphair ([@rphair](https://github.com/rphair)) +- HT-Moh ([@HT-Moh](https://github.com/HT-Moh)) +- matiwinnetou ([@matiwinnetou](https://github.com/matiwinnetou)) +- olgahryniuk ([@olgahryniuk](https://github.com/olgahryniuk)) +- workshop-maybe ([@workshop-maybe](https://github.com/workshop-maybe)) diff --git a/WEEKLY_REPORT.md b/WEEKLY_REPORT.md deleted file mode 100644 index a7f1ac58bc..0000000000 --- a/WEEKLY_REPORT.md +++ /dev/null @@ -1,1344 +0,0 @@ -## Cardano Developer Portal - weekly reports - -[2022-07-25] - * Modify announcement bar to be closable (#707) (Fill) - * rectified --mint syntax to correct form (#706) (BharatAtEMURGOIO) - -[2022-07-24] - * Update Developer Portal - weekly reports (#705) (Fill) - -### Week ending July 22nd - -[2022-07-21] - * Fix hover effect on buttons & make border thicker (#703) (Fill) - * Announce the Cardano State of the Developer EcoSystem 2022 (#704) (Matthias Benkort) - -[2022-07-16] - * Added HAZELnet for Community Creation (#679) (Nils Codes) - -### Week ending July 15th - -[2022-07-15] - * Fix broken link to key pairs (#687) (Fill) - -[2022-07-14] - * Replace fs.rmdir (will be removed in future Node.js version) with fs.rm (#692) (Fill) - * Fixed broken link on plutus.md (#695) (Varghese Cottagiri) - * replace image for RoundTable (#698) (Nicolas) - * New tag showcase section “DAO Tool” and remove & replace tag from RoundTable (#697) (Nicolas) - -[2022-07-12] - * Add showcase Paradiso (#645) (Aaron Dunnington) - * Update Node version documentation (#694) (Fill) - * Add Koios Interview to Developer Blog section (#690) (Nicolas) - -[2022-07-11] - * Update Node version for Netlify deployment (#693) (Fill) - * Update Docusaurus to 2.0.0-beta.21 (#686) (Fill) - -[2022-07-10] - * change the link of CIP meetings as they are now being held in discord (#688) (Nicolas) - -### Week ending July 8th - -[2022-07-08] - * marlowe playground links updated (#685) (Rzgar) - * Modify tagline on main page (#684) (Fillips Ickevics) - * Name change of community advisor role (#677) (Nicolas) - * Add ImperatorLang (#672) (Niels Mündler) - -### Week ending July 1st - -[2022-07-01] - * fix: broken link on integrate cardano page (#661) (fodder1997) - * Cardano node install - added libsecp256k1 details and more (#675) (Jurijs I) - -[2022-06-30] - * Update MuesliSwap landing page image (#673) (MuesliSwap Team) - * Add period at the end of description for all showcases/builder tools (#668) (Fillips Ickevics) - * Add eUTxO showcase (#667) (Fillips Ickevics) - * new pages: Air Gap Environment, Secure Transaction Workflow (#665) (Robert Phair) - * Added cscli to builder tools with new ‘CLI’ tag and corresponding getting started docs (#664) (Keith) - * Update docusaurus.config.js (#658) (SNSKY) - * add testnet explorer (#671) (Cardanians.io) - -### Week ending June 24th - -[2022-06-20] - * Modify CIP, Token Registry and Rust Library scripts (#654) (Fillips Ickevics) - * Bump sharp from 0.30.3 to 0.30.6 (#652) (dependabot[bot]) -### Week ending June 17th - -[2022-06-15] - * Update register-stake-keys.md (#662) (Alejandro Drabenche) - -### Week ending June 10th - -[2022-06-08] - * Update overview.md (#657) (avilsmeier) - -### Week ending June 3rd - -[2022-06-02] - * Add go-ouroboros-network library, add golang tag (#659) (Chris Gianelloni) -[2022-05-31] - * Update 2022-05-30-may.md (#653) (Tommy Kammerer) -[2022-05-30] - * fix typo in Cardano Wall (#650) (Georg W) - * Modify contribute button href to relative path (#649) (Fillips Ickevics) - * Add Milkomeda interview into Dev Blog (#648) (Fillips Ickevics) - * Fix broken link to Testnet Faucet (#634) (Fillips Ickevics) - -### Week ending May 27th - -[2022-05-23] - * golang cardano serialisation library (#646) (matiwinnetou) - * Build out the “how to contribute”-page (#644) (Tommy Kammerer) - * Add truncate (shorten version of article) to blogs that don’t have it for preview (#638) (Fillips Ickevics) - * Add new technical concept video by Andrew Westberg (#633) (Fillips Ickevics) - * Add showcase CNFT.me (#632) (Fillips Ickevics) - * Remove doubled favourite tag (#630) (Fillips Ickevics) - * Add showcase tag catalyst and showcase Lido Nation (#631) (Fillips Ickevics) - * Add few more developer tools (#629) (Matthias Benkort) - * Add more technical concepts (#627) (Fillips Ickevics) - * Updated Grafana Dashboard Tutorial (#625) (Jurijs I) - * Tangocrypto (#619) (Javier Toledo Cordova) - -### Week ending May 20th - -[2022-05-16] - * Add Project Catalyst Fund 8 Voting Results (#626) (Fillips Ickevics) - * Add Project Catalyst Fund 7 Voting Results (#624) (Fillips Ickevics) - * Add showcase Pool Peek (#622) (Fillips Ickevics) - * Modifying CCVault into Eternl (#621) (Fillips Ickevics) - * Updating plutus.md (#611) (LukaKurnjek) - * Fix sticky button to be clickable anywhere (#618) (Fillips Ickevics) - * Add Koios to the Builder-Tools (#617) (RdLrT) - -### Week ending May 13th -[no updates] - -### Week ending May 6th - -[2022-05-03] - * Added check to make sure directories exist. (#615) (Rich Miles) - * Add note that at least once you have to create a production build (as this pulls missing files) (#613) (Tommy Kammerer) - * Add sticky contribute button to home, showcases and builder tools (#612) (Fillips Ickevics) - * Handbook. Minor changes regarding metadata json (#610) (Jurijs I) - * Extend the editorial style guide. (#608) (Tommy Kammerer) - * Improve Dev Blogs (#607) (Fillips Ickevics) - * cSnapshots Developer tool (#605) (StakePool247) - * Replace outdated website link on Crypto Knitties showcase (#604) (Fillips Ickevics) - * Bump async from 2.6.3 to 2.6.4 (#603) (dependabot[bot]) - -### Week ending April 29th - -[2022-04-27] - * Update weekly report, week ending April 29 (#602) (Tommy Kammerer) - * Bump cross-fetch from 3.1.4 to 3.1.5 (#601) (dependabot[bot]) - * cardano-wallet: Stack no longer supported (#567) (Samuel Evans-Powell) - * Add April Spotlight (#599) (Tommy Kammerer) - * Fix tag for Cicada Tactics showcase (#598) (Fillips Ickevics) - * Add Cicada Tactics to Game showcase (#509) (Cicada Tactics) - * Add turf (#593) (gglucass) - -### Week ending April 22th -[no updates] - -### Week ending April 15th - -[2022-04-15] - * Temporarily lowering the broken link detection to warn. (#594) (Tommy Kammerer) - -### Week ending April 8th - -[2022-04-06] - * Add showcase WingRiders (#592) (Fillips Ickevics) - * Modify filter order for builder tools and showcases (#591) (Fillips Ickevics) - * Add Showcase Building On Cardano (#590) (Fillips Ickevics) - * Add showcase CWallet (#586) (Fillips Ickevics) - * Add showcase GameChanger Wallet (#579) (Fillips Ickevics) - * Add showcase GeroWallet (#578) (Fillips Ickevics) - * Add showcase Build On Cardano (#587) (Fillips Ickevics) - * Add new builder-tools tag chain-index (#584) (Fillips Ickevics) - * Add builder tool Typhonjs (#585) (Fillips Ickevics) - * Add showcase CardanoCube (#583) (Fillips Ickevics) - * Add showcase CNFT Jungle (#582) (Fillips Ickevics) - * Add showcase Explorer Png (#581) (Fillips Ickevics) - * Add showcase Galaxy Of Art (#577) (Fillips Ickevics) - * Add showcase JPG.store (#576) (Fillips Ickevics) - * Fix autogenerated image path (#589) (Fillips Ickevics) - -[2022-04-05] - * Add showcase project Atala Scan (#575) (Fillips Ickevics) - * Add new showcase project Pavia (#574) (Fillips Ickevics) - * Add new tag (IDE) and IntelliJ IDE builder tool (#573) (Fillips Ickevics) - * Upgrade Docusaurus v2 beta18 (#572) (Tommy Kammerer) - -[2022-04-04] - * uring-complete -> Turing-complete (#570) (Jasper) - * commit march spotlight article (#569) (cislakk) - * Bump minimist from 1.2.5 to 1.2.6 (#568) (dependabot[bot]) - * documented a Create React App example under Serialization-Lib section in Get Started (#566) (dynamicstrategies) - -### Week ending April 1st -[no updates] - -### Week ending March 25th - -[2022-03-23] - * Update weekly report, week ending March 25 (#565) (Tommy Kammerer) - * Replace announcement (#564) (Tommy Kammerer) - * added cardano-wallet-connector (#562) (dynamicstrategies) - * Add Netlify deploy status badge (#563) (Tommy Kammerer) - * Adding ADAZOO to the Showcase! (#560) (Godspeed-exe) - * Update register-stake-keys.md (#556) (Leon Obendorf) - * Add Adax Pro Dex to showcases (#555) (Fillips Ickevics) - -### Week ending March 18th - -[2022-03-14] - * Add Minswap Dex to showcases (#554) (Fillips Ickevics) - * Grafana Tutorial: Adding Chapter 8 on Leadership Schedule and including Screenshots (#552) (SNSKY) - -[2022-03-14] - * Replace announcement (#564) (Tommy Kammerer) - * added cardano-wallet-connector (#562) (dynamicstrategies) - * Add Netlify deploy status badge (#563) (Tommy Kammerer) - * Adding ADAZOO to the Showcase! (#560) (Godspeed-exe) - * Update register-stake-keys.md (#556) (Leon Obendorf) - * Add Adax Pro Dex to showcases (#555) (Fillips Ickevics) - * Add Minswap Dex to showcases (#554) (Fillips Ickevics) - -### Week ending March 11th - -[2022-03-09] - * Update overview.md (#551) (John) - * Update overview.md (#550) (John) - * Update overview.md (#549) (John) - * Update marlowe.md (#548) (John) - * Update overview.md (#547) (John) - * cleaned up commands,outputs (#545) (BharatAtEMURGOIO) - * Update ansible-cardano-node.md (#541) (John) - * Update guild-ops-suite.md (#540) (John) - * Update cardano-key-pairs.md (#539) (John) - * Update overview.md (#538) (John) - * Update marketing-spo.md (#535) (John) - -### Week ending March 4th -[no updates] - -### Week ending February 25th -[no updates] - -### Week ending February 18th - -[2022-02-17] - * Update retrieving-metadata.md (#532) (Daniel Campos) - * Add February Spotlight Article and fix title of January Article (#533) (Fillips Ickevics) - * Update listening-for-payments-cli.md (#531) (Jiří Hofman) - * Bump prismjs from 1.25.0 to 1.27.0 (#529) (dependabot[bot]) - * Adding MermADA Minting (#527) (MermADA) - * Update weekly report, week ending February 11th and 18th (#526) (Tommy Kammerer) - * Update ansible-cardano-node.md (#525) (Moai Pool [MOAI]) - * Updated with link to the testnet metadata explorer (#522) (CENT) - -[2022-02-15] - * Update ansible-cardano-node.md (#525) (Moai Pool [MOAI]) - * Updated with link to the testnet metadata explorer (#522) (CENT) - -### Week ending February 11th - -[2022-02-09] - * Remove Legacy key from Creating keys and addresses (#521) (Jurijs I) - * Bump follow-redirects from 1.14.7 to 1.14.8 (#520) (dependabot[bot]) - * fix compiler name (#519) (Ofir Geller) - -[2022-02-08] - * Add Oura tool and Rust category tag (#518) (Tommy Kammerer) - * Builder tools updates (#517) (Tommy Kammerer) - -[2022-02-07] - * Showcase updates (#516) (Tommy Kammerer) - * CardaStat pool analytics tool to add to showcases. (#511) ([DEN]Ada Cardano Stakepool) - * Add PyCardano to builder tools (#508) (Jerry) - * Category updates (#515) (Tommy Kammerer) - -### Week ending February 4th - -[2022-02-04] - * Modify design of Tools and Showcase page (#514) (Fillips Ickevics) - * installing-cardano-wallet.md - fix windows url (#513) (Olof Blomqvist) - -[2022-02-01] - * Fix for #496 (but the core problem is trailing slash vs no trailing slash linking) (#505) (Tommy Kammerer) - * Update builder tools (#504) (Tommy Kammerer) - * Add 9 technical concept videos (Nerd Out) (#503) (Tommy Kammerer) - * Add Flint Wallet to showcase (#502) (Tommy Kammerer) - * update number of wallets (#477) (Robin Böning) - -### Week ending January 28th - -[2022-01-28] - * Fixing IFPS typos (#501) (Ryan Plauche) - * Bump simple-get from 4.0.0 to 4.0.1 (#500) (dependabot[bot]) - * Update weekly report, week ending January 28th (#499) (Tommy Kammerer) - * Bump node-fetch from 2.6.6 to 2.6.7 (#498) (dependabot[bot]) - -[2022-01-27] - * Bump node-fetch from 2.6.6 to 2.6.7 (#498) (dependabot[bot]) - * Update number of tokens after burning (#497) (Pavlin Yordanov) - * Add SundaeSwap DEX into showcases (#494) (Fillips Ickevics) - * Add January 2022 spotlight article (#493) (Fillips Ickevics) - * Bump nanoid from 3.1.30 to 3.2.0 (#491) (dependabot[bot]) - * Added Cardahub (#485) (cardahub-dev) - -### Week ending January 21st - -[2022-01-21] - * Update weekly report, week ending January 21 (#489) (Tommy Kammerer) - * Update configure-topology-files.md - Readability (#488) (David Azar) - * Automint - Python library (#431) (mcvetyty) - -[2022-01-17] - * Update configure-topology-files.md - Readability (#488) (David Azar) - * Automint - Python library (#431) (mcvetyty) - * Added Builder Tool: Cardano Light Tools (#443) (Orpheus) - * Update weekly report, week ending January 14th (#484) (Tommy Kammerer) - * cardano-wallet-interface showcase addition (#471) (Harmonic) - * Update installing-cardano-node.md (#483) (Priyank) - -### Week ending January 14th - -[2022-01-14] - * Bump shelljs from 0.8.4 to 0.8.5 (#482) (dependabot[bot]) - -[2022-01-12] - * Add a new showcase tag (DEX) & new showcase project (MuesliSwap) (#480) (Fillips Ickevics) - * Bump follow-redirects from 1.14.5 to 1.14.7 (#479) (dependabot[bot]) - * Correct era on Alonzo line (#476) (javidigani) - * Token Registry Script (#475) (Fillips Ickevics) - * Modify 'replace' functions with regex (#474) (Fillips Ickevics) - * Update minting-nfts.md (#473) (CBROS - Cardano Stake Pool) - * chore(get-started): updating cardano-node requirements (#462) (Marek Mahut) - * Update grafana-dashboard-tutorial.md (#469) (sandy4de) - * Exploring cardano-wallet - Some simplifications (#467) (Fabien Boucher) - -### Week ending January 7th -[2022-01-07] - * Add ADAdice to the project showcase (#466) (Flavien Charlon) - * Update overview.md (#465) (Giovanni Gargiulo) - -[2022-01-05] - * Update weekly report, week ending January 7th (#468) (Tommy Kammerer) - * Finalize serialization-lib docs auto generation (#464) (Tommy Kammerer) - * Use stack install command to install cardano-wallet (#460) (Fabien Boucher) - -[2022-01-04] - * use hex for asset names (#454) (Shawn McMurdo) - -### Week ending January 1st - -[no updates] - -### Week ending December 24th -[2021-12-24] - * update application link for the third cohort (#461) (Ben) - * Add Rust Library autogenerated content script (#459) (Fillips Ickevics) - * Updated cardano node installation for Mac/Mac M1 (#456) (Jurijs I) - * Added Catalyt Fund 6 results (#455) (Roberto C. Morano) - * Update weekly report, week ending xmas. **If you read this, please feel hugged.** (#453) (Tommy Kammerer) - -[2021-12-23] - * Add jq to the list of needed packages for CentOS (#452) (Fabien Boucher) - -[2021-12-22] - * Upgrade Docusaurus 2.0.0-beta.14 (#451) (Tommy Kammerer) - -[2021-12-20] - * Update weekly report, week ending December 17th (#448) (Tommy Kammerer) - * december spotlight article with adapools (#447) (cislakk) - -[2021-12-14] - * General styling fix on index page (#445) (Fillips Ickevics) - * CIP Integration (Cardano Improvement Proposals) (#444) (Tommy Kammerer) - -### Week ending December 17th - -[no updates] - -### Week ending December 10th - -[2021-12-10] - - * Update weekly report, week ending December 10th (#442) (Tommy Kammerer) - - * General styling fix on index page (#445) (Fillips Ickevics) - * CIP Integration (Cardano Improvement Proposals) (#444) (Tommy Kammerer) - -[2021-12-09] - - * Updated Dandelion references for the new gimbalabs.com website (#441) (Roberto C. Morano) - -[2021-12-07] - * Prerequisites of build of cardano-node on ARM (#437) (Jan Rajtr) - * Update Plutus tutorial link (#438) (Priyank) - * Upgrade Docusaurus to 2.0.0-beta.9 (#436) (Tommy Kammerer) - -[2021-12-06] - * Fix typo (#434) (Harsh Kedia) - * Update weekly report, week ending December 3rd (#433) (Tommy Kammerer) - -### Week ending December 3rd - -[2021-11-30] - * Adding Staking Rewards Calculator to the Showcases (#432) (dynamicstrategies) - * Explain base16 encoding of token names (#428) (Frank Hampus Weslien) - * Correcting minor typo (#427) (Brendon Thiede) - -[2021-11-25] - * Add weekly report (#425) (Tommy Kammerer) - * Updated cardano node instalation with 8.10.7 ghc (#424) (Jurijs I) - * Grafana Dashboard Tutorial (#422) (sandy4de) - -### Week ending November 26th - -[2021-11-24] - * Bump algoliasearch-helper from 3.4.4 to 3.6.2 (#421) (dependabot[bot]) - * Update installing-cardano-wallet.md for Linux (#420) (Jurijs I) - -[2021-11-19] - * November spotlight interview (#418) (cislakk) - * Minor changes for node installation on Linux (#417) (Jurijs I) - * Add Typhon wallet (#416) (Tommy Kammerer) - * Add py2hs to plutus.md (#413) (cffls) - -[2021-11-18] - * Update weekly report, week ending November 19th (#412) (Tommy Kammerer) - * Simple spelling correction. (#411) (Justin Syme) - * Add Fracada to builder tools. (#410) (Tommy Kammerer) - -### Week ending November 19th - -[2021-11-18] - * Simple spelling correction. (#411) (Justin Syme) - * Add Fracada to builder tools. (#410) (Tommy Kammerer) - -[2021-11-16] - * Update minting-nft to use transction build command (#377) (Mehtab Zafar) - * Add weekly report (also retroactive) (#409) (Tommy Kammerer) - -[2021-11-15] - * Showcase housekeeping (#408) (Tommy Kammerer) - -### Week ending November 12th - -[2021-11-11] - * updated with testnet version (#407) (nilaysaha) - * Update testnets-and-devnets.md (#405) (Alexander Fallenstedt) - * Fix typo (#404) (Donovan Dikaio) - -### Week ending November 5th - -[2021-11-03] - * Standardize code block formatting in Stake Pool Course handhook (#385) (Dan Loewenherz) - -### Week ending October 29th - -[2021-10-28] - * updated cardanosharp logo and website (#401) (Kyle Johns) - * fixed 404 to min ada value calculations (#400) (Nir Hagshury) - * updated docs for cardanosharp (#399) (Kyle Johns) - * Remove all start URLs as entry point to use default "scrape all" behavior (#397) (Tommy Kammerer) - * YouTube typo fixed (#391) (Duzij) - * Update minting-nfts.md (#382) (Nico Krause) - -### Week ending October 22th - -[no updates] - -### Week ending October 15th - -[2021-10-12] - * Turn "funding" into "governance category + bring CIPs in (#394) (Tommy Kammerer) - * october spotlight article (#393) (cislakk) - * Update minting-nfts.md (#379) (CBROS - Cardano Stake Pool) - * Showcase addition: Ansible cardano-node (#376) (Moai Pool [MOAI]) - * Stake Pool Course, Handbook, minor changes (#373) (Jurijs I) - * Update installing-cardano-wallet.md (#372) (simonholmes001) - * added pooldata API to builder tools (#364) (mik1893) - * Update installing-cardano-node.md to specifically run cabal build for cardano-node and cardano-cli. Trying to run cabal build all leads to a failure preventing the node and cli build from working. (#361) (Extra Mile IT) - * Update minting.md (#356) (Ariel Elkin) - -[2021-10-11] - * Update installing-cardano-wallet.md (#353) (Ariel Elkin) - * Update running-cardano.md (#352) (Ariel Elkin) - * Add careers on Cardano page (#350) (Tommy Kammerer) - * Showcase fixes (#349) (Tommy Kammerer) - -### Week ending October 8th - -[2021-10-06] - * Fix captcha issue raised in #339 (#346) (Tommy Kammerer) - * Fixes documentation Stake Pool Course Handbook (#342) (Jurijs I) - * Change witness count to 2 for minting transactions (#323) (brouwerQ) - * Change witness count to 2 for minting transactions (#322) (brouwerQ) - * Update node checkout references, replace home directory references (#341) (Priyank) - -### Week ending October 1st - -[2021-10-01] - * Minor correction (#344) (Ganesh) - * update instructions for cardano-wallet 2021.09.09 (#319) (Dan Loewenherz) - * Add cardano-wallet-js (#313) (Leobel Izquierdo) - -[2021-09-26] - * added cardano-tools.io (#277) (Peter Großmann) - * Changed "10000 blocks" to "10000 slots" (#324) (brouwerQ) - * Fix small typos in minting.md (#334) (Francisco Garmendia) - -### Week ending September 24th - -[2021-09-24] - * minor documentation tweaks on Ogmios. (#327) (Matthias Benkort) - -[2021-09-22] - * Varia (#320) (Tommy Kammerer) - * Spotlight fixes (#315) (Tommy Kammerer) - * minor bug (#314) (Martin Lang) - * fix broken faucet link (#312) (AVA) - * Bump prismjs from 1.24.1 to 1.25.0 (#311) (dependabot[bot]) - -[2021-09-20] - * Use `HydraBuildList` to provide latest release binaries (with fallback) (#300) (Alexander Klee) - -### Week ending September 17th - -[2021-09-15] - * Delete duplicate article (#310) (Tommy Kammerer) - * Update creating-wallet-faucet.md (#307) (Javier La Banca) - * september spotlight article (#306) (cislakk) - * Removing the random constraint for building wallet (#297) (John Imison) - * fix typo (#305) (cislakk) - -[2021-09-13] - * Adding alonzo genesis files (#291) (John Imison) - * Fixes Cardano Explorer and Pull Request Template links (#272) (Rodrigo Matos) - * Bump axios from 0.21.1 to 0.21.4 (#285) (dependabot[bot]) - -[2021-09-12] - * Add playgrounds (#288) (Tommy Kammerer) - * Add smart-contract search entry point (#287) (Tommy Kammerer) - * Fix pioneer link (Tommy Kammerer) - -### Week ending September 10th - -[2021-09-08] - * Add smart contract category (#284) (Tommy Kammerer) - * set placeholder fee for fee-calculating transaction (#283) (Robert Phair) - * Upgrade Docusaurus to v2.0.0 beta.6 (#282) (Tommy Kammerer) - -[2021-09-07] - * Add explorer link and made them both English (#276) (Mike Coleman) - * Correct "Minting" Link under Setup (#273) (Mike Coleman) - * chore: fix typo in docs (#270) (Chris) - -### Week ending September 3rd - -[2021-09-03] - * Merge PRs #258, #261, #262, #263, #264, #269, and #280 into main (#281) (Tommy Kammerer) - * Update testnet page (Alonzo) (#280) (Tommy Kammerer) - -### Week ending August 27th - -[2021-08-27] - * Fix typo in portal style guide (#269) (Ben Bowen) - -[2021-08-25] - * removed unsigned_algorithms (#264) (Alexander Watanabe) - * fix repetition of 'the' (#263) (Bb) - -[2021-08-24] - * quickfix typo (#262) (Daniel Koman) - * Fix spelling of 'metadata' (#261) (Pedro Moreira) - -### Week ending August 27th - -[2021-08-19] - * Fix Spelling of Address (#258) (Charles Jenkins) - * Merged PRs #176, #163, #220, #240, #246, #244, #245, #249, #256 to main (#260) (Clark Alesna) - * august developer spotlight article mercury (#256) (cislakk) - -[2021-08-18] - * Update get started with developer community (#249) (Tommy Kammerer) - -[2021-08-16] - * IO Fix (#245) (cislakk) - * removed duplicate for copy command (#244) (Jackson Barnes) - * fix: backslash missing from code example (#246) (Ari V) - -[2021-08-15] - * fix urls and native token sentence (#240) (cislakk) - * Add Python Module (#220) (Michał Sałaban) - -[2021-08-14] - * Added The Galgos NFT project (#163) (thegalgos) - -### Week ending August 13th - -[2021-08-13] - * Add showcase guideline proposed in #176 (#235) (Tommy Kammerer) - -[2021-08-12] - * Bump path-parse from 1.0.6 to 1.0.7 (dependabot[bot]) - * House keeping 08 11 2021 (#229) (Clark Alesna) - -[2021-08-10] - * Add libada-go library (#230) (Tommy Kammerer) - * Fixes broken link (#236) (Frank DelPidio) - * with new updates, comes new docs (#233) (Kyle Johns) - * Create codeql-analysis.yml (Clark Alesna) - * Bump prismjs from 1.23.0 to 1.24.1 (dependabot[bot]) - * Bump color-string from 1.5.4 to 1.6.0 (dependabot[bot]) - * Typo Correction (#231) (Aadesh Jadhav) - -[2021-08-09] - * Add Guild Ops Suite as Operator tool (#228) (Priyank) - -### Week ending August 6th - -[2021-08-04] - * Merge PR #219, #222 and #226 into main (#227) (Tommy Kammerer) - * create nft minting standard blog post (#226) (cislakk) - * fix spelling and script params when build and sign minting transaction (#222) (Shawn McMurdo) - * Add testnet faucet (#219) (Tommy Kammerer) - -[2021-08-03] - * Merge PR #206, #208, #212, and #214 into main (#218) (Tommy Kammerer) - * simple update. making sure build and test statuses are accurate for developers (#214) (Kyle Johns) - * Add tag/category feature for builder tools (#212) (Tommy Kammerer) - * added H.Y.P.E. Skulls entry to showcases (#208) (Perkins Jon Ong) - * Request to add Politikoz to the ShowCase (#206) (Thiago Senechal) - -[2021-08-02] - * Merge PR #128 and #205 into main (#207) (Tommy Kammerer) - -### Week ending July 30th - -[2021-07-30] - * staging Add tokhun.io project (#205) (Tokhun.io) - * Add Pigy Token to the Showcase (#128) (Gregor) - -[2021-07-29] - * Merge PR #199 and #200 into main (#202) (Tommy Kammerer) - * Replace announcement with Cardano Stack Exchange (#200) (Tommy Kammerer) - * Fixed typos and markdown (#199) (Alex Ruttkowski) - * Merge PR #187 and #196 into main (#198) (Tommy Kammerer) - -[2021-07-28] - * General Markdown Fixes on Mint Page (#196) (Kyle Johns) - * Added NFTdot.io entry as per latest requirements (#187) (NFT dot) - -[2021-07-26] - * Merge PR #135, #191 and #192 into main (#195) (Tommy Kammerer) - * builder-tools: adding cardano-metadata-oracle (#192) (Marek Mahut) - * Fix links in Rust lib (#191) (Tommy Kammerer) - * Added NFTdot.io entry as per latest requirements (#187) (NFT dot) - -[2021-07-25] - * Update showcase descriptions without claims of being the first something (Tommy Kammerer) - -[2021-07-24] - * Update showcases.js (TurboEgon) - * Update showcases.js (TurboEgon) - * Cleanup comments (Alexander Klee) - -### Week ending July 23th - -[2021-07-23] - * Update PULL_REQUEST_TEMPLATE.md (Alexander Klee) - * change quotes to comments instead (Alexander Klee) - * Update PULL_REQUEST_TEMPLATE.md (Alexander Klee) - * add .github/PULL_REQUEST_TEMPLATE.md (Alexander Klee) - * Add Pull Requests section (Alexander Klee) - * Update CONTRIBUTING.md (Alexander Klee) - * add examples directory to structure (tweakch) - * update email (Alexander Klee) - * Update CONTRIBUTING.md (Alexander Klee) - * Create CONTRIBUTING.md (Alexander Klee) - * Create CODE_OF_CONDUCT.md (Alexander Klee) - * Changed port 1338 to 1337 to match later requests (Hrvoje Čukman) - -[2021-07-22] - * add url and text for nftas (Kevin Cislak) - * Add cardanosharp-wallet to sidebars.js (Tommy Kammerer) - * Fix broken link (Tommy Kammerer) - * Remove broken docs.cardano.org link (Tommy Kammerer) - * Remove link based on issue #170 (Tommy Kammerer) - * Add suggest content link (Tommy Kammerer) - * Fix absolute links (Tommy Kammerer) - * Fix docs.cardano.org link (Tommy Kammerer) - * updated http to https (Kyle Johns) - * Added the .NET Wallet/Serialization Library to the Tools section. (Kyle Johns) - -[2021-07-21] - * Decouples ShowcaseCard component (William Bogans) - * add rest-book extension (tweakch) - * fix typo (tweakch) - * * fix headers * refactor csharp code (tweakch) - * fix headers (tweakch) - * Adds missing periods in `portal-contribute.md` (William Bogans) - -[2021-07-20] - * fix slug typo for spotlight article (Kevin Cislak) - * * use filename in codeblocks * improve maintainability through smaller listings * fix markdown warnings * refactor csharp example (tweakch) - * Update gtag (Tommy Kammerer) - -[2021-07-19] - * Update readme (Tommy Kammerer) - * add july spotlight article (Kevin Cislak) - * Add cardano-addresses TypeScript binding to builder tools (Tommy Kammerer) - * Remove "on-chain" (Tommy Kammerer) - * Update showcases.js (TurboEgon) - -[2021-07-18] - * Add tx meta data presentation slides (Tommy Kammerer) - * Add tx metadata workshop and use cases (Tommy Kammerer) - * Add minting NFT video (Tommy Kammerer) - * Added Crypto Heroez project to the showcase. (Jiri Hysek) - -### Week ending July 16th - -[2021-07-16] - * fix typos and clarify (tweakch) - * added illustration for showcase cardano token builder (Anselme) - * Updates Showcases with cardano token and Nft Builders (Anselme) - -[2021-07-15] - * Clarify showcase guidelines even more (Tommy Kammerer) - * Add Alexander Klee to contributors (Tommy Kammerer) - * add guide multi-witness transactions (tweakch) - * undo change to header (tweakch) - * * fix markdown warnings * add note avoid top-level headings * add section extensions and configuration (tweakch) - -[2021-07-14] - * add .markdownlint (tweakch) - * resolve markdownlint warnings (tweakch) - * add php linting (tweakch) - * add .vscode (tweakch) - * Added CardanoWaves & CardanoAlerts (bitm4ster) - * Add SPOCRA to the list of Stake pool resources (Jonathan Adjei) - * Add files via upload (frog357) - * Adding MetroMermaids Mint Tool (frog357) - -[2021-07-13] - * Update project catalyst (Tommy Kammerer) - * Fix typos (issue #121) (Tommy Kammerer) - * Make the blogpost preview a bit more appealing (Tommy Kammerer) - * Add blog post (Tommy Kammerer) - * JES-Art added (Sp33dy) - * JES Art splash image (Sp33dy) - * Fix dot (Tommy Kammerer) - * Revise "add your project"-guidelines (Tommy Kammerer) - * Revert "Revise "add your project"-guidelines" (Tommy Kammerer) - * Revise "add your project"-guidelines (Tommy Kammerer) - * Update showcases.js (Giovanni Gargiulo) - * fix: wrong youtube link on transaction fee (Ygor Gasparin) - * Update showcases.js (TurboEgon) - * Add files via upload (TurboEgon) - -[2021-07-12] - * added nami wallet (Alessandro) - * add Kryptoids showcase image (Kryptoids) - * add Kryptoids to showcases.js (Kryptoids) - * Update cardano-components.md (Ganesh Nithyanandam) - * add Haskell learning resource (tweakch) - * remove '.' from image tag (tweakch) - * chore(builder-tools): typo (Marek Mahut) - * fix backticks in js tab (tweakch) - * Add DEADPXLZ image to showcase file (DEADPXLZ) - * Add DEADPXLZ to showcases.js (DEADPXLZ) - * Added Google Tag Manager plugin (Clark Alesna) - -[2021-07-10] - * temporary fix for the cache (Clark Alesna) - * Cache fix redirect (Tommy Kammerer) - * Replace staging links with production links (Tommy Kammerer) - * Add welcome survey (Tommy Kammerer) - * Add transaction fee video (Tommy Kammerer) - * Add showcase projects (Tommy Kammerer) - * Provide pure NFT projects only the tag `nft` (Tommy Kammerer) - * Replace testnet faucet url (Tommy Kammerer) - -### Week ending July 9th - -[2021-07-09] - * Update open graph image (Tommy Kammerer) - * Add testnets and devnets (Tommy Kammerer) - * fix typos to retrieving metadata devportal content. (Kevin Cislak) - * correct typos for metadata transaction wallet devportal content. (Kevin Cislak) - * correct typos metadata transaction-cli devportal content. (Kevin Cislak) - * correct typos for metadata overview devportal content. (Kevin Cislak) - * Correct typos to token registry devportal content (Kevin Cislak) - * correct typos for minting nfts devportal content (Kevin Cislak) - * correct typos for minting native asset devportal content (Kevin Cislak) - -[2021-07-08] - * Replace link (Tommy Kammerer) - * Update cardano components (Tommy Kammerer) - * Remove why.cardano.org (Tommy Kammerer) - * Clarify statement (Tommy Kammerer) - * Add terms and privacy policy (Tommy Kammerer) - * Updated Stake Pool Operating section for any link reference to cardano-node install and run to the new articles in getting started (Clark Alesna) - * Removed Title for Landing Page (Clark Alesna) - * correct typos on native tokens overview devportal content (Kevin Cislak) - * correct typos on getting started devportal content (Kevin Cislak) - -[2021-07-07] - * Update landing page copy (Tommy Kammerer) - * Added all the links needed for any reference of the Testnet Faucet (Clark Alesna) - -[2021-07-06] - * Add redirects to ensure a smooth transition between the subdomains (Tommy Kammerer) - * Fixed broken links (Clark Alesna) - * Added Blockfrost Example to retrieve tx-metadata (Clark Alesna) - * Move playgrounds into signpost article to be consistent with "we cover everything you can do today on the Cardano mainnet" (Tommy Kammerer) - * Update get started (Tommy Kammerer) - -[2021-07-05] - * Tweak sorting and linking of technical concepts (Tommy Kammerer) - * Update stake pool operator resources (Tommy Kammerer) - * Update builder tools (Tommy Kammerer) - * Update showcase projects (Tommy Kammerer) - * Update requirements to add a builder tool/showcase project (Tommy Kammerer) - * adjustment (Clark Alesna) - * Finalized Tx Metadata Overview article (Clark Alesna) - * Overview Updates (Clark Alesna) - * Fix text (Tommy Kammerer) - * Add technical concepts (Tommy Kammerer) - -[2021-07-04] - * Add `decimals` entry (Tommy Kammerer) - * Update and rename _redirects to netlify.toml (Cardano Foundation Team) - * Remove broken links (Tommy Kammerer) - * Fix Marlowe tutorial link (Tommy Kammerer) - * Fix Ogmios links (Tommy Kammerer) - * Fix open graph link (Tommy Kammerer) - * Update searchconfig (Tommy Kammerer) - * Rename stake pool operation file structure to reflect category, fix all links (Tommy Kammerer) - * Adjust slug for remaining categories (Tommy Kammerer) - * Rename funding file structure to reflect category, fix all links (Tommy Kammerer) - * Rename cardano-integration file structure to reflect category, fix all links (Tommy Kammerer) - -[2021-07-03] - * Rename getting-started file structure to reflect category, fix all links (Tommy Kammerer) - * Ensure a (generic) open graph image and a description on every page (Tommy Kammerer) - * Add announcement bar guidelines (Tommy Kammerer) - * Optimize headers (Tommy Kammerer) - -### Week ending July 2nd - -[2021-07-02] - * Revise funding category (Tommy Kammerer) - -[2021-07-01] - * Text review (Tommy Kammerer) - * Reduce the developer community links in the footer with its own page (Tommy Kammerer) - * follow-up commit (Clark Alesna) - * Updated docusaurus to beta.3 (Clark Alesna) - * Optimized PortalHero Component for Maximum Reusability (Clark Alesna) - * Implemented new herobanner visual changes (Clark Alesna) - -[2021-06-30] - * text adjustments (Clark Alesna) - * Metadata Guides for cardano-cli and cardano-wallet (Clark Alesna) - * Add open graph information (Tommy Kammerer) - * Revise Cardano Token Registry (Tommy Kammerer) - -[2021-06-29] - * Simplify the redirects. (Tommy Kammerer) - * Add .netlify.toml file with redirect example (Tommy Kammerer) - * Fix static link (need to link directly) (Tommy Kammerer) - * Fix static link (again) (Tommy Kammerer) - * Fix static link (Tommy Kammerer) - * Replace “getting started” with “get started” for consistency (Tommy Kammerer) - * Fix static link (Tommy Kammerer) - * Replace “getting started” with “get started” for consistency (Tommy Kammerer) - * Fix placeholder (Tommy Kammerer) - * Change menu structure as proposed in the document (Tommy Kammerer) - * Migrate documentation for Cardano Serialization Lib (Tommy Kammerer) - * Add getting started with Cardano Serialization Lib (Tommy Kammerer) - -[2021-06-28] - * Fix Pioneer program link (Tommy Kammerer) - * Update landing page (Tommy Kammerer) - * Update generic open graph image. (Tommy Kammerer) - * Add Plutus pioneer program and Chris Moreton's work (Tommy Kammerer) - * Remove meta data connector (Tommy Kammerer) - -[2021-06-26] - * Revert "Upgrade Docusaurus to 2.0.0-beta.2" (Tommy Kammerer) - * Upgrade Docusaurus to 2.0.0-beta.2 (Tommy Kammerer) - * Update "operate a stake pool" overview (Tommy Kammerer) - -### Week ending June 25th - -[2021-06-25] - * fix typos for funding cfund devportal content (Kevin Cislak) - * fix typos for funding dcfund devportal content (Kevin Cislak) - * Fix typos for funding overview (Kevin Cislak) - * Fix typos for integration installing node devportal content (Kevin Cislak) - * Fix typos for integration running cardano nodes devportal content (Kevin Cislak) - -[2021-06-24] - * Modify list to chronological (Tommy Kammerer) - * Fix link (Tommy Kammerer) - * Adjust overview text (Tommy Kammerer) - * Modify menu structure (Tommy Kammerer) - * Adjust some texts (Tommy Kammerer) - * Fix typos for getting started overview and what is already possible today devportal content (Kevin Cislak) - * finished nft minting and checked everything is working (Alex) - -[2021-06-23] - * Added JS, TS and PY language samples for `Receive Payments with cardano-wallet` article. Other minor adjustments (Clark Alesna) - -[2021-06-22] - * Fix typo for the how did it start section (Kevin Cislak) - * Fix link (Tommy Kammerer) - * Update overview and placeholders. (Tommy Kammerer) - * Update contributors (Tommy Kammerer) - * Add key pair article. (Tommy Kammerer) - * First version for `Receiving Payments with cardano-wallet` guide. Minor adjustments (Clark Alesna) - -[2021-06-21] - * Finished rough draft of minting NFTs (Alex Ruttkowski) - -[2021-06-20] - * title adjustments (Clark Alesna) - * Fix structure and broken links in the marketing spo article (Nazeim) - * startet minting nfts (Alex) - -[2021-06-19] - * minting.md works with copy and paste as intended (Alex) - * Finished minting.md next up, test-run (Alex) - -### Week ending June 18th - -[2021-06-18] - * startet with minting.md (Alex) - -[2021-06-17] - * Revise article based on Daniel R.'s feedback. (Tommy Kammerer) - * Add IOHK logo for light and dark mode (Tommy Kammerer) - * tabs sync for receive payment cli guide (Clark Alesna) - -[2021-06-16] - * more title adjustments (Clark Alesna) - * label adjustments (Clark Alesna) - * Added Typescript code example for 'Listening for Payments' article (Clark Alesna) - * Add reference to NFT metadata standard CIP and make clear this is one way to do it (Tommy Kammerer) - * Update "Get Started" (Tommy Kammerer) - -[2021-06-15] - * minting native assets and nfts added (Alex) - * Added images and almost finished overview (Alex) - * C# Example Refinements, Added Python Example for `Listening Payments` Guide (Clark Alesna) - -[2021-06-14] (developer portal launch) - * Add alt tags for category images (Tommy Kammerer) - * Create category title images for overview pages (Tommy Kammerer) - * initial C# version for `Listening for Payments` guide (Clark Alesna) - * Update contributors (Tommy Kammerer) - * Prepare overview page (Tommy Kammerer) - * Fix formatting (Tommy Kammerer) - * Fix spelling mistakes and grammar (Tommy Kammerer) - * Migrate Alex | @ruttkowa's NFT article (Tommy Kammerer) - -### Week ending June 11th - -[2021-06-10] - * Finalized Structure for the `Listening Payment` article and completed javascript version. (Clark Alesna) - * first nft commit (Alex) - -[2021-06-09] - * Provide a basic skeleton for the get started category (Tommy Kammerer) - * Partial Content for Receive Payment Code Example Article (Clark Alesna) - * Add link to all contributors (Tommy Kammerer) - * Reduce the organization logo and give room to breath (Tommy Kammerer) - * Update the graphics of the categories to address new suggestions and dark mode (Tommy Kammerer) - -[2021-06-08] - -[2021-06-07] - * Some adjustments and Cleanup (Clark Alesna) - * Add new Cardano branded assets (Tommy Kammerer) - -### Week ending June 4th - -[2021-06-04] - * Fix for Ogmios new GitHub organization (Tommy Kammerer) - * Marketing a stake pool (Nazeim) - -[2021-06-03] - * Finalized cardano-wallet usage guide (Clark Alesna) - -[2021-05-31] - * Partial cardano-wallet usage guide. Minor adjustments (Clark Alesna) - * Some corrections for the running-cardano guide (Clark Alesna) - * Finalized cardano-wallet Install Guide (Clark Alesna) - -### Week ending May 28th - -[2021-05-28] - * More grammar adjustments (Clark Alesna) - * Minor Adjustments (Clark Alesna) - * utxo model minor change (ubinatus) - * classic UTx0 model brief explanation (ubinatus) - * assignment 1: replace info with ul (ubinatus) - * readability improvement (ubinatus) - -[2021-05-26] - * Finalized Wallet Creation guide with cardano-cli (Clark Alesna) - -[2021-05-25] - * Update category sorting (Tommy Kammerer) - * Update action words (Tommy Kammerer) - * Update contributors list (Tommy Kammerer) - * Remove all unused pages (Tommy Kammerer) - * Fix typo (Tommy Kammerer) - * Feature Gimbalabs (Tommy Kammerer) - * Update Stack Exchange announcement (Tommy Kammerer) - * Temporary fix for the heroBanner on tools and showcases (Tommy Kammerer) - -### Week ending May 21th - -[2021-05-21] - * Initial Cardano Wallet and Faucet guide (Clark Alesna) - * Changed wording and added call to action (Roberto C. Morano) - * Initial Gimbalabs Playground approach (Roberto C. Morano) - * Fixed label name (Roberto C. Morano) - * Added 'Educational' category to showcase section (Roberto C. Morano) - -[2021-05-20] - * Follow-up adjustments in the *running cardano* guide (Clark Alesna) - * Finalized Running Cardano Guide (Clark Alesna) - -[2021-05-19] - * More Updates (Clark Alesna) - * Updated Running Cardano Guide (Clark Alesna) - * removed broken link (Clark Alesna) - * Temporary Fix for the heroBanner in the Landing Page (Clark Alesna) - -[2021-05-18] - * Added the --socket-path argument details section (Clark Alesna) - * Initial Content for Running Cardano Node Guide (Clark Alesna) - -[2021-05-17] - * Added In-Progress Notice to Windows Guide. Some Minor Addtions and Adjustments (Clark Alesna) - * Some fixes (Roberto C. Morano) - * Initial approach for Gimbalabs' Dandelion APIs view (Roberto C. Morano) - -### Week ending May 14th - -[2021-05-14] - * Minor Adjustments (Clark Alesna) - * First version of the MacOS Guide for Installing and Compiling Cardano Node and CLI (Clark Alesna) - -[2021-05-13] - * Add two more showcase projects (Tommy Kammerer) - * Update Cardano Stack Exchange links (Tommy Kammerer) - * Add two more showcase projects (Tommy Kammerer) - * Remove getting started with Serialziation-lib, add getting started with Ogmios (Tommy Kammerer) - * Add basic Ogmios page (Tommy Kammerer) - * some more clarifications for the download binaries section (Clark Alesna) - -[2021-05-12] - * Updated NodeJS Dependencies, docusaurus alpha to beta (Clark Alesna) - * Some minor adjustments (Clark Alesna) - * Initial Cardano Node Guide for Installing and Compiling on Linux (Clark Alesna) - -[2021-05-11] - * Code formatting (Tommy Kammerer) - * Add game category/tag (Tommy Kammerer) - * Fix adatools screenshot (Tommy Kammerer) - * Move two projects from builder tools to showcase (Tommy Kammerer) - * Add showcase projects (Tommy Kammerer) - -[2021-05-10] - * Add showcase projects (Tommy Kammerer) - * Fix tag (Tommy Kammerer) - * Added Syntax Highlight Support for C#. Added CLI sub-category for Cardano Integration main category. Some Adjustments to the example JS and C# code (Clark Alesna) - * Add wget example to all the examples (Tommy Kammerer) - * Add another Blockfrost example: query a specific native token (Tommy Kammerer) - * Add another Blockfrost example: query stake pool data (Tommy Kammerer) - * Initial Listening for ADA Payments documentation (Clark Alesna) - * JS/Node Example for Cardano CLI Payment Address Polling (Clark Alesna) - * C# .NET Example for Cardano CLI Payment Address Polling (Clark Alesna) - * Add showcase projects and categories (Tommy Kammerer) - -### Week ending May 7th - -[2021-05-04] - * Add wallet category and projects (Tommy Kammerer) - * Add pool tool category and projects (Tommy Kammerer) - * Add block explorer category and projects (Tommy Kammerer) - * Add category/tag feature in showcase, sorting, value checking, check if open source tags have the open source field (Tommy Kammerer) - * Add components for the category/tag feature (Tommy Kammerer) - -### Week ending April 30th -[2021-04-30] - * Update code styling (Tommy Kammerer) - * Update code styling (Tommy Kammerer) - * Update code styling (Tommy Kammerer) - * Update code styling (Tommy Kammerer) - -[2021-04-26] - * Combine FAQ with Catalyst and fix some formatting issues (Nazeim) - * Combine FAQ to Catalyst and fix formatting issues (Nazeim) - -[2021-04-24] - * New line markdown fix (Ola) - -### Week ending April 23th - -[2021-04-23] - * Fix reference style logo (Tommy Kammerer) - * Condense admonitions in simple tabs (Tommy Kammerer) - * Show both raw markdown and the end result in the rest of the document (Tommy Kammerer) - * Condense code examples in simple tabs. Show both raw markdown and the end result. (Tommy Kammerer) - * Condense basic markdown examples in simple tabs. Show both raw markdown and the end result. (Tommy Kammerer) - -[2021-04-20] - * Update Funding Section (Nazeim) - * Add Funding Types (Nazeim) - -[2021-04-19] - * Add sidebar entry for cardanocli-js (Tommy Kammerer) - * Ensure alphabetical order (Tommy Kammerer) - * changed SpaceBudz description; added cardanocli-js (Alessandro) - * Fix different CTA button in production and development mode (Tommy Kammerer) - -[2021-04-18] - * Fix footer link (Tommy Kammerer) - * Make the footer link more visible in light mode (Tommy Kammerer) - * Move "testnet"-box inside the course (Tommy Kammerer) - * Remove text in "note"-boxes and add it in descriptive text to reduce the excessive use of "note"-boxes. Add one "question and suggestion"-box at the end of every lesson. (Tommy Kammerer) - * Remove welcome video and simplify texts (Tommy Kammerer) - * Simplify texts (Tommy Kammerer) - * Condense lesson 5 into just one page (Tommy Kammerer) - * Simplify texts (Tommy Kammerer) - * Condense lesson 4 into just one page (Tommy Kammerer) - * Simplify texts (Tommy Kammerer) - * Condense lesson 3 into just one page (Tommy Kammerer) - * Simplify texts (Tommy Kammerer) - * Condense lesson 2 into just one page (Tommy Kammerer) - * Remove unnecessary escapes of the brackets (Tommy Kammerer) - * Remove GitBook anchors (Tommy Kammerer) - * Remove broken image. (Tommy Kammerer) - * Condense (re)introduction into just one page and simplify texts (Tommy Kammerer) - -### Week ending April 16th - -[2021-04-16] - * Simplify texts (Tommy Kammerer) - * Condense lesson 1 into just one page (Tommy Kammerer) - * Adjust all titles and slugs (Tommy Kammerer) - * Rename Spotlight to Dev Blog (Tommy Kammerer) - -[2021-04-15] - * Add getting started with Blockfrost (Tommy Kammerer) - -[2021-04-14] - * Update note boxes in lesson 5 (Tommy Kammerer) - * Update note boxes in lesson 4 (Tommy Kammerer) - * Delete unnecessary file (Tommy Kammerer) - * Update note boxes in lesson 3 (Tommy Kammerer) - * Update note boxes in lesson 2 (Tommy Kammerer) - * Update note boxes in lesson 1 (Tommy Kammerer) - * Fix notes (Nazeim) - * fix broken link (Tommy Kammerer) - * Remove unrelated references (Tommy Kammerer) - * Fix note style (Tommy Kammerer) - * Update open graph preview and sidebar label (Tommy Kammerer) - * Remove non related articles (Tommy Kammerer) - * Change order, SPO <--> Funding (Tommy Kammerer) - -[2021-04-12] - * Prepare stake pool operation category (Tommy Kammerer) - * Prepare project funding category. (Tommy Kammerer) - * Update more about Cardano links (Tommy Kammerer) - * Rename "payment integration" to "Cardano integration" (Tommy Kammerer) - * Add category image to overview page (Tommy Kammerer) - * Ensure correct syntax highlighting (Tommy Kammerer) - * Update meta data connector description (Tommy Kammerer) - * Add NFT maker to showcases (Tommy Kammerer) - -### Week ending April 9th - -[2021-04-09] - * Add contributors page (Tommy Kammerer) - * Fix wrong link (Tommy Kammerer) - * Fix duplicate routes issue (Tommy Kammerer) - * Move code examples into style guide, remove examples (Tommy Kammerer) - -[2021-04-05] - * Add lesson 4,5 (Nazeim) - -[2021-04-04] - * Update README and "how to contribute"-article (Tommy Kammerer) - * Create LICENSE (Tommy Kammerer) - * Add Spacebudz NFT to showcase (Tommy Kammerer) - * Add November 2020 developer spotlight (Tommy Kammerer) - * Change blue color in dark mode to make it more readable (Tommy Kammerer) - * Link to getting started until it is clear what sign-up CTA is (Tommy Kammerer) - * Update overivew and Add lesson 2, 3 (Nazeim) - -### Week ending April 2nd - -[2021-03-31] - * clean and handicap friendly (Markus) - -[2021-03-30] - * Update spotlight tags (Tommy Kammerer) - * Add March spotlight (Tommy Kammerer) - * Move spotlight screenshots to it's own folder (Tommy Kammerer) - * Add getting-started links and placholder page to builder tools projects (Tommy Kammerer) - * Update "more about Cardano" links (Tommy Kammerer) - * Remove documentation link at the bottom (Tommy Kammerer) - * Replace blindtext on the start page with real text (Tommy Kammerer) - -### Week ending March 26th - -[2021-03-24] - * Update stake pool course overview (Nazeim) - * Update Lesson 1 and fixed some issues (Nazeim) - * Update developer portal links (Tommy Kammerer) - * Update developer community links (Tommy Kammerer) - * Update more about Cardano links (Tommy Kammerer) - * Update announcement bar color and font weight (Tommy Kammerer) - -[2021-03-23] - * Update transaction metadata section (Nazeim) - * Add metadata registry overview and Update how to article (Nazeim) - -### Week ending March 19th - -[2021-03-18] - * Add Cardano Wall to showcase (Tommy Kammerer) - * Add "last updated on x by y" at the bottom of every doc page (Tommy Kammerer) - -[2021-03-17] - * Add logos for Marlowe and Plutus (Tommy Kammerer) - * Update getting started page (Tommy Kammerer) - * Add "install cardano-node" article (Tommy Kammerer) - -[2021-03-16] - * Add mainnet warning (Tommy Kammerer) - * Add articles "alternative to AWS" and "setup firewall" (Tommy Kammerer) - * Replace announcement with stack exchange proposal (Tommy Kammerer) - -[2021-03-15] - * Update open graph default image (Tommy Kammerer) - * Update blind text (Tommy Kammerer) - * Fix links to handbook (Tommy Kammerer) - * Add "getting started" and "funding" box on start page (Tommy Kammerer) - * Replace blind text with different blind text :) (Tommy Kammerer) - * Fix native token overview (Tommy Kammerer) - * Add article "installing VirtualBox in written and video format (Tommy Kammerer) - * Add article "setup a server on aws" in written and video format. (Tommy Kammerer) - * Move introductory lesson to its own folder (Tommy Kammerer) - * Simplify the introduction/overview (Tommy Kammerer) - * Add stake pool course introduction articles (Tommy Kammerer) - * Add start page box for the stake pool course and the first introduction articles (Tommy Kammerer) - -[2021-03-14] - * Update cardano registry article (Nazeim) - * Update Cardano registry article (Nazeim) - * Add how to create metadata transaction (Nazeim) - * Add how to guide for cardano token registry (Nazeim) - -### Week ending March 12th - -[2021-03-12] - * Move the PortalHero method to its own file (Tommy Kammerer) - * Add custom fields in configuration to access repository and branch setting from components (Tommy Kammerer) - * Fix broken links (Tommy Kammerer) - * Add portal header to builder tools and showcase (Tommy Kammerer) - * Add signup example page (Tommy Kammerer) - * Replace title images for start page boxes: Transaction Metadata, Payment Integration, Native Tokens (Tommy Kammerer) - -[2021-03-11] - * Rename start boxes to reflect new focus (Tommy Kammerer) - * Replace characters for consistency (Tommy Kammerer) - * Move everything we are not currently focusing on to "unused" (Tommy Kammerer) - * Add native tokens overview page (Tommy Kammerer) - -### Week ending March 5th - -[2021-03-02] - * Add payment integration overview page (Tommy Kammerer) - * Add transaction metadata overview page (Tommy Kammerer) - * Add example page to present different code examples in different languages (Tommy Kammerer) - * Change link to docs to docs.cardano.org, docs are external for the time being (Tommy Kammerer) - -[2021-03-01] - * Optimise builder tool and showcase screenshots (Tommy Kammerer) - * Add Cardano Kidz to showcase (Tommy Kammerer) - * Increase CTA button size on builder tools and showcase (Tommy Kammerer) - * Add token tool and transaction meta data browser to builder tools (Tommy Kammerer) - * Turn button into call to action button (without actual call to action) (Tommy Kammerer) - * Replace GitHub text link with GitHub logo link on start page (Tommy Kammerer) - * Update links in footer of the start page (Tommy Kammerer) - * Update title images for start page boxes (Tommy Kammerer) - * Adjust all start page boxes to the same height (Tommy Kammerer) - * Decrease padding on start page boxes (Tommy Kammerer) - * Revert "Decreased padding on start page boxes" (Tommy Kammerer) - * Decreased padding on start page boxes (Tommy Kammerer) - -[2021-02-28] - * Add fade-in effect for start page boxes (Tommy Kammerer) - * Add Adrestia and resource links below docs menu (Tommy Kammerer) - * Remove Adrestia and resources box (Tommy Kammerer) - * Add actual title images for start page boxes (Tommy Kammerer) - * Add optional title images for start page boxes. (Tommy Kammerer) - * Update documentation label. (Tommy Kammerer) - * Add footer properties. (Tommy Kammerer) - * Add card properties for start page boxes. (Tommy Kammerer) - * Revert "Update the UI Design" (Tommy Kammerer) - -### Week ending February 26th - -[2021-02-26] - * Update the UI Design (Nazeim) - * Update Developer Portal Updates article (Nazeim) - * Added Developer Portal Updates article (Nazeim) - * Add Adrestia cardano-node compenent article (Nazeim) - * Add Plutus Overview article (Nazeim) - * Add Token Locking article (Nazeim) - * Add Cardano Node Article (Nazeim) - * Create folders for each main section (Nazeim) - -[2021-02-25] - * Add open graph images and descriptions. (Tommy Kammerer) - * Add Adrestia overview placeholder. Add resources overview placeholder. (Tommy Kammerer) - * Add the Plutus placeholder page. (Tommy Kammerer) - * Update ambassador page. (Tommy Kammerer) - -[2021-02-24] - * Removed unnecessary files. (Tommy Kammerer) - * Updated contribution and community. (Tommy Kammerer) - * Updated search config. (Tommy Kammerer) - * Cleaned up. (Tommy Kammerer) - -[2021-02-23] - * Updated contribution notes. (Tommy Kammerer) - * Updated contribution notes. (Tommy Kammerer) - * Added hideable sidebar. (Tommy Kammerer) - * Replaced png logos with svg. (Tommy Kammerer) - * Renamed docs. (Tommy Kammerer) - * Added dark colors. (Tommy Kammerer) - * Added dark/light mode configuration. (Tommy Kammerer) - * Added Discord link. (Tommy Kammerer) - * Activated announcement bar. (Tommy Kammerer) - * Fixed title and description. (Tommy Kammerer) - * Initial commit. (Tommy Kammerer) \ No newline at end of file diff --git a/blog/2020-11-01-november.md b/blog/2020-11-01-november.md index 239a1fb78a..fd2d4de542 100644 --- a/blog/2020-11-01-november.md +++ b/blog/2020-11-01-november.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [pooltools, explorers] description: Cardano Developer Spotlight March 2021 -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-cardanoscan.png --- Welcome to the November Developer Spotlight 2021. This month, we will focus on block explorers and pool tools. Read on to learn about the **Cardanoscan** and the **PoolTool**. diff --git a/blog/2021-01-07-january.md b/blog/2021-01-07-january.md index c68a2a5fa2..fbc39d496f 100644 --- a/blog/2021-01-07-january.md +++ b/blog/2021-01-07-january.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [pooltools] description: Cardano Developer Spotlight January 2021 -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-adatools.png --- Welcome to the January Developer Spotlight 2021. This month, we will focus on pool tools. Read on to learn about the **ADATools.io** and the **Pool.pm**. diff --git a/blog/2021-02-03-february.md b/blog/2021-02-03-february.md index 1d6305040c..a823901dfc 100644 --- a/blog/2021-02-03-february.md +++ b/blog/2021-02-03-february.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [developers, educational] description: Cardano Developer Spotlight February 2021 -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-ada-makerspace.png --- Welcome to the February Developer Spotlight 2021. This month, we will focus on educators, and developer-focused content creators. Read on to learn about the **ADA MakerSpace** and the **Hitchhiker's Guides**. diff --git a/blog/2021-03-26-march.md b/blog/2021-03-26-march.md index 80a74d3d92..ca1153f7ec 100644 --- a/blog/2021-03-26-march.md +++ b/blog/2021-03-26-march.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [hardware, educational] description: Cardano Developer Spotlight March 2021 -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-on-the-rocks.png --- Welcome to the March Developer Spotlight 2021. This month, we will focus on both educational content and stake pool tools. Read on to learn about **Cardano on the Rocks** and **JorManager**. diff --git a/blog/2021-07-12-developer-portal-launch.md b/blog/2021-07-12-developer-portal-launch.md index a41b77f21f..fde6bdc709 100644 --- a/blog/2021-07-12-developer-portal-launch.md +++ b/blog/2021-07-12-developer-portal-launch.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [developer-portal, nft, nfta] description: "Finally here: the Cardano developer portal! Accepting all builds." -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-launch.png --- ![title image](/img/devblog/developer-portal-launch.jpeg) diff --git a/blog/2021-07-26-july.md b/blog/2021-07-26-july.md index ab959f5223..9fce324dcc 100644 --- a/blog/2021-07-26-july.md +++ b/blog/2021-07-26-july.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [nft, interview] description: "July Spotlight Interview" -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-nftmaker.png --- ![title image](/img/devblog/nftmaker-background-img.png) @@ -79,7 +79,7 @@ And lastly, I, [Patrick](https://twitter.com/Padierfind), am responsible for eve We’ve been in talks with many amazing projects, companies, and potential partners. Most of which we can not yet speak about because of various Non-Disclosure Agreements. But great things are coming to NFT-MAKER and Cardano! -Two of the most meaningful publicly announced partnerships have been with [The Hoskinsons](https://thehoskinsons.com/)** & [unsigned_algorithms](https://www.unsigs.com/) NFT projects. Both of these projects have brought a lot of innovation and new ideas to the Cardano ecosystem and have set new standards for the world of NFTs. We’re incredibly proud that they’ve both used our NFT-MAKER PRO services to mint & sell their NFTs. By working with them, we were able to build, improve and test our PRO services in a controlled environment, and it is fair to say that NFT-MAKER PRO would not exist without them. +Two of the most meaningful publicly announced partnerships have been with The Hoskinsons** & [unsigned_algorithms](https://www.unsigs.com/) NFT projects. Both of these projects have brought a lot of innovation and new ideas to the Cardano ecosystem and have set new standards for the world of NFTs. We’re incredibly proud that they’ve both used our NFT-MAKER PRO services to mint & sell their NFTs. By working with them, we were able to build, improve and test our PRO services in a controlled environment, and it is fair to say that NFT-MAKER PRO would not exist without them.
**_Thank you for your time! Do you have anything else to add?_** diff --git a/blog/2021-08-09-nft-minting-standard.md b/blog/2021-08-09-nft-minting-standard.md index 3045f83ccc..5ee0ac6c16 100644 --- a/blog/2021-08-09-nft-minting-standard.md +++ b/blog/2021-08-09-nft-minting-standard.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [developer-portal, nft, nfta] description: "How we minted the NFTAs, and why we went for this standard." -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-nftas.png --- ![title image](/img/devblog/nfta.jpg) diff --git a/blog/2021-08-23-august.md b/blog/2021-08-23-august.md index 8c91f11de6..1e80a4d1c3 100644 --- a/blog/2021-08-23-august.md +++ b/blog/2021-08-23-august.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [payment, interview] description: "August Spotlight Interview" -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-mercury.png --- ![title image](/img/devblog/mercury-logo.jpg) @@ -62,7 +62,7 @@ Special thanks to JP Birch [(MADinArt)](https://twitter.com/MADinArt3) for his h **_Which partnerships have you engaged so far, and which ones are the most impactful?_** -The most impactful partnership to date has been with [Crypto Swag](https://twitter.com/CryptoSwagio), the first e-commerce merchant to implement Mercury into their [website](https://crypto-swag.io). It’s one thing to test things in a testnet environment and a completely different level when you officially “go live.” +The most impactful partnership to date has been with Crypto Swag, the first e-commerce merchant to implement Mercury into their website. It’s one thing to test things in a testnet environment and a completely different level when you officially “go live.” I have discussed implementing Mercury with several other WooCommerce small business owners and website developers and am excited to increase the use of Mercury as time goes on hopefully.
diff --git a/blog/2021-09-20-september.md b/blog/2021-09-20-september.md index 6a78189c00..fb006874f3 100644 --- a/blog/2021-09-20-september.md +++ b/blog/2021-09-20-september.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [payment, interview] description: "September Spotlight Interview" -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-nowpayments.png --- import ThemedImage from '@theme/ThemedImage'; diff --git a/blog/2021-10-28-october.md b/blog/2021-10-28-october.md index d68af9fe72..26cd6d9d53 100644 --- a/blog/2021-10-28-october.md +++ b/blog/2021-10-28-october.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [nft, interview] description: "October Spotlight Interview" -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-tokhun.png --- ![title image](/img/devblog/tokhun.png) diff --git a/blog/2021-11-23-november.md b/blog/2021-11-23-november.md index 3bd8ff14ce..f02e19792b 100644 --- a/blog/2021-11-23-november.md +++ b/blog/2021-11-23-november.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [wallet, nft, interview] description: "November Spotlight Interview" -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-nami.png --- ![title image](/img/devblog/nami.png) diff --git a/blog/2021-12-20-december.md b/blog/2021-12-20-december.md index 3d186a9793..4a95b3ed04 100644 --- a/blog/2021-12-20-december.md +++ b/blog/2021-12-20-december.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [spo, interview] description: "December Spotlight Interview" -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-adapools.png --- ![title image](/img/devblog/adapools.png) @@ -44,7 +44,7 @@ The only thing I would like to see is a fundamental change in Daedalus wallet - **_Now, could you tell us about your accomplishments so far, and in the history of the project, please tell us what you are most proud of._** -Of course, I'm most proud of the fact that we are by far the most significant pool explorers and help people every day to choose a pool to delegate or check where they are at. Doubly proud of the fact that although we didn't win catalyst funding, we found our own way of funding - currently, we have about 140 people supporting us through, [Patreon](https://adapools.org/patreons) for example, which is an incredible achievement and a sign of support from the community, it's just great! +Of course, I'm most proud of the fact that we are by far the most significant pool explorers and help people every day to choose a pool to delegate or check where they are at. Doubly proud of the fact that although we didn't win catalyst funding, we found our own way of funding - currently, we have about 140 people supporting us through, Patreon for example, which is an incredible achievement and a sign of support from the community, it's just great!
@@ -59,7 +59,7 @@ There are a lot of those things at the moment. We want to extend ADApools.org to **_Tell us about your team. Who're the people behind the screens?_** -ADApools belongs to the [Cardanians.io group](https://cardanians.io/en/about ), with ADApools operating as an independent project. This means that we don't interfere with each other's work and work on projects independently. From Cardanians, [Jaromir](https://twitter.com/JaromirTesar) and I, [Josef](https://twitter.com/0xb_yosef), are participating in the project. But we have a lot of other people who help us - I must mention [Danny](https://twitter.com/danny_cryptofay), who manages the [groups](https://adapools.org/groups) and a lot of other [contributors and translators](https://adapools.org/contributors). +ADApools belongs to the [Cardanians.io group](https://cardanians.io/en/about ), with ADApools operating as an independent project. This means that we don't interfere with each other's work and work on projects independently. From Cardanians, [Jaromir](https://twitter.com/JaromirTesar) and I, [Josef](https://twitter.com/0xb_yosef), are participating in the project. But we have a lot of other people who help us - I must mention [Danny](https://twitter.com/danny_cryptofay), who manages the [groups](https://adapools.org/groups) and a lot of other contributors and translators.
@@ -67,7 +67,7 @@ ADApools belongs to the [Cardanians.io group](https://cardanians.io/en/about ), **_Which partnerships have you engaged so far, and which ones are the most impactful?_** We have many partnerships, and to be honest, I don't even keep track of them all anymore. I have to mention the great [Yoroi wallet](https://yoroi-wallet.com/#/), where we provide data on pools, or [adalite.io](https://adalite.io/), which also works with our data. There are a lot of sites that more or less take our data and work with it somehow, which is great. Our server that hosts static files/ resources for public use-case gets a lot of traffic, so data/api is used quite intensively. - +
diff --git a/blog/2022-01-24-january.md b/blog/2022-01-24-january.md index 5d57fe9a5d..148af2b13b 100644 --- a/blog/2022-01-24-january.md +++ b/blog/2022-01-24-january.md @@ -7,7 +7,7 @@ author_image_url: "https://avatars.githubusercontent.com/u/37078161?s=200&v=4" tags: [oracle, interview] description: "January 2022 Spotlight Interview" - image: "https://developers.cardano.org/img/og-developer-portal.png" + image: "https://developers.cardano.org/img/og/og-blog-charlie.png" --- ![title image](../static/img/devblog/charli3.png) @@ -19,7 +19,7 @@ **_Hey Robert and Damon! Happy to connect today and learn more about the Charli3 project! Can you tell us more about the project and the problem you were addressing?_** - [Charli3](https://charli3.io/) is a decentralized oracle solution natively built in Haskell / on the [PAB](https://docs.cardano.org/plutus/Plutus-tools) (Plutus Application Backend). We held our Initial DEX Offering in April 2021 and set out to solve the following three problems. + [Charli3](https://charli3.io/) is a decentralized oracle solution natively built in Haskell / on the [PAB](https://iohk.io/en/blog/posts/2021/10/28/plutus-application-backend-pab-supporting-dapp-development-on-cardano/) (Plutus Application Backend). We held our Initial DEX Offering in April 2021 and set out to solve the following three problems. 1. **General oracle problem:** Smart contract solutions need accurate, reliable, secure, and trusted off-chain data that fit their requirements (e.g., for speed). There is a need for aggregation of data to provide a trusted source to the chain (e.g., many single sources with conflicting values). diff --git a/blog/2022-02-28-february.md b/blog/2022-02-28-february.md index 891643d8e4..e964281026 100644 --- a/blog/2022-02-28-february.md +++ b/blog/2022-02-28-february.md @@ -7,7 +7,7 @@ author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [payment, interview] description: "February Spotlight Interview" - image: https://developers.cardano.org/img/og-developer-portal.png + image: https://developers.cardano.org/img/og/og-blog-coti.png --- diff --git a/blog/2022-03-30-march.md b/blog/2022-03-30-march.md index ad0046e05c..9098f82a17 100644 --- a/blog/2022-03-30-march.md +++ b/blog/2022-03-30-march.md @@ -7,7 +7,7 @@ author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [education, interview] description: "March Spotlight Interview" - image: https://developers.cardano.org/img/og-developer-portal.png + image: https://developers.cardano.org/img/og/og-blog-lovelace-academy.png --- ![title image](/img/devblog/lovelace.png) diff --git a/blog/2022-04-27-april.md b/blog/2022-04-27-april.md index 34e6f51daa..f855bdd022 100644 --- a/blog/2022-04-27-april.md +++ b/blog/2022-04-27-april.md @@ -7,7 +7,7 @@ author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [dex, interview] description: "April Spotlight Interview" - image: https://developers.cardano.org/img/og-developer-portal.png + image: https://developers.cardano.org/img/og/og-blog-minswap.png --- import ThemedImage from '@theme/ThemedImage'; diff --git a/blog/2022-05-30-may.md b/blog/2022-05-30-may.md index 6f1c612325..bb7047dad6 100644 --- a/blog/2022-05-30-may.md +++ b/blog/2022-05-30-may.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [education, interview] description: "We interviewed Nicolas Arqueros, the co-founder of dcSpark about the Milkomeda protocol." -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-milkomeda.png --- import ThemedImage from '@theme/ThemedImage'; diff --git a/blog/2022-07-11-july.md b/blog/2022-07-11-july.md index 1b0d6b0734..cb906a248d 100644 --- a/blog/2022-07-11-july.md +++ b/blog/2022-07-11-july.md @@ -7,7 +7,7 @@ author_url: https://github.com/cardano-foundation author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 tags: [education, interview] description: "We interviewed the Koios team about their consistent query layer for Cardano's developers to build upon, with multiple, redundant endpoints that allow for easy scalability." -image: https://developers.cardano.org/img/og-developer-portal.png +image: https://developers.cardano.org/img/og/og-blog-koios.png --- import ThemedImage from '@theme/ThemedImage'; @@ -109,7 +109,7 @@ Basic introduction about Koios can be found on Koios website: https://koios.rest **Releases/Code:** -The various artifacts pertaining Koios Cluster can be found [here](https://github.com/cardano-community/koios-artifacts) while the SQL queries reside in guild-operators repository [here](https://github.com/cardano-community/guild-operators/tree/alpha/files/grest/rpc). +The various artifacts pertaining Koios Cluster can be found [here](https://github.com/cardano-community/koios-artifacts) including the [SQL queries for the Cardano Blockchain](https://github.com/cardano-community/koios-artifacts/tree/main/files/grest/rpc). **Participation as Instance Provider:** diff --git a/blog/2022-08-11-august.md b/blog/2022-08-11-august.md new file mode 100644 index 0000000000..19c15d6711 --- /dev/null +++ b/blog/2022-08-11-august.md @@ -0,0 +1,102 @@ +--- +slug: 2022-08-11-august +title: "Strica Interview" +author: Cardano Foundation +author_title: Developer Spotlight +author_url: https://github.com/cardano-foundation +author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 +tags: [wallet, block explorer, interview] +description: "We interviewed Ashish Prajapati, the co-founder of Strica about various projects they are building and how they contribute to the Cardano ecosystem." +image: https://developers.cardano.org/img/og/og-blog-strica.png +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + + [](https://strica.io) + +**_What is your role in the company?_** + +My name is Ashish Prajapati, and I'm one of the co-founders of [strica.io](https://strica.io), a Cardano blockchain-focused development company. + + +
+ +**_Hey Ashish! Happy to connect today and learn more about Strica! Can you tell us more about the project and the problem you were addressing?_** + +We are building products that enhance user experience using Cardano and enhance developer experience building on Cardano. [Cardanoscan](https://cardanoscan.io) and [Typhon Wallet](https://typhonwallet.io) are our well-known projects, and an upcoming project [flac.finance](https://flac.finance) is focused on processing payments and is being built on Cardano. + + +
+ +**_What are the most important things about Strica?_** + +Strica is doing lots of open source work to grow the Cardano ecosystem [StricaHQ](https://github.com/StricaHQ). We have developed and open-sourced a full suite Cardano wallet library in pure javascript and Cardano key pair generation library in pure javascript. These libraries are used by Ledger and many marketplaces for building Cardano transactions in the browser. We have also developed a fully in-house CBORS package to serialize and deserialize the CBOR data types, focusing on working with Cardano data types. + +We are working on more open source tools and packages to contribute to the Cardano ecosystem. + + +
+ +**_Now, what are your accomplishments so far, and what are you most proud of?_** + +Strica is proud to have developed a fully js-based Cardano wallet library from scratch. The library is used by [Typhon Wallet](https://typhonwallet.io), [Ledger Live](https://www.ledger.com/ledger-live), [Minswap](https://minswap.org/), and many more projects to build and sign Cardano transactions. This was achieved by building more core-level components in javascript. I would love everyone to check out our [GitHub](https://github.com/StricaHQ) and explore our open-source tools. + +Recently we have worked on the [Ledger Live](https://www.ledger.com/ledger-live) integration of Cardano, one of the most requested features in the entire Cardano ecosystem. + +We are also working on upgrading [Cardanoscan](https://cardanoscan.io) explorer to make it easy for new users to view and understand Cardano UTXO transactions and enhance the user experience. It will be a big release around the Vasil hard fork. + + +
+ +**_Why should people use Typhon Wallet and Cardanoscan? What are the advantages over other wallets and blockchain explorers?_** + +Our goal behind [Typhon Wallet](https://typhonwallet.io) and [Cardanoscan](https://cardanoscan.io) is to provide the full feature sets possible on Cardano and provide the best user experience by utilizing the power of the Cardano blockchain. + +With that in mind, [Typhon Wallet](https://typhonwallet.io) has unique, essential features in a very user-friendly design. One such feature we released recently is to be able to send ada to multiple different addresses with a single transaction by harnessing the power of UTXO. Many companies now use this to process salaries, for example. Typhon also allows attaching arbitrary metadata to a transaction and adding any number of tokens to a transaction. + +[Typhon Wallet](https://typhonwallet.io) also supports transaction chaining. Users can submit as many transactions as possible without waiting for the previous transactions to get confirmed until they have enough ada balance. + +[Cardanoscan](https://cardanoscan.io) also follows the same philosophy of maximum features in user-friendly designs. [Cardanoscan](https://cardanoscan.io) is now mainly used by the Cardano community for their daily analytics requirements and to view transactions on the chain. We are also releasing a big re-designed version of [Cardanoscan](https://cardanoscan.io) around the time of the Vasil hard fork. We hope to make it easy for new Cardano users to view and understand Cardano transactions. + + +
+ +**_What does the future look like for Strica? For example, what new things are to come, and what will it mean for the overall project?_** + +Strica is focused on building solutions on and around the Cardano blockchain. With our fleet of two live projects, one upcoming project [flac.finance](https://flac.finance), and our continued contribution to the open source Cardano tools and libraries, we are staying strong and building even during the crypto winter. This is our second crypto winter. +Strica also explores opportunities to build enterprise solutions on Cardano for enterprise clients. + + +
+ +**_Which partnerships have you engaged in so far, and which ones are the most impactful?_** + +Strica has been working closely with many projects in the ecosystem, and some partnerships are officially announced, while for others, we continue to work with and help grow each other. + +We are closely working together with, + +* [Cardano Guild members](https://cardano-community.github.io/guild-operators/) +* [Minswap](https://minswap.org/) +* [jpg.store](https://www.jpg.store/) +* [Tokhun](https://tokhun.io/marketplace) + +and many dApps and marketplace platforms in the ecosystem. + + +
+ +**_Tell us about your team. Who are the people behind [Strica](https://strica.io)?_** + +Strica core team: + +* [Ashish Prajapati](https://twitter.com/ashisherc) +* [Mehul Prajapati](https://twitter.com/mehul_cs) +* [Pavan Vora](https://twitter.com/pavan_vora) +* [Prashanth Soordelu](https://twitter.com/soordeluP) diff --git a/blog/2022-09-23-september.md b/blog/2022-09-23-september.md new file mode 100644 index 0000000000..79121464ec --- /dev/null +++ b/blog/2022-09-23-september.md @@ -0,0 +1,93 @@ +--- +slug: 2022-09-23-september +title: "ADAO Interview" +author: Cardano Foundation +author_title: Developer Spotlight +author_url: https://github.com/cardano-foundation +author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 +tags: [DAO, open source, interview] +description: "We interviewed Allusian, one of the co-founders of ADAO about various projects the ADAO community is building and how they contribute to the Cardano ecosystem." +image: https://developers.cardano.org/img/og/og-blog-adao.png +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + + [](https://www.theadao.io/) + +**_Can you introduce yourself_** + +I go by [Allusian](https://twitter.com/allusian1), and I have served as a Core Contributor at [ADAO](https://www.theadao.io/) since October of ‘21, after listening into spaces its earliest founder hosted and frequented in the community in the wake of the Goguen era. My main focus has been on the upkeep and design of the Discord server, onboarding new members, writing and editing documents, articles, and outreach via social media, as well as scheduling and organizing guest speakers for ADAO’s educational “Roundtable” Twitter spaces hosted every Saturday. + +[Thomas DiMatteo](https://twitter.com/Welikethetrees) is a community organizer, crypto researcher, entrepreneur, and front-end developer, with a keen interest in decentralized finance and governance on Cardano and other blockchain ecosystems. He has six years of experience as a small business owner serving customers throughout the state of Florida, several years as an investor in blockchains, and a participant in decentralized finance and autonomous protocols. + + +
+ +**_Hey guys, happy to connect today and learn more about [ADAO](https://www.theadao.io/). Can you tell us more about the mission of ADAO and how you are trying to achieve it?_** + +ADAO’s mission is to build open-source tools, educational and supportive resources to empower robust, decentralized systems of collaboration and governance, starting with Cardano. We are achieving this by attracting talent from various disciplines and walks of life who share our passion for building systems that enable, empower and facilitate new ways of organizing. Some of ADAO’s major contributions to the ecosystem include the RoundTable multi-signature Wallet DApp, the ADAO Staking Portal, and the Agora Protocol, which we have partnered with Liqwid Labs to develop. + + +
+ +**_What are the most important things about ADAO?_** + +Our community is our most important asset. Without their passion and contributions of time, energy, and resources, ADAO would not have gotten far. Everything – our name, logos, Discord server, website, Medium articles, social media presence, and open-source repositories are all possible thanks to the community that rallied around the idea of doing our part to facilitate decentralization. + + +
+ +**_Why did you choose to build on Cardano?_** + +Cardano’s scientific approach to solving complex issues in the blockchain space lays a strong foundation upon which new, secure, and robust systems can be built with wide-scale adoption in mind. Thanks to this approach, along with the advantage of hindsight, Cardano has been able to inherently solve many of the hurdles blockchain protocols and organizations face today. The community is visionary, astute, welcoming, discerning, and eager to build. + + +
+ +**_Going forward, how will ADAO make an impact in the crypto space or on the world?_** + +We hope that, through catalyzing the proliferation of DAOs, ADAO will play a leading role in the explosive growth in the adoption of blockchain technologies. People around the globe are disillusioned by antiquated systems prone to corruption and inefficiency. Blockchain technologies enable sensible solutions that stand to markedly improve countless facets of life, from commerce, finance, and government, to running or working within a business. + + +
+ +**_Now, what are your accomplishments so far, and what are you most proud of?_** + +There are too many accomplishments, large and small, to list, but we are especially proud of the [RoundTable DApp](https://roundtable.theadao.io/), which has seen wide adoption in the community, from advanced protocol DAOs to small groups of friends pooling ada to bid on art. One community group even uses RoundTable to donate to animal shelters! + +We’ve also built a [Staking Portal DApp](https://staking.adaodapp.xyz/) that enables organizations to incentivize their tokenholders and saw [two proposals](https://www.lidonation.com/en/project-catalyst/group/adao) approved by Catalyst voters. The first helped us to compensate our RoundTable Developers, and the second funded further open-source development, as well as the establishment of the ADAO Foundation in Liechtenstein (currently underway). + +Our proudest accomplishment would have to be the strong and growing community we’ve built at ADAO. Members come from across the globe, from diverse walks of life, all united by a passion for lending a hand to the community and tool-building necessary to enable decentralization on a global scale. Every member brings their unique story, talents and skillset, and breathes life into the DAO. + + +
+ +**_Why is open source a key principle of ADAO?_** + +Open source software promotes accessibility, security, and a spirit of collaborative innovation. We find these aspects important for growing the ecosystem and fostering a culture of transparency and community necessary for building the infrastructure of a blockchain future. Open source development is critical when it comes to interoperability between protocols. In the early days of a new and growing ecosystem, open source projects and standards allow distributed groups to design their protocols in a synergistic and interoperable way. Without open source resources, we quickly see information and design silos, where protocols and organizations, although operating on the same blockchain, cannot interact with each other. + + +
+ +**_What is the future of ADAO? For example, what new things are to come, and what will it mean for the overall project?_** + +ADAO has amassed close to [40 open-source repositories](https://github.com/orgs/ADAOcommunity/repositories), including advanced on-chain governance frameworks, Plutus contracts for non-custodial token distribution, NFT minting, staking systems, and more. Even non-technical resources like the ADAO constitution and other templated documents are open-sourced and being leveraged by other Cardano-based organizations. ADAO plans to continue this mission of providing free open-source resources and making them even more accessible through strategic partnerships and novel contribution incentives. + + +
+ +**_Which partnerships have you engaged so far, and which ones are the most impactful?_** + +The most notable and strategic partnership to date would be the collaboration with The Summon Platform. Summon, is a multi-entity ecosystem and infrastructure provider. The Summon ecosystem as of now includes the Summon Association, Summon Labs LLC, and the Summon Platform DAO. Together these groups are able to leverage advanced, open-source systems and make them more user-friendly through a no-code interface and suite of APIs. Summon continues to directly contribute to the work of ADAO and other open-source communities, building new and expanding upon existing code repositories while providing the commercial-grade infrastructure that enables easy access and integration into the various tools and modules built by Summon. By leveraging the Summon Platform, projects can deploy or simply “plug in” to all the tools Cardano has to offer with a simple, no-code solution. This includes token minting/generation, non-custodial token sale/distribution, smart contract-based staking systems, on and off-chain token voting, Native and Plutus script treasuries, access to advanced DeFi yield strategies, and much more. + +**_How can someone interested in ADAO find out more about it?_** + +The best way to stay up to date on everything ADAO is doing is to follow the [@ADAOcommunity](https://twitter.com/ADAOcommunity) on Twitter. If you would like to get involved or want to get a deeper look at everything going on in ADAO, please join the community [Discord server](https://discord.gg/pYwXkygtBa). We hold General Meetings at 1 A.M. UTC every Thursday and 3 P.M. UTC every Saturday. Projects looking to leverage or contribute to ADAO’s open-source repositories can visit the [ADAOcommunity GitHub](https://github.com/ADAOcommunity). Projects looking to leverage Summon Platform modules and infrastructure can reach out to us on [Twitter](https://twitter.com/SummonPlatform?s=20&t=1tOSgYAY28_3pKdBCn7S_A), join the Summon DAO [Discord server](https://discord.gg/EkHDSvjggb), or reach out directly to the core team at team@summonplatform.io. diff --git a/blog/2023-01-02-january.md b/blog/2023-01-02-january.md new file mode 100644 index 0000000000..fbb0e59626 --- /dev/null +++ b/blog/2023-01-02-january.md @@ -0,0 +1,148 @@ +--- +slug: 2023-01-02-january +title: "Gimbalabs Interview" +author: Cardano Foundation +author_title: Developer Spotlight +author_url: https://github.com/cardano-foundation +author_image_url: https://avatars.githubusercontent.com/u/37078161?s=200&v=4 +tags: [PBL, open source, interview] +description: "We interviewed James a co-founder of Gimbalabs, about various projects they are building, such as Dandelion, and how they contribute to the Cardano ecosystem." +image: https://developers.cardano.org/img/og/og-blog-gimbalabs.png +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + + [](https://gimbalabs.com/) + +For the January edition of the Spotlight Article, we interviewed James Dunseith, Co-Founder of Gimbalabs. + + +
+ +**_Can you introduce yourself_** + +My name is James Dunseith. I met Juliane Montag and Roberto Carlos Morano during Fund 1 of Project Catalyst, and we founded Gimbalabs with a Fund 2 Catalyst proposal. + +Before getting into this work, I taught high school in New York City, and I trained teachers at [BetterLesson](https://betterlesson.com/) and [MIND Research Institute](https://www.mindresearch.org/). + + +
+ +**_Can you tell us more about Gimbalabs and the problems you are addressing?_** + +Gimbalabs is building community spaces, technical infrastructure, educational programming, and open-source code, making it more likely that Cardano will actually change the world. + +We know that the potential of Cardano is exciting, but the world won't change just because some new technology exists. We founded Gimbalabs because we want to increase the likelihood that the ideals of Cardano will happen. + +To start, we focused on two things: technical infrastructure and developer education. Our technical infrastructure is called Dandelion. We provide education through "Project Based Learning" (PBL) courses. Along the way, we have created a community where people meet, and projects are launched. + +Our goal is to build systems as robust as the Cardano protocol. A network requires infrastructure and people who know how to use it to be robust and resilient. We are building Dandelion so that anyone can deploy critical infrastructure for interacting with the Cardano protocol. We are building Project-Based Learning courses so that people get first-hand experience using Cardano and sharing decision-making power. + + + +
+ +**_Dandelion: Free and open, distributed infrastructure_** + +Currently, there are nearly 3000 active stake pools securing Cardano Mainnet. However, to build anything useful on Cardano, developers need ways to gather information from the blockchain (for example, through GraphQL, Koios, or Blockfrost APIs) or to submit valid transactions (with the Submit API). These APIs represent potential points of failure. + +If people can't query it freely or submit transactions, it will not matter how decentralized the Cardano protocol is. Our goal is for the Cardano API layer to be as distributed and resilient as the Cardano network. + +We have provided Dandelion as a free service to the Cardano developer community for over two years. It provides a resilient, open-source API layer that anyone can deploy, and we are currently building an incentive model for operators to run public Dandelion nodes. + +Anyone can review the Dandelion repository on GitLab: https://gitlab.com/gimbalabs/dandelion/kustomize-dandelion + + +
+ +**_Project-Based Learning: So people can learn by doing_** + +In everything we do, we recognize that people need more than technical know-how to use Cardano to its full potential. We need new mental models, new workflows, and new ways of organizing work - to name just a few problems of practice. When people learn by doing, they are more likely to become agents of change. + +PBL aims to help people become Contributors to real projects building on Cardano. The Gimbalabs PBL Framework consists of five stages, and we ask an essential question at each step: + +1. **Onboarding:** "What is that?" +2. **Building Background Knowledge (BBK):** "How does it work?" +3. **Specialising:** "How did you build it?" +4. **Contributing:** "How can I help?" +5. **Governance:** "What will we do next?" + +Gimbalabs always takes a holistic approach to Cardano education. In "Plutus PBL", we cover more than Plutus. We support developers to understand the UTxO model, conceptually what a Validator does, and see how a Plutus Contract works in the context of a full-stack Dapp. Participants learn by working through hands-on projects designed to provide insights into new design patterns and challenges in DApp development. We create pathways into contribution so that developers can build their reputation, and we invite all students to decide what we do next. + +Enrollment is open now at [https://gimbalabs.instructure.com/enroll/3CFNFB](https://gimbalabs.instructure.com/enroll/3CFNFB) + + +
+ +**_So why is it called Gimbalabs?_** + +The early architects of Cardano have been thoughtful about naming things, and we'd like to be part of that tradition. Gimbalabs takes its name from the gimbal, a balancing device used in navigation, filmmaking, and space flight. In a boat on a stormy sea or on a camera in a shaky hand, gimbals help keep things steady. + +And gimbals are sometimes called Cardan joints/suspensions because Gerolamo Cardano is famous for describing them in precise mathematical detail. We think this is a pretty cool connection! + +We combine this concept of balance with the uncontrollable scattering of the Dandelion seed: which spreads far and wide and heals the earth. We take these metaphors seriously and intend to live up to their promise. At Gimbalabs, we incubate projects, provide scaffolding for people to learn and develop new systems, pay attention to ancient patterns, and seek to empower people to see their role as actors in this world-changing moment. Then, like scaffolds at a construction site, or catalysts in a chemistry lab, we seek to get out of the way so that truly disintermediated systems can take root. + + +
+ +**_What else are you building?_** + +We are building a unique community by making spaces where people can think deeply and slowly as new systems emerge. We are proud to have helped many builders start bringing their ideas to life on Cardano, and we continue cultivating collaborations that lead to new projects. + +We have a proof-of-concept decentralized application that (for now) is called Gimbal Project Treasury + Escrow: https://gpte.gimbalabs.io/. With GPTE, we are exploring a new model for how headless dapps can support communities to build independently while participating in global reputation networks. + +We are hosting a book club on [Emergent Strategy, by Adrienne Maree Brown](https://www.akpress.org/emergentstrategy.html), with the expectation that these conversations will lead to new insights about the potential of community tokenomics built on Cardano. + +In collaboration with other builders, we are planning additional PBL courses - and will be eager to share more on each of these as they roll out! + + +
+ +**_How can people join Gimbalabs?_** + +Gimbalabs is creating a robust and resilient global network of leaders, DevOps pioneers, builders, and educators because we know that in the hands of many, Cardano can change the world. + +Anyone who thinks the best way to learn is by doing something should come to say hello at Gimbalabs! + +The best way to get involved is by joining a weekly meeting that interests you. We host a series of weekly meetings that provide different ways for people to get started: +- Gimbalabs Playground (every Tuesday 1800utc) +- Plutus PBL Live Coding (every Wednesday and Thursday 1430utc) +- Gimbalabs Tokenomics + Book Club (starts 2023-01-04!) + +Our [public calendar](https://gimbalabs.com/calendar) includes the most up-to-date information, and the [Gimbalabs Discord server](https://discord.gg/XTvJBj7kzq) is a great place to stay up-to-date and to ask questions. + + +
+ +**_What's next for Gimbalabs?_** + +The future of Gimbalabs will only happen with you! So rather than continuing to list all the things we're excited to do, we hope you'll join one of the abovementioned meetings. + + +
+ +**_Who else are you working with?_** + +We are working in partnership with other open-source builders like [Mesh](https://meshjs.dev/), [TxPipe](https://txpipe.io/), [Plu-TS](https://github.com/HarmonicLabs/plu-ts) and others to create a comprehensive stack for Cardano developers. We are working alongside organisations like [OneUpOneDown](https://oneuponedown.org/), [Cardano4Climate](https://cardano4climate.com/), [WADA](https://www.wada.org/), and [Littlefish Foundation](https://littlefish.foundation/) to launch projects and cultivate leaders globally. + +We are collaborators at heart, and we've supported more projects to launch and partnerships to take root than we can count. + +We always advocate for taking action by taking the first step, and we know that the best way to learn anything is by doing something. We hope you'll join us! + + +
+ +**_Where can we find more information about Gimbalabs?_** + +- Twitter: [@gimbalabs](https://twitter.com/gimbalabs), [@DandelionLink](https://twitter.com/DandelionLink), [@repsistance](https://twitter.com/repsistance), [@jamesdunseith](https://twitter.com/jamesdunseith), [@rc_morano](https://twitter.com/rc_morano), [@JuliMont01](https://twitter.com/JuliMont01) +- GitLab: https://gitlab.com/gimbalabs/ +- Web: https://gimbalabs.io +- Discord: https://discord.gg/XTvJBj7kzq diff --git a/blog/2023-02-16-february.md b/blog/2023-02-16-february.md new file mode 100644 index 0000000000..4e9bc56065 --- /dev/null +++ b/blog/2023-02-16-february.md @@ -0,0 +1,141 @@ +--- +slug: 2023-02-16-february +title: "NEWM Interview" +authors: + name: Nicolas Cerny + title: Community Manager - Cardano Foundation + url: https://github.com/thenic95 + image_url: https://avatars.githubusercontent.com/u/61423239?s=200&v=4 +tags: [IP, music, fractionalized ownership] +description: "We interviewed the NEWM team, a blockchain-based project aiming to create a music ecosystem that allows musicians to own their creative content and monetize their art from conception to retirement. Including a streaming platform, music rights marketplace, micropayments, ticketing, and fractionalization of IP rights, focusing on user-friendly design and technology using the Cardano blockchain." +image: https://developers.cardano.org/img/og/og-blog-newm.png +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + + [](https://newm.io/) + +We interviewed the NEWM team, a blockchain-based project aiming to create a music ecosystem that allows musicians to own their creative content and monetize their art from conception to retirement. Including a streaming platform, music rights marketplace, micropayments, ticketing, and fractionalization of IP rights, focusing on user-friendly design and technology using the Cardano blockchain. + + + +
+ +**_Can you introduce yourself_** + +Hello world! We are NEWM, a blockchain-based tech project focused on shaking things up in the music space when it comes to Intellectual Property (IP) and ownership rights. Our dynamic duo of Co-Founders and Co-CEOs go by Ryan Jones and Florian Sorg. A career musician with deep knowledge of the music industry, Ryan focuses on uniting global talent, strategic partnerships and providing first-hand industry insight; while Florian brings financial, operational and management knowledge from years of experience in the VC-Tech space. What’s better than two heads? Four! Our Chief Product Officer (CPO), Tiziana Pittini, specializes in design and project management, making our product suite user-friendly for both blockchain and non-blockchain users. Last, but certainly not least, Andrew Westberg is our Chief Technology Officer (CTO), or mad data scientist as we like to call him. He’s a blockchain-technology specialist with unmatched experience delivering scalable apps for Fortune 500 companies. + + +
+ +**_Hey, NEWM team, happy to connect today and learn more about NEWM. Ryan, can you tell us more about the project and the problem you were addressing?_** + +NEWM is an entire music ecosystem with fairness at its core. We’re building a digital landscape for musicians to own their creative content and monetize their art from ‘conception’ to retirement. This will include a streaming platform, music rights’ marketplace, direct tipping via micropayments, ticketing for in-person and metaverse events, and the fractionalization of IP rights (currently only related to streaming royalties). Our first product launch will include a self-service music distribution platform that enables fractionalized ownership of IP via our smart contracts, and shortly thereafter, a marketplace for trading music rights. + + +
+ +**_Andrew, what makes NEWM revolutionary from a technological standpoint?_** + +From a technological perspective, we try to think of ourselves not as a blockchain project that is doing music, but rather, a music platform that happens to be using the blockchain. This informs all of our technical decisions to put the end-user experience before anything else. As a natural byproduct, NEWM protocol users shouldn’t feel the need to learn a new technology in order to use our services; it creates a seamless experience and helps us develop a frictionless product offering that drives mass adoption. + +Our NFT minting and fractionalization contracts, which we’ve open-sourced, are unique in that they allow for a policy that can remain unlocked and open forever, while guaranteeing NFT uniqueness from the contract code itself. + + +
+ +**_Tiziana, what role does design play in NEWM?_** + +Accessible design is our top priority. While we are heavily involved in the crypto scene, our goal is to make our ecosystem inclusive and appealing to everyone, regardless of their technical background. We believe that everyone should have the opportunity to participate in our platform, and that's why design and user experience play such a critical role. Our focus is to ensure the complexity of our project does not discourage anyone from accessing and/or participating in the NEWM ecosystem. + + +
+ +**_Florian, why did you choose to build your project on Cardano?_** + +Cardano’s approach to scalability, security, and sustainability through a decentralized ecosystem and an eco-friendly consensus mechanism (Proof-of-Stake) aligns with our values as a company. Among the many things we value about Cardano, some of the most significant are the deterministic fees, security of native assets, scientific rigor and network stability. + +With over 50 published peer-reviewed papers, Cardano’s research-based development in collaboration with universities worldwide provides many benefits, including state-of-the-art advancements in the field and scalability of the underlying technology. Since launching in 2017, Cardano has gained significant user interest and has over 2,900 stake pools, making it highly decentralized. + +In a nutshell, the alignment of values, predictable cost-forecasting and network stability were the main factors when choosing the Cardano blockchain. + + +
+ +**_Andrew, what challenges did you or are you facing right now by building on Cardano?_** + +Compared to other L1 ecosystems, Cardano is relatively new. Smart contracts have only been out for around a year now. Being so fresh, there are often gaps in the tooling and infrastructure required to build out a protocol on top of Cardano. For example, we needed a good way to communicate with the blockchain from Kotlin code. To address this need, we created the open source Kogmios library. This doesn’t have anything to do with our project itself, but it’s a piece of plumbing we had to resolve before we could get back to developing our core value proposition. + + +
+ +**_Florian, what is the core problem you are trying to solve with NEWM?_** + +The current music industry business model provides musicians with essentially two options: + + 1. Join a record label and get your music out to the masses at the expense of your creative control and IP copyrights. + + 2. Remain independent and rely on popular streaming platforms like Spotify, Apple Music, and Youtube to distribute your music while earning a fraction of the revenue. + +This is why we’re creating a third option, enabling musicians to have the best of both worlds – i.e., maintaining ownership of their creative content while distributing their music and only selling/sharing music rights as they see fit. + +At NEWM, we’re putting musicians and music lovers first by creating a community-owned platform where you can fractionalize music rights with NFTs that can be freely traded within the ecosystem. Moreover, we cover the whole music distribution and royalty collection processes through our white label partner, offering a one-stop-shop for the artists. + + +
+ +**_Now, Tiziana, what are your accomplishments so far, and what are you most proud of?_** + +We have successfully created two stake pools, which have been an important part of supporting the progress of our project. Additionally, we’ve launched an online resource magazine that helps educate and inform the community about music and web3, as well as keep up with project developments. Two of our greatest accomplishments have been growing a team of 40 motivated people who are dedicated to our vision, and building a large community that is eager to see our project succeed. Lastly, we have created several individual ‘Sample Sale’ sites for artists, which have already empowered them to have more control over their work and revenue. + + +
+ +**_Ryan, why should musicians choose to use NEWM? What are the advantages over other legacy businesses such as music labels?_** + +By using NEWM as the distribution platform, artists can enter the traditional system through the portal of Web3. This allows the best of both worlds: fractionalization and tokenization of IP and royalties through the use of smart contracts and native assets, plus the liquidity and exposure of the traditional music industry. This helps musicians to truly monetize their music and not just their persona. Music lovers also benefit by directly connecting with their favorite artists in a much more meaningful way. They become a part of the music, if you will, and finally have access to a multibillion-dollar industry. From a B2B perspective, we’ll be able to provide royalty payouts much faster once we launch our own streaming platform. Instead of a 3-month lead time for royalty payouts, artists and labels will be able to see payouts basically in real time. + + +
+ +**_Florian, where do you see NEWM in ten years?_** + +NEWM will be a legacy project - this means we want to give the artists a place to start their career and never feel the need to go elsewhere. By adding more features and tools, we want to build an ecosystem that will cover the music industry as a whole, filling all the gaps that currently exist. We will offer services from Stream Tokens and other IP-related products to ticket sales, and collectibles, as well as our own streaming service and marketplace. Our long term vision goes beyond that, so we might even offer other token-gated products, which could include stem and more! We may even become our own Performance Rights Organization (PRO) in ten years, which will free artists from the old music industry giants. Additionally, everything will be governed by artists and the community, so they can decide the future of NEWM. Getting goosebumps by just talking of such a future! + + +
+ +**_Which partnerships have you engaged so far, and which ones are the most impactful?_** + +Partnerships between companies are always a big topic in the crypto industry. We haven’t announced any official partnerships yet, because we believe in thoroughly vetting, building and working together for a trial period first before announcing something to our community. We will announce when the time is right. We do have a sustainability collaboration that will be announced soon, so keep up with our socials if you’re interested in learning more! + +We’d also like to take a moment to spotlight our amazing NEWM Community and the Cardano Community as a whole. We consider this our greatest partnership, and we certainly wouldn’t be where we are without the enthusiasm, support and encouragement we receive on a daily basis. Without the countless open exchanges we’ve had with community members, we wouldn’t be able to refine and resolve the problems we’re tackling in the RealFi space. We always say, “We are because you are,” and that’s the truth. + +Another impactful partnership we’ve engaged in so far has been with the iconic Hip Hop artist, MURS. He did the first ever Stream Token Sale with us (which was also our proof-of-concept). Having such a legendary musician to do the first drop was a great success of our Artist Relations team - major shout out to the team. + + +
+ +**_Tiziana, tell us about your team. Who are the people behind NEWM?_** + +Our team has grown a lot in the past year, totalling 40 members at the time of this interview. It's really quite impressive. While we can’t list everyone here, I can tell you that we've attracted some incredibly talented individuals across all different walks of life and expertise. Many started as dedicated community members! Our Development team includes some great talent who've worked for companies like Nike and Walmart, and our Marketing team has a diverse set of backgrounds (both digital and print), which gives us a unique perspective when connecting with our community. On the Product and Design side, we've got some experienced pros who want to push boundaries, and our Legal and Operations team is top notch. We also have an Artist Relations team that is composed of experienced music professionals to help us navigate the industry. What brings all of us together is a passion for music and fairness; to bring about change and make the world a better place. + +To see our full team, visit [newm.io/team](https://newm.io/#team) + +Here are some of our links: + +- Website: https://newm.io/ +- Twitter: https://twitter.com/projectNEWM +- Discord: https://discord.com/invite/z4sYqxqgvQ +- Telegram: https://t.me/NEWMofficial +- GitHub: https://github.com/projectNEWM +- Instagram: https://instagram.com/projectnewm.io +- YouTube: https://www.youtube.com/channel/UCcsBNWGjIf8YarD9uaZEEvw diff --git a/blog/2023-03-21-march.md b/blog/2023-03-21-march.md new file mode 100644 index 0000000000..1e9a8e77a4 --- /dev/null +++ b/blog/2023-03-21-march.md @@ -0,0 +1,120 @@ +--- +slug: 2023-03-21-march +title: "Mesh Interview" +authors: + name: Nicolas Cerny + title: Community Manager - Cardano Foundation + url: https://github.com/thenic95 + image_url: https://avatars.githubusercontent.com/u/61423239?s=200&v=4 +tags: [open source, sdk, javascript, interview] +description: "In this article, Jingles, one of the co-founders of Mesh, talks about the project and how it aims to improve the developer experience within the Cardano ecosystem. Mesh is an open-source software developer kit that provides developers with the necessary resources and support to build innovative and impactful applications on the Cardano blockchain. Jingles discusses Mesh's features, the reasons for choosing Cardano, and the project's plans, such as a bounty program and improving the serialization library." +image: https://developers.cardano.org/img/og/og-blog-mesh.png +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + + [](https://meshjs.dev/) + +In this interview, Jingles, one of the co-founders of Mesh, talks about the project and how it aims to improve the developer experience within the Cardano ecosystem. Mesh is an open-source software developer kit that provides developers with the necessary resources and support to build innovative and impactful applications on the Cardano blockchain. Jingles discusses Mesh's features, the reasons for choosing Cardano, and the project's plans, such as a bounty program and improving the serialization library. + + + +
+ +**_Hey Jingles! Happy to connect today and learn more about the Mesh project! First of all, can you introduce yourselves?_** + +Hey everyone, [Jingles](https://twitter.com/jinglescode) here. I've been in the industry as a full-stack developer and machine learning engineer at Alibaba Group and Yahoo Inc. Currently, I'm a Ph.D. researcher researching machine learning applications on neuroscience. + +I work together with [Abdelkrim](https://twitter.com/abdelkrimdev), and he is the wizard who makes Mesh robust, efficient, and well-engineered. He has a background in engineering and roots in the fintech industry. He worked for seven years in banking and mobile app development. + +In 2021 we started working together and released end-to-end implementation of an open-source NFT marketplace. Then, we provided technical solutions for various Cardano projects. In July 2022, we began working on Mesh and released stable version 1.0 on Sept 22. + + +
+ +**_Can you tell us more about Mesh and the problem you were addressing?_** + +The idea for [Mesh](https://meshjs.dev/) first came about when we recognized a gap in the developer experience within the Cardano ecosystem. We noticed that there needed to be more documentation and tools available. Many developers required help to get their projects off the ground. This was frustrating and disheartening, as we strongly believed that building on Cardano should not be such a complex and convoluted process. + +Thus, we were motivated to fill this gap for developers to onboard into the ecosystem. This resulted in the development of the software developer kit, Mesh, which provides the necessary resources and support for developers to focus on building innovative and impactful applications. + +Mesh is a complete development framework for developers to easily bring their applications onto web3. Whether you're a new developer, a startup, or a large enterprise, Mesh makes Web3 development easy with reliable, scalable, and well-engineered APIs & developer tools. + + +
+ +**_What are the essential things about Mesh?_** + +Mesh is designed to improve the developer experience, which will be crucial for wider Cardano adoption. By prioritizing ease of development and improving the developer experience, Mesh supports Cardano's values of decentralization and collaboration. + +Mesh is a community-driven open-source project aligning with the [Cardano Foundation's core focus areas](https://cardanofoundation.org/en/news/cardano-foundation-core-focus-areas/). You don't need our permission to use Mesh. Both our code and UI components are open-source and accessible to everyone. You own the applications created using this tool, and no other parties have control over your project. Additionally, even if you're not using Mesh, the source code is still open for anyone to reference and learn from [our implementation](https://github.com/MeshJS/mesh). + +Mesh is an exceptional community-led project that offers an invaluable resource for people looking to learn more about Cardano and how it works. Its comprehensive documentation and guides are handy for individuals who are interested in gaining deeper insights into the workings of this innovative blockchain technology. With Mesh, you can explore the ins and outs of Cardano in an engaging and user-friendly manner, making it the perfect learning platform for everyone, from beginners to seasoned veterans. + + +
+ +**_Why did you choose to launch your project on Cardano?_** + +Building on Cardano is still in its early stages, similar to the early days of the internet when protocols such as HTTPS and IP addresses were being discussed. CERN puts web technology in the public domain, available with an open license. Through these actions - making the software required to run a web server freely available and open-sourcing the code library - the web flourished. + +Similarly, to realize the potential of the Cardano ecosystem, it is crucial that developers are equipped with the necessary tools and resources to create innovative and impactful projects. Providing Mesh and its technology, allowing anyone to build, is critical to widespread Cardano adoption. We work closely with Gimbalabs and EMURGO Academy to empower students with development skills, documentation, guides, and workshops. + + +
+ +**_In the future, how do you intend Mesh to make an impact in the crypto space or on the world?_** + +Developers are essential for the successful implementation and adoption of technology. Mesh provides a comprehensive software developer framework and a range of resources that give developers the power to create projects on Cardano that are creative and have a meaningful impact. This allows for the utilization of Cardano to grow, bringing with it the advantages of decentralization for those who use it. + + +
+ +**_What are your accomplishments, and what are you most proud of?_** + +Day after day, we are bringing on new developers to build on the Cardano blockchain. Together with the Gimbalabs, we are facilitating the learning process, providing students with hands-on experience that is invaluable for understanding how Cardano works. Additionally, we have actively engaged with developers on Stack Exchange and Discord, answering questions and providing support. + +Developers have already created various innovative applications such as [donation portals](https://www.superbullishradio.com/), [gated-content blogs](https://www.brewclub.io/), and [NFT minting](https://badfoxmc.com/) and [stake pool portals](https://staking-template.meshjs.dev/). It will be exciting to witness what these developers, now armed with the right tools, will create next within the Cardano ecosystem. + + +
+ +**_What is the future of your project? For example, what new features are planned?_** + +**Bounty program.** We are developing a project bounty app that allows community members to propose feature requests for Mesh and fund them. Developers can collaborate on these requests to earn rewards and build their reputation. By incentivizing open source participation, this initiative will strengthen the Mesh community and encourage Cardano community members to contribute to open source. This will lead to a larger pool of developers making meaningful contributions and combining their expertise to develop the Cardano ecosystem further. + +**TypeScript serialization.** We are collaborating with Harmonic Labs to replace the current Rust-written serialization library with TypeScript-native, enabling a more comprehensive range of mobile and web applications to build on Cardano quickly. This upgrade will likely enhance Cardano's adoption and developer experience and produce better application performance and intuitive error message traces. + + +
+ +**_Which partnerships have you engaged in, and which are the most impactful?_** + +We are working closely with [Gimbalabs](https://gimbalabs.io/), [Harmonic Labs](https://www.harmoniclabs.tech/), and [TxPipe](https://txpipe.io/); we all came together to improve the developer experience and foster Cardano adoption. With Gimbalabs, we equipped developers with a range of tools and materials to create applications on Cardano utilizing their project-based learning initiative. In collaboration with Harmonic Labs, we integrate TypeScript serialization into Mesh, enabling developers to write smart contracts in JavaScript, simplifying the process, and improving the user experience. Additionally, we are partnering with TxPipe to support their efforts by providing [starter templates](https://demeter.run/starter-kits) for developers so developers can begin development immediately. + + +
+ +**_How can someone interested in Mesh find out more about it?_** + +You can stay updated on the latest Mesh development by following [@meshsdk](https://twitter.com/meshsdk) on Twitter. If you want to start building on Cardano, check out our [guides](https://meshjs.dev/guides), our guides in the [developer portal](../docs/get-started/mesh/overview), or use our [starter kits](https://meshjs.dev/starter-templates). + +Here are some of our links: + +- Website: https://meshjs.dev/ +- Twitter: https://twitter.com/meshsdk +- Discord: https://discord.gg/Z6AH9dahdH +- GitHub: https://github.com/MeshJS/mesh + + +
+ +*To engage in a conversation or share your thoughts about the interview with Jingles, please visit the designated **[Cardano Forum post](https://forum.cardano.org/t/developer-spotlight-mesh/115773)**.* \ No newline at end of file diff --git a/docs/careers.md b/docs/careers.md index 8a4a1297ed..bed2a2f22d 100644 --- a/docs/careers.md +++ b/docs/careers.md @@ -3,7 +3,7 @@ id: careers title: Careers on Cardano sidebar_label: Careers on Cardano description: Are you passionate about Cardano and looking for a job working in the Cardano ecosystem? -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png hide_table_of_contents: false --- diff --git a/docs/get-started/aiken.md b/docs/get-started/aiken.md new file mode 100644 index 0000000000..9f031d36dc --- /dev/null +++ b/docs/get-started/aiken.md @@ -0,0 +1,47 @@ +--- +id: aiken +title: Get Started with Aiken +sidebar_label: Aiken +description: Get Started with Aiken +image: /img/og/og-getstarted-aiken.png +--- + +Aiken is a modern smart contract platform for Cardano. + +## Installation + +### Install Aiken from Source + +To install Aiken from source we recommend `cargo`, a package manager for Rust. To install it, please refer to the [Rust Installation Guide](https://doc.rust-lang.org/stable/book/ch01-01-installation.html). + +```sh +cargo install --git https://github.com/aiken-lang/aiken.git +``` + +### Install Aiken from Nix Flakes + +```sh +nix build .#aiken +``` + +## Quick Start + +```sh +aiken --help +``` + +## Editor Integrations + +These editor integrations are currently available for Aiken: + +| Editor | Plugin | +| ------------- | ----------- | +| VSCode | [editor-integration-vscode](https://github.com/aiken-lang/editor-integration-vscode) | +| Vim/Neovim | [editor-integration-nvim](https://github.com/aiken-lang/editor-integration-nvim) | + + +## Hello World + +You are ready now to write and execute your first smart contract on Cardano. Have a look at the [hello world example contract](/docs/smart-contracts/aiken). + +Visit the Aiken website and explore [other examples](https://aiken-lang.org/getting-started/vesting). diff --git a/docs/get-started/air-gap.md b/docs/get-started/air-gap.md index 487cecb044..5c8b7956c9 100644 --- a/docs/get-started/air-gap.md +++ b/docs/get-started/air-gap.md @@ -3,14 +3,14 @@ id: air-gap title: Air Gap Environment sidebar_label: Air Gap Environment description: Secure your private keys on a network-free transaction host. -image: ../img/og-developer-portal.png +image: /img/og/og-security-air-gap-environment.png --- -"Air Gap" originally meant a computer or subnetwork was surrounded by "air" and so could have no data cable connections in or out, so it would be isolated from other computers & networks. These days it also means no radio-based network connection either (WiFi, Blueooth, etc.). +"Air gap" originally meant a computer or subnetwork was surrounded by "air" and so could have no data cable connections in or out, so it would be isolated from other computers & networks. These days it also means no radio-based network connection either (WiFi, Bluetooth, etc.). Developers & Cardano stake pool operators generally need an air gap environment in which to work with payment keys, stake pool keys and other cryptocurrency resources that offer high-value targets for hackers. -Some specialised hardware (e.g. hardware wallets) may also perform this function. If you believe you have such a device, please be certain that it offers isolation features for your stake pool or development *and* that you feel confident using these features. +Some specialised hardware (e.g. hardware wallets) may also perform this function. If you believe you have such a device, please be certain that it offers isolation features for your stake pool or development *and* that you feel secure entrusting your assets to those who have implemented these features. Otherwise, generally **you need a second computer** to create this air-gapped environment, and the rest of this guide is to help you do that. @@ -20,34 +20,34 @@ If you don't have an extra computer, or want to try building a standalone Linux ::: -## Option 1: Install your Air Gap environment on a standalone computer +## Option 1: Install your air gap environment on a standalone computer ### Choose the right computer You will get better results from an Intel PC than a Mac: - - Mac booting has booting peculiarities that are too complicated to generally address here. therefore the rest of this document assumes you'll be using a PC and not a Mac. + - Mac booting has peculiarities that are too complicated to generally address here: therefore the rest of this document assumes you'll be using a PC and not a Mac. -You will need this computer's whole disc. +You will need this computer's whole disc: - - Any second drive should be removed, and probably should be removed to avoid accidentally running malicious software. + - Any second drive should be removed if you don't know how to completely disable it in the Linux installation process. - The modern minimum drive size of 80GB will be enough for the Linux installation *and* all your Cardano support files, even if you are building them from scratch. -You can use an older machine: even a *very* old one. +You can use an older machine, even a *very* old one: - Linux, although well supported on most new machines, is less likely to have missing device drivers on older machines: so you might do better with an older machine than a newer one. - - This suits many developers & SPOs since an old or retired extra machine, or one with damaged software, will be a good candidate to devote to the single purpose of an "air gap" environment. + - This suits many developers & SPOs since an old or retired extra machine, or one with damaged software which will be replaced in the installation process, will be a good candidate to devote to the single purpose of an air gap environment. ### Confirm Ubuntu as installation OS, or choose differently We choose Ubuntu here because: - - It's a common choice on servers, so if you're building a stake pool you'll have the option of copying your `cardano-cli` binary to the air gap machine instead of compiling it in that machine. - - The Ubuntu desktop environment & commands are arguably better documented on the Internet than any other Linux variety. Getting help needs to be as easy as possible since you won't be able to search the Internet for help on the Air Gap machine itself. + - It's a common choice on servers, so if you're building a stake pool you'll have the option of copying your `cardano-cli` binary from a stake pool server to the air gap machine instead of compiling it again. + - The Ubuntu desktop environment & commands are arguably better documented on the Internet than any other Linux distribution. Getting help needs to be as easy as possible since you won't be able to search the Internet for help on the air gap machine itself. -The rest of these instructions will assume the choice of **Ubuntu** for your Air Gap environment OS. If installing a different variant of Linux, please remember: +The rest of these instructions will assume the choice of **Ubuntu** for your air gap environment OS. If installing a different variant of Linux, please remember: - - When we use the term Ubuntu or show screenshots of its installer, look for equivalents on your own chosen Linux variant. + - When you read the term Ubuntu or show screenshots of its installer, look for equivalents on your own chosen Linux variant. - There may be better choices than Ubuntu now or in the future: please feel free to share your results with others in the Cardano community, perhaps [contributing](../portal-contribute) your findings & procedures here on the Developer Portal. ### Prepare to follow Ubuntu installation instructions @@ -62,13 +62,13 @@ When setting up the Ubuntu filesystems, you'll be given the option of creating a Your boot and UEFI partitions might not be encrypted, depending on the type of computer you have & version of the GRUB software with your OS installer. -Therefore, as a precaution, never attach a USB drive to your Air Gap machine unless you've either formatted the drive or built it as installation media. +Therefore, as a precaution, never attach a USB drive to your air gap machine unless you've either formatted the drive or built it as installation media. ::: -The main advantage to encrypting your Air Gap system: +The main advantage to encrypting your air gap system: - - Someone gaining physical access to your machine, or stealing it, will be prevented from violating your account (e.g. stealing your stake pool pledge\!) or stake pool security. 😎 + - Someone gaining physical access to your machine, or stealing it, will be prevented from violating your address (e.g. stealing your stake pool pledge\!) or stake pool (e.g. cloning your stake pool) security. 😎 The main disadvantage to encrypting it: @@ -78,14 +78,14 @@ The main disadvantage to encrypting it: Suggested password requirements: - - has never been transmitted over, or stored in, cleartext on the Internet, or stored in cleartext on your computer itself (just in case your Air Gap is accidentally broken) + - has never been transmitted over, or stored in, cleartext on the Internet, or stored in cleartext on your computer itself (just in case your air gap is accidentally broken) - has length & complexity enough to hash to about 2^128 possible values: this means at least 20 apparently random characters. ### Begin standard Ubuntu installation (with some modifications) -As you follow the standard procedure (also linked above), stop at the points in the headings below to ensure you're installing your Air Gap environment correctly. +As you follow the standard procedure (also linked above), stop at the points in the headings below to ensure you're installing your air gap environment correctly. -Before starting, there is no need to physically disconnect your chosen Air Gap machine from the Internet, or do anything to your home router to disable WiFi. +Before starting, there is no need to physically disconnect your chosen air gap machine from the Internet, or do anything to your home router to disable WiFi. :::note @@ -95,7 +95,7 @@ The Internet will be unconfigured and disconnected after the OS is installed & p ### Follow instructions: [Ubuntu Tutorials > Install Ubuntu desktop](https://ubuntu.com/tutorials/install-ubuntu-desktop) -... paying partcular attention to these steps: +... paying particular attention to these steps: #### Wireless (if asked) @@ -109,7 +109,7 @@ If your computer doesn't have a cabled connection, it is acceptable under our se Select **Minimal installation**, since this is the least likely to leave you with security intrusive applications and services. - - the more general installation has cloud based services and games which tend to initiate Internet connections. + - The "Normal" installation has cloud based services and games which tend to initiate Internet connections. - LibreOffice software is not included in the "minimal" packages but is recommended to add later (since it helps encrypt password & mnemonic backups). **Do not select** (as you normally would) the option for **third-party software for graphics and WiFi** because of the potential for institutional spyware. @@ -125,7 +125,7 @@ Tick **Erase disk and install Ubuntu**.... you've already confirmed there's noth :::caution -The Air Gap installation should not be a part of any dual-booting environment because of the inevitable security risks that would create. +The air gap installation should not be a part of any conventional dual-booting environment because of the inevitable security risks that would create. ::: @@ -146,8 +146,9 @@ Don’t hit the **Continue** button unless you can verify it now says ***LVM and Enter the password you have prepared earlier as a **volume decryption key.** - - At this point you might want to check the password a few times that you can type it properly: either with consistency from written notes, or from memory. - - To double check in this installation environment: move over to the left (the "dock") where you'll see a text editor icon, in which you can practice typing the password a few times. + - At this point you might want to check a few times that you can type this password properly: either with consistency from written notes, or from memory. + - To double check in this installation environment: move over to the left (the "dock") where you'll see a text editor icon, in which you can practice typing the password without leaving a record. + - At this point the disk is only emulated in RAM: but just to be safe, don't save this file anywhere! #### Finish & reboot @@ -159,15 +160,15 @@ Ubuntu will finish installing and then you'll be prompted to remove the installa - If you followed these recommendations to only install one single OS on one single disk, the boot menu you see (from [GRUB](https://help.ubuntu.com/community/Grub2)) will have only one choice: **Ubuntu**, with the software you just installed, which will be selected by default after a few seconds whenever the system starts. - - If you selected the encryption option for your Ubuntu system, you will need to enter the encryption password every time you start that system. + - If you selected the encryption option for your Ubuntu system, you will need to enter the encryption password every time you start the system. ### Configure Ubuntu according to security recommendations -At the screen "Welcome to Ubuntu" (which new users are currently *forced* to interact with), *refuse **everything*** it offers you: +At the screen "Welcome to Ubuntu" (which new users are currently *forced* to interact with), _refuse **everything**_ it offers you: - no online accounts - no Canonical Livepatch - - no sending any system information, ever + - no sending any system information, ever! - no Location Services #### Basic security tightening at command line @@ -185,7 +186,7 @@ sudo apt remove unattended-upgrades Removing Snap is optional because default snaps on the Ubuntu installation media have the same security provenance as the default packages on that same release... yet snaps will also be upgraded in the next part of this procedure, and these upgraded snaps may not be subjected to the same security vetting. -To proceed with removing Snap, follow these instructions (the proceduce exact procedure changes often & these instructions may be the best maintained to date): +To proceed with removing Snap, follow these instructions (the exact procedure changes often & these instructions may be the best maintained to date): - **[How do I turn off snap in Ubuntu?](https://linuxhint.com/turn-off-snap-ubuntu/)** @@ -202,12 +203,12 @@ sudo apt upgrade ##### (optional) Install LibreOffice -This is recommended because it will give you a means of taking password-encrypted notes that can move between your Air Gap and computer host environments *in both directions*, so you can: +This is recommended because it will give you a means of taking password-encrypted notes that can move between your air gap and computer host environments *in both directions*, so you can: - record transaction details from your home computer environment & Internet connected machines, for use in the air gap (as per [Secure Workflow](./secure-workflow)): - your Cardano account balances, UTxO addresses & payment addresses - - notes from personal files & web sites about the work you will be doing in within the air gap (since you won't have Internet access there); - - take notes in the Air Gap environment (problems, error messages) to copy back to your computer, since you can't upload them through the air gap. + - notes from personal files & web sites about the work you will be doing within the air gap (since you won't have Internet access there); + - take notes in the air gap environment (problems, error messages) to copy back to your computer, since you can't upload them through the air gap. LibreOffice documents saved with a password are entirely AES-encrypted with a key deriving from that password, which produces arguably the best commercially available security for files & data. @@ -229,7 +230,7 @@ Adding the extra package `p7zip-rar` should make saving files with encryption & #### Install secure deletion tools -You might need to erase any trace of an unencrypted file that could lead to loss of your funds or Cardano enterprises if it were reconstructed. Therefore you should [install the `secure-delete` tools](https://www.unixmen.com/securely-delete-hard-drive-data-with-secure-delete/) to allow you to zero-write files & their metadata or drive contents & empty disk space: +You might need to erase any trace of an unencrypted file that could lead to loss of your funds or Cardano enterprises if it were reconstructed (since ordinary file deletions don't delete data blocks). Therefore you should [install the `secure-delete` tools](https://www.unixmen.com/securely-delete-hard-drive-data-with-secure-delete/) to allow you to zero-write files & their metadata or drive contents & empty disk space: ``` bash apt install secure-delete @@ -245,14 +246,14 @@ Use the standard instructions here at the Developer Portal: - **[Installing cardano-node and cardano-cli from source](../get-started/installing-cardano-node)** -Note this will build `cardano-node` as well as `cardano-cli`, but don't worry: you won't be running a node inside the Air Gap. 😜 +Note this will build `cardano-node` as well as `cardano-cli`, but don't worry: you won't be running a node inside the air gap. 😜 ### Unplug from Internet FOREVER We will leave the definition of "forever" up to your understanding of Internet threats and whether these can come from OS package repositories, etc., with this in mind: - - Software updates at 6-month intervals (e.g. after the Ubuntu "point releases") will patch security problems idendified during that period: as well as install new software which may introduce *new* security problems. - - Any spyware or back-door deliberately placed in the package upgrades on Ubuntu or any other version of Linux could generally just as easily have been placed on the packages used to build your installation media. + - Software updates at 6-month intervals (e.g. after the Ubuntu "point releases") will patch security problems identified during that period: as well as install new software which may introduce *new* security problems. + - Any spyware or backdoor deliberately placed in the package upgrades on Ubuntu or any other version of Linux could generally just as easily have been placed on the packages used to build your installation media. ### Precautions to avoid accidental connection to the Internet @@ -274,11 +275,11 @@ Some routers maintain a list of MAC addresses which will not be given an IP addr Therefore, you can [find your WiFi MAC address](https://help.ubuntu.com/stable/ubuntu-help/net-macaddress.html.en) and add it to your router's blacklist: usually in its DNS, DHCP, or LAN settings. -### Congratulations, your Air Gap Environment is complete! +### Congratulations, your air gap environment is complete! You now have a safe place you can use for your [Secure Transaction Workflow](./secure-workflow). -## Option 2: Install your Air Gap environment on a persistent USB drive +## Option 2: Install your air gap environment on a persistent USB drive :::caution @@ -289,20 +290,19 @@ Linux veterans only\! (otherwise please [follow option 1](#option-1-install-your This option may suit more demanding users, especially those: - who travel a lot and need to maintain their Cardano operations "on the road"; - - who need the convenience of booting in a Air Gap environment which has direct access to all their files on the host computer (as you would when booting off from an installer USB drive); - - who, instead of using a USB drive to transfer unencrypted files in & out of the Air Gap, would rather use that same USB drive to store them with encryption while providing the Cardano CLI for use on any machine supporting the same boot method; - - who want to make backups or their keys, passwords and other records from their Air Gap environment directly to the host computer. + - who need the convenience of booting in an air gap environment which has direct access to all their files on the host computer (as you would when booting off from an installer USB drive); + - who, instead of using a USB drive to transfer unencrypted files in & out of the air gap, would rather use that same USB drive to store these files with encryption while also providing the Cardano CLI for use on any machine supporting the same boot method; + - who want to make encrypted backups or their keys, passwords and other records from their air gap environment directly to the host computer. -If this appeals to you, and you don't mind following a more complilcated and error-prone installation procedure, you might want to install the Air Gap environment on a bootable USB drive instead. You can then boot a computer from this drive to have access to your secure resources and `cardano-cli` while isolating that computer from the Internet as well as any malicious software that might be installed on that computer. +If this appeals to you, and you don't mind following a more complicated and error-prone installation procedure, you might want to install the air gap environment on a bootable USB drive instead. You can then boot a computer from this drive to have access to your secure resources and `cardano-cli` while isolating that computer from the Internet as well as any malicious software that might be installed on that computer. -This loosely documented configuration has been called the **Frankenwallet**, with separate instructions at this link which mostly follow the procedure above and include semantics for using your bootable USB environment in secure & blockchain workflow: +This loosely documented configuration has been called the **Frankenwallet**, with separate instructions at these links which mostly follow the procedure above: - - **[The Frankenwallet](https://cosd.com/frankenwallet)** + - **[The Frankenwallet](https://cosd.com/frankenwallet)** - detailed external web site, including semantics for using your bootable USB environment in secure & blockchain workflow + - [Get Started with the Frankenwallet](/docs/operate-a-stake-pool/frankenwallet) - one-page summary here on the Developer Portal :::warning -The *Frankenwallet* procedure is external to (and not maintained or endorsed by the owners of) the Developer Portal. - -Also: these instructions may be difficult or unsafe to follow unless you have experience with "dual boot" Linux installations and other custom OS & booting configurations. +These instructions may be difficult or unsafe to follow unless you have experience with "dual boot" Linux installations and other custom OS & booting configurations. ::: diff --git a/docs/get-started/blockfrost.md b/docs/get-started/blockfrost.md deleted file mode 100644 index 6f30edc752..0000000000 --- a/docs/get-started/blockfrost.md +++ /dev/null @@ -1,218 +0,0 @@ ---- -id: blockfrost -title: Get Started with Blockfrost -sidebar_label: Blockfrost -description: Get Started with Blockfrost -image: ../img/og-developer-portal.png ---- - -Blockfrost provides API to access and process information stored on the Cardano blockchain. The basic tier is free and allows 50,000 requests per day. - -## Sign in - -[Sign in on Blockfrost](https://blockfrost.io/auth/signin) with your GitHub account. No registration required. Enter a project name and select Cardano mainnet or Cardano testnet, depending on your needs. - -![img](../../static/img/get-started/blockfrost/1-add-project.png) - -## Get your API key - -After clicking on `Save Project` you will immediately get your `API KEY`. Save it. You will need this key for every request. - -![img](../../static/img/get-started/blockfrost/2-get-api-key.png) - -## Query the latest epoch - -Send your first request to get data about the latest epoch. Don't forget to replace `1234567890`with your `API KEY`. - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - - - - -```sh -curl -H 'project_id: 1234567890' https://cardano-mainnet.blockfrost.io/api/v0/epochs/latest -``` - - - - -```sh -wget --header='project_id: 1234567890' -qO- https://cardano-mainnet.blockfrost.io/api/v0/epochs/latest -``` - - - - -```php -$headers = array('http'=> array( - 'method' => 'GET', - 'header' => 'project_id: 1234567890' - ) - ); -$context = stream_context_create($headers); -$json = file_get_contents('https://cardano-mainnet.blockfrost.io/api/v0/epochs/latest', false, $context); -$parsedJson = json_decode($json); -``` - - - - -If you have done everything correctly you will get a response in JSON format, similar to this: - -```json -{ - "epoch": 225, - "start_time": 1603403091, - "end_time": 1603835086, - "first_block_time": 1603403092, - "last_block_time": 1603835084, - "block_count": 21298, - "tx_count": 17856, - "output": "7849943934049314", - "fees": "4203312194", - "active_stake": "784953934049314" -} -``` - -## Query data of a specific stake pool - -Let's look into another example and query data of a specific stake pool. You need to provide a Bech32 or hexadecimal `pool_id`. - - - - -```sh -curl -H 'project_id: 1234567890' https://cardano-mainnet.blockfrost.io/api/v0/pools/c1cadab46b74defa9f79b59b617fe2a50bdbce6b367e472b6109a7bc - -``` - - - - -```sh -wget --header='project_id: 1234567890' -qO- https://cardano-mainnet.blockfrost.io/api/v0/pools/c1cadab46b74defa9f79b59b617fe2a50bdbce6b367e472b6109a7bc - -``` - - - - -```php -$headers = array('http'=> array( - 'method' => 'GET', - 'header' => 'project_id: 1234567890' - ) - ); -$context = stream_context_create($headers); -$json = file_get_contents('https://cardano-mainnet.blockfrost.io/api/v0/pools/c1cadab46b74defa9f79b59b617fe2a50bdbce6b367e472b6109a7bc', false, $context); -$parsedJson = json_decode($json); -``` - - - - -You will get a response in JSON format, similar to this: - -```json -{ - "vrf_key": "57c4d222e0f2f8083d7b63c8f7886f16fb7046621442bbd857f404b6f433c5e6", - "blocks_minted": 1675, - "live_stake": "33978569808898", - "live_size": 0.0014709194212545152, - "live_saturation": 0.5169025966078663, - "live_delegators": 395, - "active_stake": "37990508551252", - "active_size": 0.0016498675360681707, - "declared_pledge": "250010000000", - "live_pledge": "765352096766", - "margin_cost": 0.015, - "fixed_cost": "340000000", - "reward_account": "stake1u97pa0j0wtj5r3l6462z0xmlf5tg0dxpmss3y20almfnj5gc4tmrw", - "owners": [ - "stake1uywma333mgeccv3aa2gvrkhz4qtz0cq9sszrnws8pv78gqqq6a65g", - "stake1u9dqkqmdtdcav5qd933xwvwxgamrsdkr0zsn63ca0v4lz5cm7tvq0", - "stake1u97pa0j0wtj5r3l6462z0xmlf5tg0dxpmss3y20almfnj5gc4tmrw" - ], - "registration": [ - "f6865b914988ed40998d2ff5453bd8af16976688065c9756d32c7a872064aaf8", - "0e08711da89ebbaefaf897f5633c7b7bc6c1c9037451431745fbaefbf1227ec7", - "9b85adfebc25f2cc7737039fb376043207e1ec7147b2800436138e7df58c70d4", - "1243db764e42a3ec89d815d96bcf7242bfd2837d54f3047f2b5abacd7e52345d" - ], - "retirement": [] -} -``` - -## Query information of a specific asset - -Let's look at this last example and query information of a specific native token on Cardano. You need to provide the string concatenation of the `policy_id` and hex-encoded `asset_name`. - - - - -```sh -curl -H 'project_id: 1234567890' https://cardano-mainnet.blockfrost.io/api/v0/assets/d894897411707efa755a76deb66d26dfd50593f2e70863e1661e98a07370616365636f696e73 - -``` - - - - -```sh -wget --header='project_id: 1234567890' -qO- https://cardano-mainnet.blockfrost.io/api/v0/assets/d894897411707efa755a76deb66d26dfd50593f2e70863e1661e98a07370616365636f696e73 - -``` - - - - -```php -$headers = array('http'=> array( - 'method' => 'GET', - 'header' => 'project_id: 1234567890' - ) - ); -$context = stream_context_create($headers); -$json = file_get_contents('https://cardano-mainnet.blockfrost.io/api/v0/assets/d894897411707efa755a76deb66d26dfd50593f2e70863e1661e98a07370616365636f696e73', false, $context); -$parsedJson = json_decode($json); -``` - - - - -You will get this JSON response: - -```json -{ - "policy_id": "d894897411707efa755a76deb66d26dfd50593f2e70863e1661e98a0", - "asset_name": "7370616365636f696e73", - "fingerprint": "asset1pmmzqf2akudknt05ealtvcvsy7n6wnc9dd03mf", - "quantity": "50000000", - "initial_mint_tx_hash": "3cce12c77b9d11d70575320c4f2834b26debb065308fbe43954018fbeb90010d", - "onchain_metadata": null, - "metadata": null -} -``` - -## Blockfrost documentation - -Blockfrost has a powerful API with which you can do a lot of things. Visit [docs.blockfrost.io](https://docs.blockfrost.io) to see the complete API documentation. diff --git a/docs/get-started/blockfrost/cardano-apis.md b/docs/get-started/blockfrost/cardano-apis.md new file mode 100644 index 0000000000..20242f87e0 --- /dev/null +++ b/docs/get-started/blockfrost/cardano-apis.md @@ -0,0 +1,113 @@ +--- +id: cardano-api +sidebar_position: 3 +title: Cardano API +sidebar_label: Cardano API +description: Blockfrost Cardano API +--- + +Blockfrost's primary objective is to offer API access to the Cardano ecosystem, including not only the mainnet network, but also various testnet networks such as preview and preprod. + +## Cardano networks + +Each distinct network not only needs its own `project_id` but also has a unique endpoint URL. + +| Network | Endpoint | +| ----------------------- | ----------------------------------------------- | +| Cardano mainnet | `https://cardano-mainnet.blockfrost.io/api/v0/` | +| Cardano preprod testnet | `https://cardano-preprod.blockfrost.io/api/v0/` | +| Cardano preview testnet | `https://cardano-preview.blockfrost.io/api/v0/` | + +## Your first request + +Blockfrost adheres to few basic [key concepts](https://blockfrost.dev/docs/start-building#key-concepts) and uses REST, which requires you to request a specific endpoint. Making a request to a specific endpoint the API returns the requested data, allowing you to process it according to your particular use case. + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + + + +```bash +export BLOCKFROST_PROJECT_ID_MAINNET=mainnetqnWuOt69v42rIes4punuD20FAsRuqnpDg4 +curl -H "project_id: $BLOCKFROST_PROJECT_ID_MAINNET" https://cardano-mainnet.blockfrost.io/api/v0/epochs/latest +``` + + + + +```javascript +import { BlockFrostAPI } from "@blockfrost/blockfrost-js"; + +async function run() { + const API = new BlockFrostAPI({ + projectId: "YOUR API KEY HERE", + }); + + try { + const latestBlock = await API.blocksLatest(); + console.log(latestBlock); + } catch (error) { + console.error(error); + } +} + +run(); +``` + + + + +There are over [15 different SDKs](https://blockfrost.dev/docs/sdks) available for a variety of programming languages. + +* [blockfrost-js](https://github.com/blockfrost/blockfrost-js) +* [blockfrost-haskell](https://github.com/blockfrost/blockfrost-haskell) +* [blockfrost-python](https://github.com/blockfrost/blockfrost-python) +* [blockfrost-rust](https://github.com/blockfrost/blockfrost-rust) +* [blockfrost-go](https://github.com/blockfrost/blockfrost-go) +* [blockfrost-ruby](https://github.com/blockfrost/blockfrost-ruby) +* [blockfrost-java](https://github.com/blockfrost/blockfrost-java) +* [blockfrost-scala](https://github.com/blockfrost/blockfrost-scala) +* [blockfrost-swift](https://github.com/blockfrost/blockfrost-swift) +* [blockfrost-kotlin](https://github.com/blockfrost/blockfrost-kotlin) +* [blockfrost-elixir](https://github.com/blockfrost/blockfrost-elixir) +* [blockfrost-dotnet](https://github.com/blockfrost/blockfrost-dotnet) +* [blockfrost-arduino](https://github.com/blockfrost/blockfrost-arduino) +* [blockfrost-php](https://github.com/blockfrost/blockfrost-php) +* [blockfrost-crystal](https://github.com/blockfrost/blockfrost-crystal) + + + + +When executed correctly, you will receive a response in JSON format, like so: + +```json +{ + "time": 1641338934, + "height": 15243593, + "hash": "4ea1ba291e8eef538635a53e59fddba7810d1679631cc3aed7c8e6c4091a516a", + "slot": 412162133, + "epoch": 425, + "epoch_slot": 12, + "slot_leader": "pool1pu5jlj4q9w9jlxeu370a3c9myx47md5j5m2str0naunn2qnikdy", + "size": 3, + "tx_count": 1, + "output": "128314491794", + "fees": "592661", + "block_vrf": "vrf_vk1wf2k6lhujezqcfe00l6zetxpnmh9n6mwhpmhm0dvfh3fxgmdnrfqkms8ty", + "op_cert": "da905277534faf75dae41732650568af545134ee08a3c0392dbefc8096ae177c", + "op_cert_counter": "18", + "previous_block": "43ebccb3ac72c7cebd0d9b755a4b08412c9f5dcb81b8a0ad1e3c197d29d47b05", + "next_block": "8367f026cf4b03e116ff8ee5daf149b55ba5a6ec6dec04803b8dc317721d15fa", + "confirmations": 4698 +} +``` + +To learn more about different endpoints, have a look at the [official Blockfrost documentation](https://blockfrost.dev/). diff --git a/docs/get-started/blockfrost/get-started.md b/docs/get-started/blockfrost/get-started.md new file mode 100644 index 0000000000..7343179fd2 --- /dev/null +++ b/docs/get-started/blockfrost/get-started.md @@ -0,0 +1,58 @@ +--- +id: get-started +sidebar_position: 2 +title: Get started with Blockfrost +sidebar_label: Get started +description: Get started with Blockfrost +image: /img/og/og-getstarted-blockfrost.png +--- + +In order to use the [hosted version of Blockfrost API](https://blockfrost.io/), you need to [create an account first](https://blockfrost.io/auth/signin). + +# Log in / Sign up + +![Blockfrost.io landing page](../../../static/img/get-started/blockfrost/getting-started-1_frontend_landing.png) + +When [creating a Blockfrost.io account](https://blockfrost.io/auth/signin) you can use your email or Single Sing-On through Google, GitHub and GitLab. Armed with an account, you can start building your apps! + +:::info +Blockfrost.io uses password-less login. No need to worry about losing or storing any passwords! +::: + +# Creating your project + +After setting up your account, you can now create your first project. Select **+ ADD PROJECT**, choose a suitable name, and ensure you pick the correct network. + +![Add Blockfrost project](../../../static/img/get-started/blockfrost/getting-started-2_add_project.png) + +Upon clicking **SAVE PROJECT**, you will be redirected to the project subpage where a unique secret API key, known as `project_id`, will be generated. + +![Get Blockfrost project_id](../../../static/img/get-started/blockfrost/getting-started-3_get_api_key.png) + +:::warning +Protect your secrets! Since `project_id` is a secret, ensure it is not committed to a public repository or embedded in your code. When possible, use environment variables to prevent exposing `project_id`. Ideally, set up your own application backend to store your `project_id` securely, avoiding potential leaks. Otherwise, unauthorized individuals could exploit your token. +::: + +In [Blockfrost](https://blockfrost.io/), a project provides API access to a particular [network](https://blockfrost.dev/docs/start-building#available-networks). Each project is linked to a secret token known as `project_id`, which must be used to access the API. + +# SDKs + +An SDK, or Software Development Kit, is a collection of tools, libraries, and resources that developers use to create, build, and streamline applications for specific platforms. With support for [over 15 distinct programming languages](https://blockfrost.dev/docs/sdks), Blockfrost stands out as the most adaptable toolkit for accessing data within the Cardano blockchain. + +Here's a list of some of them: + +* [blockfrost-js](https://github.com/blockfrost/blockfrost-js) +* [blockfrost-haskell](https://github.com/blockfrost/blockfrost-haskell) +* [blockfrost-python](https://github.com/blockfrost/blockfrost-python) +* [blockfrost-rust](https://github.com/blockfrost/blockfrost-rust) +* [blockfrost-go](https://github.com/blockfrost/blockfrost-go) +* [blockfrost-ruby](https://github.com/blockfrost/blockfrost-ruby) +* [blockfrost-java](https://github.com/blockfrost/blockfrost-java) +* [blockfrost-scala](https://github.com/blockfrost/blockfrost-scala) +* [blockfrost-swift](https://github.com/blockfrost/blockfrost-swift) +* [blockfrost-kotlin](https://github.com/blockfrost/blockfrost-kotlin) +* [blockfrost-elixir](https://github.com/blockfrost/blockfrost-elixir) +* [blockfrost-dotnet](https://github.com/blockfrost/blockfrost-dotnet) +* [blockfrost-arduino](https://github.com/blockfrost/blockfrost-arduino) +* [blockfrost-php](https://github.com/blockfrost/blockfrost-php) +* [blockfrost-crystal](https://github.com/blockfrost/blockfrost-crystal) diff --git a/docs/get-started/blockfrost/open-source.md b/docs/get-started/blockfrost/open-source.md new file mode 100644 index 0000000000..705218b8cd --- /dev/null +++ b/docs/get-started/blockfrost/open-source.md @@ -0,0 +1,32 @@ +--- +id: open-source +sidebar_position: 6 +title: Blockfrost Open Source +sidebar_label: Open Source +description: Open Source +--- + +Blockfrost [backend](https://github.com/blockfrost/blockfrost-backend-ryo), SDKs, [OpenAPI specifications](https://github.com/blockfrost/openapi) and other tooling is open-source and maintained with the support of Cardano community. Participation is always welcome and encouraged. + +# Run Your Own + +Source code of the Blockfrost backend is hosted on Github, in the [blockfrost-ryo-backend](https://github.com/blockfrost/blockfrost-backend-ryo) repository. + +To build it, you need to follow the instructuion specified in the [README](https://github.com/blockfrost/blockfrost-backend-ryo#blockfrostio-backend-service) of the repository or you can even use pre-built Docker images: + +```bash +docker run --rm \ + --name blockfrost-ryo \ + -p 3000:3000 \ + -e BLOCKFROST_CONFIG_SERVER_LISTEN_ADDRESS=0.0.0.0 \ + -v $PWD/config:/app/config \ + blockfrost/backend-ryo:latest +``` + +# OpenAPI Specification + +The OpenAPI specification is open-source and is itended to serve as a good practice for API built on Cardano. The [source code](https://github.com/blockfrost/openapi) is hosted on Github too. Current version is rendered and available at [docs.blockfrost.io](https://docs.blockfrost.io/). + +# SDKs and other tooling + +All the official SDKs as well as other interesting tooling is hosted under the [Blockfrost organization on Github](https://github.com/blockfrost). diff --git a/docs/get-started/blockfrost/other-apis.md b/docs/get-started/blockfrost/other-apis.md new file mode 100644 index 0000000000..279a2e31e9 --- /dev/null +++ b/docs/get-started/blockfrost/other-apis.md @@ -0,0 +1,126 @@ +--- +id: others-api +sidebar_position: 4 +title: IPFS and Milkomeda API +sidebar_label: IPFS and Milkomeda API +description: Blockfrost IPFS and Milkomeda API +--- + +In addition to the Cardano ecosystem, [Blockfrost](https://blockfrost.io/) also offers entry points to other ecosystems: + +| Network | Endpoint | +| --------------------------------- | ------------------------------------------------ | +| InterPlanetary File System (IPFS) | `https://ipfs.blockfrost.io/api/v0/` | +| Milkomeda mainnet | `https://milkomeda-mainnet.blockfrost.io/api/v0/` | +| Milkomeda testnet | `https://milkomeda-testnet.blockfrost.io/api/v0/` | + +## IPFS + +IPFS, or InterPlanetary File System, is a distributed, peer-to-peer protocol designed for efficient and secure sharing of files and data across a global network. Is it commonly utilized for storing digital content externally from the main chain. + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + + + +```bash +export BLOCKFROST_PROJECT_ID_IPFS=ipfs_YOUR_PROJECT_ID +curl "https://ipfs.blockfrost.io/api/v0/ipfs/add" \ + -X POST \ + -H "project_id: $BLOCKFROST_PROJECT_ID_IPFS" \ + -F "file=@./static/img/logo.svg" +``` + + + + +```javascript +import { BlockFrostIPFS } from "@blockfrost/blockfrost-js"; + +const IPFS = new Blockfrost.BlockFrostIPFS({ + projectId: "YOUR IPFS KEY HERE", +}); + +async function runExample() { + try { + const added = await IPFS.add(`${__dirname}/static/img/logo.svg`); + console.log("added", added); + + const pinned = await IPFS.pin(added.ipfs_hash); + console.log("pinned", pinned); + } catch (err) { + console.log("error", err); + } +} + +runExample(); +``` + + + + +There are over [over 15 different SDKs](https://blockfrost.dev/docs/sdks) available for a variety of programming languages. + +* [blockfrost-js](https://github.com/blockfrost/blockfrost-js) +* [blockfrost-haskell](https://github.com/blockfrost/blockfrost-haskell) +* [blockfrost-python](https://github.com/blockfrost/blockfrost-python) +* [blockfrost-rust](https://github.com/blockfrost/blockfrost-rust) +* [blockfrost-go](https://github.com/blockfrost/blockfrost-go) +* [blockfrost-ruby](https://github.com/blockfrost/blockfrost-ruby) +* [blockfrost-java](https://github.com/blockfrost/blockfrost-java) +* [blockfrost-scala](https://github.com/blockfrost/blockfrost-scala) +* [blockfrost-swift](https://github.com/blockfrost/blockfrost-swift) +* [blockfrost-kotlin](https://github.com/blockfrost/blockfrost-kotlin) +* [blockfrost-elixir](https://github.com/blockfrost/blockfrost-elixir) +* [blockfrost-dotnet](https://github.com/blockfrost/blockfrost-dotnet) +* [blockfrost-arduino](https://github.com/blockfrost/blockfrost-arduino) +* [blockfrost-php](https://github.com/blockfrost/blockfrost-php) +* [blockfrost-crystal](https://github.com/blockfrost/blockfrost-crystal) + + + + + +When executed correctly, you will receive a response in JSON format, resembling the following: + +```json +{ + "name": "logo.svg", + "ipfs_hash": "QmUCXMTcvuJpwHF3gABRr69ceQR2uEG2Fsik9CyWh8MUoQ", + "size": "5617" +} +``` + +To learn more how to use IPFS with Blockfrost, have a look at the [official Blockfrost documentation](https://blockfrost.dev/docs/start-building/ipfs/) + +## Milkomeda + +Milkomeda is a protocol that brings EVM capabilities to non-EVM blockchains. As development progresses, Milkomeda will expand to offer L2 solutions (rollups) for several major blockchains including Cardano, Solana, and Algorand. + +```bash +export BLOCKFROST_PROJECT_ID_MILKOMEDA_MAINNET=ipfs_YOUR_PROJECT_ID +curl "https://milkomeda-mainnet.blockfrost.io/api/v0/" \ + -X POST \ + -H "project_id: $BLOCKFROST_PROJECT_ID_MILKOMEDA_MAINNET" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "eth_blockNumber", "params": []}' +``` + +When executed correctly, you will receive a response in JSON format, resembling the following: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": "0xa06919" +} +``` + +To learn more about how to use different JSON-RPC API calls or to setup the Metamask wallet, have a look at the [official Blockfrost documentation](https://blockfrost.dev/docs/start-building/milkomeda). diff --git a/docs/get-started/blockfrost/overview.md b/docs/get-started/blockfrost/overview.md new file mode 100644 index 0000000000..3af65cba54 --- /dev/null +++ b/docs/get-started/blockfrost/overview.md @@ -0,0 +1,17 @@ +--- +id: overview +sidebar_position: 1 +title: Overview of the Blockfrost ecosystem +sidebar_label: Overview +description: Blockfrost overview +--- + +Blockfrost is a comprehensive infrastructure toolkit designed to assist developers in building projects on the Cardano platform. + +At the heart of the ecosystem lies a user-friendly, swift, feature-rich and fine-tuned [API as a Service](https://blockfrost.io), providing seamless access to the Cardano blockchain and associated networks. The service is public and freely accessible, making it the perfect alternative to running and maintaining your own infrastructure and tools. + +In addition to the Cardano networks, it also provides access to IPFS and Milkomeda. + +The core technology of Blockfrost is [open-source](https://github.com/blockfrost/blockfrost-backend-ryo), and its development is supported by the collaborative efforts of the Cardano community. + +Find out more details on how to build with Blockfrost at [Blockfrost Development Hub](https://blockfrost.dev/). \ No newline at end of file diff --git a/docs/get-started/blockfrost/secure-webhooks.md b/docs/get-started/blockfrost/secure-webhooks.md new file mode 100644 index 0000000000..5dc6d2d7eb --- /dev/null +++ b/docs/get-started/blockfrost/secure-webhooks.md @@ -0,0 +1,17 @@ +--- +id: secure-webhooks +sidebar_position: 5 +title: Secure Webhooks +sidebar_label: Secure Webhooks +description: Secure Webhooks +--- + +Instead of repeatedly retrieving and processing potentially irrelevant blockchain data (polling), Blockfrost Secure Webhooks can be set up to streamline the process. Secure Webhooks notify your application only when relevant events occur, enhancing efficiency and reducing effort on your part. + +Webhooks empower Blockfrost to deliver real-time notifications to your application. Utilizing HTTP POST requests, Blockfrost Secure Webhooks transmit events to your application endpoint in JSON format. These events can subsequently be used to trigger actions within your backend systems. + +Optionally, you can create up to 5 trigger conditions for a webhook. Only events that meet all of the conditions will be sent to your endpoint. A condition rule consist of a field, a value, and an operator. You can choose from predefined condition fields or create a custom JSONPath query extracting the field you want to match. + +![Blockfrost.io JSONPath](../../../static/img/get-started/blockfrost/secure-webhooks-1_webhooks_jsonpath.png) + +Webhooks are both powerful and complex. To learn more, have a look at the [official Blockfrost documentation](https://blockfrost.dev/docs/start-building/webhooks/) diff --git a/docs/get-started/cardano-components.md b/docs/get-started/cardano-components.md index 3a8d601060..be33412970 100644 --- a/docs/get-started/cardano-components.md +++ b/docs/get-started/cardano-components.md @@ -3,17 +3,15 @@ id: cardano-components title: Cardano Components sidebar_label: Overview description: This article explains all the different Cardano components and their functions. -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-cardano-components.png --- -- [`cardano-node`](https://github.com/input-output-hk/cardano-node#cardano-node-overview) is the core component that is used to participate in a Cardano decentralised blockchain. -- `cardano-cli` is the Cardano Command Line Interface (CLI). For some time this component is included in [`cardano-node`](https://github.com/input-output-hk/cardano-node#cardano-node-overview). -- [`cardano-wallet`](https://github.com/input-output-hk/cardano-wallet#overview) is the HTTP server and command-line for managing UTxOs and HD wallets in Cardano. -- [`cardano-db-sync`](https://github.com/input-output-hk/cardano-db-sync#cardano-db-sync) is the component that follows the Cardano chain and stores blocks and transactions in PostgreSQL. -- [`cardano-graphql`](https://github.com/input-output-hk/cardano-graphql#overview) is a cross-platform, typed, and queryable API for Cardano. -- [`cardano-rosetta`](https://github.com/input-output-hk/cardano-rosetta#cardano-rosetta) is an implementation of the open standard [Rosetta](https://www.rosetta-api.org/) for Cardano. -- [`cardano-addresses`](https://github.com/input-output-hk/cardano-addresses#overview) is a module that provides mnemonic (backup phrase) creation, and conversion of a mnemonic to seed for wallet restoration, and address derivation functionalities. -- [`cardano-ledger-specs`](https://github.com/input-output-hk/cardano-ledger-specs#cardano-ledger) is the formal specification and executable model of the ledger rules introduced by the Shelley release. -- [`bech32`](https://github.com/input-output-hk/bech32#bech32-command-line) is the Haskell implementation of the Bech32 address format (BIP 0173). -- [`smash`](https://github.com/input-output-hk/smash#smash-overview) is the stake pool metadata aggregation server. It provides off-chain metadata linked to the on-chain registrations of the stake pools. -- [`ouroboros-network`](https://github.com/input-output-hk/ouroboros-network/#ouroboros-network) is a network package which implements the ouroboros family of protocols, multiplexing layer. +The Cardano blockchain is powered by a flock of inter-connected nodes. The [`cardano-node`](https://github.com/input-output-hk/cardano-node#cardano-node-overview) is the software capable of running as a core block producer, as a relay or as a local entry-point to the network. The node itself is made out of several inter-connected component parts: + +- [`The settlement layer`](https://github.com/input-output-hk/cardano-ledger-specs#cardano-ledger): a multi-era ledger implementation derived from a set of formal specifications. This is where the core Cardano entities are defined as well as the rules for using them. This is the bedrock on top of which all other components build upon. + +- [`The consensus layer`](https://github.com/input-output-hk/ouroboros-network/tree/master/ouroboros-consensus#consensus): an implementation of the consensus layer of the Ouroboros family of protocols. If you've heard about _"The Hard-Fork Combinator"_, this is where you can find it. For a high-level − albeit technical − introduction, have a look at [The Abstract Nature of The Consensus Layer](https://iohk.io/en/blog/posts/2020/05/28/the-abstract-nature-of-the-consensus-layer/). + +- [`The networking layer`](https://github.com/input-output-hk/ouroboros-network/#ouroboros-network): a peer-to-peer networking stack geared towards Proof-of-Stake systems. This includes a framework for writing typed protocols with supports for pipelining, multiplexing and various protections against adversarial peers. + +- [`The scripting layer`](https://github.com/input-output-hk/plutus#plutus-core): also known as _Plutus_, it is a scripting language embedded in the Cardano ledger to provide smart-contract capabilities to the network. At its core, it is a typed Lambda-Calculus which acts as low-level interpreted assembly code. diff --git a/docs/get-started/cardano-developer-community.md b/docs/get-started/cardano-developer-community.md index 83116b63a7..039e63d39c 100644 --- a/docs/get-started/cardano-developer-community.md +++ b/docs/get-started/cardano-developer-community.md @@ -3,7 +3,7 @@ id: cardano-developer-community title: Get Started in the Cardano Developer Community sidebar_label: Developer Community description: Get Started in the Cardano Developer Community. -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-developer-community.png --- Apart from the two leading platforms [Stack Exchange](https://cardano.stackexchange.com) and [Cardano Forum](https://forum.cardano.org/c/developers/29), Cardano developers and stake pool operators spread across different platforms. Each with its niche. @@ -26,7 +26,7 @@ A subreddit dedicated to everyone building on the Cardano blockchain. Chat style conversations on Telegram in one of the oldest Cardano developer groups. [**IOG Technical Discord**](https://discord.com/invite/w6TwW9bGA6) -Head to the the [IOG Discord](https://discord.com/invite/w6TwW9bGA6) if you want to join the [Plutus Pioneers](../smart-contracts/plutus#get-started-with-the-plutus-pioneer-program). +Head to the [IOG Discord](https://discord.com/invite/w6TwW9bGA6) if you want to join the [Plutus Pioneers](../smart-contracts/plutus#get-started-with-the-plutus-pioneer-program). [**t.me/IOHK_Marlowe**](https://t.me/IOHK_Marlowe) Dedicated channel for Marlowe developers and users. Marlowe is a specialized domain-specific language for financial smart contracts on Cardano. You can ask questions, participate in discussions and meet the team behind Marlowe. @@ -34,7 +34,7 @@ Dedicated channel for Marlowe developers and users. Marlowe is a specialized dom [**Developer Portal Discord**](https://discord.gg/Exe6XmqKDx) If you would like to help develop the Developer Portal further, please join our [Discord](https://discord.gg/Exe6XmqKDx). -[**CIPs - biweekly meetings**](https://discord.gg/tDeGHPEWEG) +[**CIPs - biweekly meetings**](https://discord.com/invite/Jy9YM69Ezf) CIP meetings discuss Cardano Improvement Proposals every other week. Join Editors and community members in the dedicated discord server to keep up with the ongoing technical discussions regarding standards, processes and ongoing Cardano conversations. ## Stake pool operator channels @@ -43,4 +43,9 @@ CIP meetings discuss Cardano Improvement Proposals every other week. Join Editor Best practice workgroup on Telegram for stake pool operators. This group is hectic. A good resource to search for answers. [**forum.cardano.org**](https://forum.cardano.org/c/staking-delegation/156) -If you care about well structured, long format discussions, visit the stake pool operator categories on [forum.cardano.org](https://forum.cardano.org/c/staking-delegation/156). \ No newline at end of file +If you care about well structured, long format discussions, visit the stake pool operator categories on [forum.cardano.org](https://forum.cardano.org/c/staking-delegation/156). + +## Developer Surveys + +[**Developer Ecosystem Survey**](https://cardano-foundation.github.io/state-of-the-developer-ecosystem/2022) +For the first time ever, an annual survey to assess the state of the Cardano developer ecosystem was conducted. This survey comes as part of our commitment to both empower the Cardano community and foster the open source maturity of the Cardano ecosystem. diff --git a/docs/get-started/cardano-serialization-lib/create-react-app.md b/docs/get-started/cardano-serialization-lib/create-react-app.md index a20be655f3..8bb72f9e72 100644 --- a/docs/get-started/cardano-serialization-lib/create-react-app.md +++ b/docs/get-started/cardano-serialization-lib/create-react-app.md @@ -4,7 +4,7 @@ sidebar_position: 6 title: Create React App for Serialization-Lib sidebar_label: Create React App description: A Create React App with the necessary code to get started developing front-end DApps on Cardano -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-serialization-lib.png --- ## cardano-wallet-connector diff --git a/docs/get-started/cardano-serialization-lib/overview.md b/docs/get-started/cardano-serialization-lib/overview.md index 71630701ed..8ad1b2e227 100644 --- a/docs/get-started/cardano-serialization-lib/overview.md +++ b/docs/get-started/cardano-serialization-lib/overview.md @@ -4,7 +4,7 @@ sidebar_position: 1 title: Get Started with Cardano Serialization Lib sidebar_label: Overview description: Get Started with Cardano Serialization Lib -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-serialization-lib.png --- This is a library for serialization & deserialization of data structures diff --git a/docs/get-started/cardano-wallet-js.md b/docs/get-started/cardano-wallet-js.md index 8dfcdb80f8..d879147f8f 100644 --- a/docs/get-started/cardano-wallet-js.md +++ b/docs/get-started/cardano-wallet-js.md @@ -3,11 +3,11 @@ id: cardano-wallet-js title: Get Started with cardano-wallet-js sidebar_label: cardano-wallet-js description: Get Started with cardano-wallet-js -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-cardano-wallet-js.png --- ## cardano-wallet-js -`cardano-wallet-js` is a javascript/typescript SDK for Cardano with a several functionalities. You can use it as a client for the official [cardano-wallet](https://github.com/input-output-hk/cardano-wallet) and also to create Native Tokens and NFTs. +`cardano-wallet-js` is a javascript/typescript SDK for Cardano with several functionalities. You can use it as a client for the official [cardano-wallet](https://github.com/input-output-hk/cardano-wallet) and also to create Native Tokens and NFTs. ## Table of Contents @@ -196,7 +196,7 @@ Output: ``` :::important -The recovery phrase is the only way you can restore your wallet and you **SHOULD KEEP IT SECURE AND PRIVATE**. You'll get a completeley different recovery phrase each time you execute the method. +The recovery phrase is the only way you can restore your wallet and you **SHOULD KEEP IT SECURE AND PRIVATE**. You'll get a completely different recovery phrase each time you execute the method. ::: For convenience, you can convert the recovery phrase into an array using this: @@ -258,7 +258,7 @@ wallet = await wallet.updatePassphrase(oldPassphrase, newPassphrase); The wallet itself doesn't hold the passphrase, you can check it's correctly updated trying to call a method needing the passphrase e.g: `sendPayment` ::: ### Wallet addresses -Cardano wallets are Multi-Account Hierarchy Deterministic that follow a variation of BIP-44 described [here](https://github.com/input-output-hk/implementation-decisions/blob/e2d1bed5e617f0907bc5e12cf1c3f3302a4a7c42/text/1852-hd-chimeric.md). All the addresses are derived from a root key (is like a key factory) which you can get from the recovery phrase. Also the wallets will always have 20 "consecutive" unused address, so anytime you use one of them new address will be "discovered" to keep the rule. +Cardano wallets are Multi-Account Hierarchy Deterministic that follow a variation of BIP-44 described [here](https://github.com/input-output-hk/implementation-decisions/blob/e2d1bed5e617f0907bc5e12cf1c3f3302a4a7c42/text/1852-hd-chimeric.md). All the addresses are derived from a root key (is like a key factory) which you can get from the recovery phrase. Also the wallets will always have 20 "consecutive" unused addresses, so anytime you use one of them new address will be "discovered" to keep the rule. ```js let addresses = await wallet.getAddresses(); // list will contain at least 20 address ``` @@ -279,7 +279,7 @@ let address = await wallet.getNextAddress(); let address = await wallet.getAddressAt(45); ``` ### Wallet balances -When you create a wallet the initial balance is 0. If you are in the mainnet you can transfer Ada to this address. If you are on the testnet you can request test tokens from the [Faucet](https://developers.cardano.org/en/testnets/cardano/tools/faucet/), just input one of the addresses of your wallet and request funds. +When you create a wallet the initial balance is 0. If you are in the Mainnet you can transfer Ada to this address. If you are on a testnet you can request test tokens from the [Faucet](https://developers.cardano.org/en/testnets/cardano/tools/faucet/), just input one of the addresses of your wallet and request funds. ```js // get available balance. The balance you can expend let availableBalance = wallet.getAvailableBalance(); @@ -291,7 +291,7 @@ let rewardBalance = wallet.getRewardBalance(); let totalBalance = wallet.getTotalBalance(); ``` ### Wallet delegation -The wallet have information about whether already delegate on a stake pool or not +The wallet has information about whether already delegate on a stake pool or not ```js let delegation = wallet.getDelegation(); console.log(delegation); @@ -305,7 +305,7 @@ It the wallet is not delegate to any stake pool the output should be something s } } ``` -If you start delegating (see [Stake pool section](#stake-pool-operations-with-the-wallet) the action will not take effect inmediatelly but the `next` property will indicate when the delegation will finally take effect. +If you start delegating (see [Stake pool section](#stake-pool-operations-with-the-wallet) the action will not take effect immediately but the `next` property will indicate when the delegation will finally take effect. The delegation meanwhile should look like this: ```js { @@ -326,9 +326,9 @@ The delegation meanwhile should look like this: Property `changes_at` will indicate the epoch at the delegation will take effect ::: -If we ask again after/during the epoch 10, we should get the delgation in place: +If we ask again after/during the epoch 10, we should get the delegation in place: ```js -// refresh the wallet if you are using the same object. This will fecth the info from the blockchain +// refresh the wallet if you are using the same object. This will fetch the info from the blockchain await wallet.refresh(); let delegation = wallet.getDelegation(); @@ -352,8 +352,8 @@ let stake = 1000000000; let pools = await walletServer.getStakePools(stake); ``` :::note -You'll get pool ordered by `non_myopic_member_rewards` which basically means from heighest to lower expected rewards. By default the wallet server -isn't configured to fecth the pool's metadata (e.g. ticker, name, homepage) but you can specify it through the update settings functionality, see Update Settings section below. +You'll get pool ordered by `non_myopic_member_rewards` which basically means from highest to lower expected rewards. By default the wallet server +isn't configured to fetch the pool's metadata (e.g. ticker, name, homepage) but you can specify it through the update settings functionality, see Update Settings section below. ::: Estimate delegation fee: @@ -372,7 +372,7 @@ let pool = pools[0]; let transaction = await wallet.delegate(pool.id, passphrase); ``` :::note -The transacion status initially is set to `pending`, so you should keep tracking the transaction using the `id` in order to make sure the final status (e.g. `in_ledger`). You can learn more about the transacion's life cycle [here](https://github.com/input-output-hk/cardano-wallet/wiki/About-Transactions-Lifecycle). +The transaction status initially is set to `pending`, so you should keep tracking the transaction using the `id` in order to make sure the final status (e.g. `in_ledger`). You can learn more about the transaction's life cycle [here](https://github.com/input-output-hk/cardano-wallet/wiki/About-Transactions-Lifecycle). For delegate to another stake pool use the same method above specifying a different stake pool. ::: @@ -446,7 +446,7 @@ let amounts = [5000000]; // 5 ADA let transaction = await senderWallet.sendPayment(passphrase, receiverAddress, amounts); ``` :::note -You can pass a list of address and amount. We expect both list have the same length where elemetns on each list is index related to the other. +You can pass a list of address and amount. We expect both list have the same length where elements on each list is index related to the other. You can think of it as sending `amounts[i]` to `addresses[i]`. ::: @@ -539,7 +539,7 @@ let signed = Buffer.from(txBody.to_bytes()).toString('hex'); let txId = await walletServer.submitTx(signed); ``` ### Key handling -There ara a couple of methods you can use to derive and get private/public key pairs. For more info check [here](https://github.com/input-output-hk/technical-docs/blob/main/cardano-components/cardano-wallet/doc/About-Address-Derivation.md). +There are a couple of methods you can use to derive and get private/public key pairs. For more info check [here](https://github.com/input-output-hk/technical-docs/blob/main/cardano-components/cardano-wallet/doc/About-Address-Derivation.md). Get root key from recovery phrase ```js @@ -681,7 +681,7 @@ tokens.filter(t => t.scriptKeyPairs).forEach(t => signingKeys.push(...t.scriptKe let metadata = Seed.buildTransactionMetadata(data); -// the wallet currently doesn't support including tokens not previuosly minted +// the wallet currently doesn't support including tokens not previously minted // so we need to include it manually. coinSelection.outputs = coinSelection.outputs.map(output => { if (output.address === addresses[0].address) { @@ -697,8 +697,8 @@ coinSelection.outputs = coinSelection.outputs.map(output => { return output; }); -// we need to sing the tx and calculate the actual fee and the build again -// since the coin selection doesnt calculate the fee with the asset tokens included +// we need to sign the tx and calculate the actual fee and the build again +// since the coin selection doesn't calculate the fee with the asset tokens included let txBody = Seed.buildTransactionWithToken(coinSelection, ttl, tokens, signingKeys, {data: data, config: config}); let tx = Seed.sign(txBody, signingKeys, metadata, scripts); diff --git a/docs/get-started/cardanocli-js.md b/docs/get-started/cardanocli-js.md index 3134ad8d84..363ff0d4cd 100644 --- a/docs/get-started/cardanocli-js.md +++ b/docs/get-started/cardanocli-js.md @@ -3,7 +3,7 @@ id: cardanocli-js title: Get Started with cardanocli-js sidebar_label: cardanocli-js description: Get Started with cardanocli-js -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-cardanocli-js.png --- cardanocli-js wraps the cardano-cli in JavaScript and makes it possible to interact with the cli-commands much faster and more efficient. @@ -60,7 +60,7 @@ console.log(wallet.paymentAddr); console.log(pool.vrf.vkey); ``` -## For testnet for example this is the working version +## For testnets for example this is the working version ``` const CardanocliJs = require("cardanocli-js"); diff --git a/docs/get-started/cardanosharp-wallet.md b/docs/get-started/cardanosharp-wallet.md index 34141a0abf..711edcc77d 100644 --- a/docs/get-started/cardanosharp-wallet.md +++ b/docs/get-started/cardanosharp-wallet.md @@ -3,7 +3,7 @@ id: cardanosharp-wallet title: Get Started with CardanoSharp Wallet sidebar_label: CardanoSharp Wallet description: Get Started with CardanoSharp Wallet -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-cardanosharp-wallet.png --- # CardanoSharp.Wallet diff --git a/docs/get-started/cscli.md b/docs/get-started/cscli.md index 7e29873817..02578bc280 100644 --- a/docs/get-started/cscli.md +++ b/docs/get-started/cscli.md @@ -3,7 +3,7 @@ id: cscli title: Get Started with cscli sidebar_label: cscli description: Get Started with cscli -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-cscli.png --- `cscli` is a lightweight cross-platform CLI tool for Cardano supporting the following features out of the box: @@ -29,7 +29,7 @@ Download the platform-specific binaries from the [latest release](https://github ```console $ cscli --help cscli v0.3.0 -A lightweight cross-platform tool for building and serialising Cardano wallet entities (i.e. recovery-phrases, keys, addresses and transactions), querying the chain and submitting transactions to the testnet or mainnet networks. Please refer to https://github.com/CardanoSharp/cscli for further documentation. +A lightweight cross-platform tool for building and serialising Cardano wallet entities (i.e. recovery-phrases, keys, addresses and transactions), querying the chain and submitting transactions to the testnets or Mainnet. Please refer to https://github.com/CardanoSharp/cscli for further documentation. USAGE: cscli (OPTION | COMMAND) diff --git a/docs/get-started/dandelion-apis.md b/docs/get-started/dandelion-apis.md index 23a852201d..9703ceeca5 100644 --- a/docs/get-started/dandelion-apis.md +++ b/docs/get-started/dandelion-apis.md @@ -3,7 +3,7 @@ id: dandelion-apis title: Get Started with Dandelion APIs sidebar_label: Dandelion APIs description: Get Started with Dandelion APIs -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-dandelion-apis.png --- Dandelion currently offer 2 different paths to get started: @@ -62,7 +62,7 @@ values={[ ```sh -# testnet +# testnets curl -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ --data-binary \ @@ -99,9 +99,9 @@ values={[ ```sh -# testnet +# testnets curl -s https://explorer-api.testnet.dandelion.link/api/txs/last -# mainnet +# Mainnet curl -s https://explorer-api.mainnet.dandelion.link/api/txs/last ``` diff --git a/docs/get-started/installing-cardano-node.md b/docs/get-started/installing-cardano-node.md index e8b5e8e604..aab54d8a35 100644 --- a/docs/get-started/installing-cardano-node.md +++ b/docs/get-started/installing-cardano-node.md @@ -3,22 +3,20 @@ id: installing-cardano-node title: Installing cardano-node and cardano-cli from source sidebar_label: Installing cardano-node description: This guide shows how to build and install the cardano-node and cardano-cli from the source-code for all major Operating Systems -image: ../img/og-developer-portal.png ---- -import HydraBuildList from '@site/src/components/docs/HydraBuildList'; +image: /img/og/og-getstarted-installing-cardano-node.png +--- +:::important + +This document's current version is relevant for `cardano-node` release version [1.35.7](https://github.com/input-output-hk/cardano-node/releases/tag/1.35.7) (Apr-2023) +::: ### Overview This guide will show you how to compile and install the `cardano-node` and `cardano-cli` into your operating system of choice, directly from the source-code. It will enable you to interact with the **Cardano** blockchain, including but not limited to sending/receiving **transactions**, creating **NFTs**, posting transaction **metadata** into the blockchain, minting/burning **native tokens**, creating a **stake pool**, executing **smart contracts**, and so much more! :::note -If you want to avoid compiling the binaries yourself, you can download the latest versions of `cardano-node` and `cardano-cli` from the links below. +If you want to avoid compiling the binaries yourself, you can [download the latest Linux, Mac, Windows versions](https://github.com/input-output-hk/cardano-node/releases/latest) of `cardano-node` and `cardano-cli` from the official IOHK release page. - The components can be built and run on **Windows** and **MacOS**, but we recommend that stake pool operators use **Linux** in production to take advantage of the associated performance advantages. ::: @@ -28,11 +26,11 @@ The components can be built and run on **Windows** and **MacOS**, but we recomme To set up the components, you will need: * **Windows**, **MacOS**, or **Linux** for your operating system -* An Intel or AMD x86 processor with **two or more cores, at 1.6GHz or faster** (2GHz or faster for a stake pool or relay) -* **16GB** of RAM and at least **75GB** of free disk space +* An Intel or AMD x86 processor with **two or more cores, at 1.6GHz or faster** (2GHz or faster for a stake pool or relay) +* **24GB** of RAM and at least **150GB** of free disk space (250GB recommended for future growth) :::note -If intending to connect to mainnet instance, the requirements for RAM and storage would increase beyond baselines above. +If intending to connect to Mainnet instance, the requirements for RAM and storage would increase beyond baselines above. ::: ### Choose your Platform @@ -44,7 +42,7 @@ If intending to connect to mainnet instance, the requirements for RAM and storag ## Linux -In this section, we will walk you through the process of downloading, compiling, and installing `cardano-node` and `cardano-cli` into your **Linux-based** operating system. +In this section, we will walk you through the process of downloading, compiling, and installing `cardano-node` and `cardano-cli` into your **Linux-based** operating system. #### Installing Operating System dependencies @@ -100,13 +98,13 @@ Once complete, you should have `ghc` and `cabal` installed to your system. `ghcup` will try to detect your shell and ask you to add it to the environment variables. Please restart your shell/terminal after installing `ghcup` ::: -You can check if `ghcup` has been installed correctly by typing `ghcup --version` into the terminal. You should see something similar to the following: +You can check if `ghcup` has been installed correctly by typing `ghcup --version` into the terminal. You should see something similar to the following: ``` -The GHCup Haskell installer, version v0.1.17.8 +The GHCup Haskell installer, version 0.1.19.2 ``` -`ghcup` will install the latest stable version of `ghc`. However, as of the time of writing this, [Input-Output](https://iohk.io) recommends using `ghc 8.10.7`. So, we will use `ghcup` to install and switch to the required version. +`ghcup` will install the latest stable version of `ghc`. However, as of the time of writing this, [Input-Output](https://iohk.io) recommends using `ghc 8.10.7`. So, we will use `ghcup` to install and switch to the required version. ```bash ghcup install ghc 8.10.7 @@ -123,22 +121,22 @@ ghcup set cabal 3.6.2.0 Finally, we check if we have the correct `ghc` and `cabal` versions installed. -Check `ghc` version: +Check `ghc` version: ```bash ghc --version ``` -You should see something like this: +You should see something like this: ``` The Glorious Glasgow Haskell Compilation System, version 8.10.7 ``` -Check `cabal` version: +Check `cabal` version: ```bash cabal --version ``` -You should see something like this: +You should see something like this: ``` cabal-install version 3.6.2.0 @@ -178,7 +176,7 @@ export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" Once saved, we will then reload your shell profile to use the new variables. We can do that by typing `source $HOME/.bashrc` or `source $HOME/.zshrc` (***depending on the shell application you use***). -We need to install Secp256k1 what is required for 1.35.0 cardano-node version +We need to install Secp256k1 which is required from 1.35.0 cardano-node version onward: Download and install libsecp256k1: ```bash @@ -199,14 +197,14 @@ Now we are ready to download, compile and install `cardano-node` and `cardano-cl cd $HOME/cardano-src ``` -Download the `cardano-node` repository: +Download the `cardano-node` repository: ```bash git clone https://github.com/input-output-hk/cardano-node.git cd cardano-node git fetch --all --recurse-submodules --tags ``` -Switch the repository to the latest tagged commit: +Switch the repository to the latest tagged commit: ```bash git checkout $(curl -s https://api.github.com/repos/input-output-hk/cardano-node/releases/latest | jq -r .tag_name) @@ -224,6 +222,13 @@ We explicitly use the `ghc` version that we installed earlier. This avoids defau cabal configure --with-compiler=ghc-8.10.7 ``` +:::note +For some installations you might encounter the following warning:
+`Warning: The package list for 'cardano-haskell-packages' does not exist. Run 'cabal update' to download it.` + +Running `cabal update` will fix this problem, as well as other problems resulting from changes to the package list... so it is generally recommended for each installation even if you don't get this error. +::: + If you are running non x86/x64 platform (eg. ARM) please install and configure LLVM with: ```bash sudo apt install llvm-9 @@ -239,7 +244,8 @@ sudo ln -s /usr/bin/clang-9 /usr/bin/clang We can now build the `Haskell-based` `cardano-node` to produce executable binaries. ```bash -cabal build cardano-node cardano-cli +cabal update +cabal build all ``` Install the newly built node and CLI commands to the $HOME/.local/bin directory: @@ -270,7 +276,7 @@ Next, we will talk about how to [run cardano-node](running-cardano.md). ## MacOS -In this section, we will walk you through the process of downloading, compiling, and installing `cardano-node` and `cardano-cli` into your **MacOS-based** operating system. +In this section, we will walk you through the process of downloading, compiling, and installing `cardano-node` and `cardano-cli` into your **MacOS-based** operating system. #### Installing Operating System dependencies @@ -282,7 +288,7 @@ To download the source code and build it, you need the following packages and to #### Installing Homebrew packages -For the `cardano-node` and `cardano-cli` components to compile properly, we will need to install some libraries via `brew`: +For the `cardano-node` and `cardano-cli` components to compile properly, we will need to install some libraries via `brew`: ```bash brew install jq @@ -290,12 +296,13 @@ brew install libtool brew install autoconf brew install automake brew install pkg-config +brew install openssl ``` #### You will need to install llvm in case you are using M1 ``` -brew install llvm +brew install llvm@13 ``` #### Installing GHC and Cabal @@ -323,13 +330,13 @@ Once complete, you should have `ghc` and `cabal` installed to your system. `ghcup` will try to detect your shell and will ask you to add it to the environment variables. Please restart your shell/terminal after installing `ghcup` ::: -You can check if `ghcup` has been installed properly by typing `ghcup --version` into the terminal. You should see something similar to the following: +You can check if `ghcup` has been installed properly by typing `ghcup --version` into the terminal. You should see something similar to the following: ``` The GHCup Haskell installer, version v0.1.17.4 ``` -`ghcup` will install the latest stable version of `ghc`. However, as of the time writing this, [Input-Output](https://iohk.io) recommends using `ghc 8.10.7`. So, we will use `ghcup` to install and switch to the required version. +`ghcup` will install the latest stable version of `ghc`. However, as of the time writing this, [Input-Output](https://iohk.io) recommends using `ghc 8.10.7`. So, we will use `ghcup` to install and switch to the required version. ```bash ghcup install ghc 8.10.7 @@ -345,22 +352,22 @@ ghcup set cabal 3.6.2.0 Finally, we check if we have the correct `ghc` and `cabal` versions installed. -Check `ghc` version: +Check `ghc` version: ```bash ghc --version ``` -You should see something like this: +You should see something like this: ``` The Glorious Glasgow Haskell Compilation System, version 8.10.7 ``` -Check `cabal` version: +Check `cabal` version: ```bash cabal --version ``` -You should see something like this: +You should see something like this: ``` cabal-install version 3.6.2.0 @@ -398,10 +405,10 @@ export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" ``` -If you installed llvm for M1, then you will need to add this too: +If you installed llvm for M1, then you will need to add this too, assuming that your exact llvm version is 13.0.1_2: ```bash -export PATH="/opt/homebrew/opt/llvm/bin:$PATH" +export PATH="/opt/homebrew/Cellar/llvm@13/13.0.1_2/bin:$PATH" ``` :::note @@ -410,7 +417,7 @@ llvm installation path might differs based on your installation, if you used def Once saved, we will then reload your shell profile to use the new variables. We can do that by typing `source $HOME/.bashrc` or `source $HOME/.zshrc` (***depending on the shell application you use***). -We need to install Secp256k1 what is required for 1.35.0 cardano-node version +We need to install Secp256k1 which is required from 1.35.0 cardano-node version onward: Download and install libsecp256k1: ```bash @@ -431,14 +438,14 @@ Now we are ready to download, compile and install `cardano-node` and `cardano-cl cd $HOME/cardano-src ``` -Download the `cardano-node` repository: +Download the `cardano-node` repository: ```bash git clone https://github.com/input-output-hk/cardano-node.git cd cardano-node git fetch --all --recurse-submodules --tags ``` -Switch the repository to the latest tagged commit: +Switch the repository to the latest tagged commit: ```bash git checkout $(curl -s https://api.github.com/repos/input-output-hk/cardano-node/releases/latest | jq -r .tag_name) @@ -456,18 +463,49 @@ We explicitly use the `ghc` version that we installed earlier. This avoids defau cabal configure --with-compiler=ghc-8.10.7 ``` +:::note +For some installations you might encounter the following warning: `Warning: The package list for 'cardano-haskell-packages' does not exist. Run 'cabal update' to download it.`. The warning is self-explanatory and you will need to run `cabal update` before moving on. +::: + #### You will need to run following commands on M1, those commands will set some cabal related options before building ``` echo "package trace-dispatcher" >> cabal.project.local echo " ghc-options: -Wwarn" >> cabal.project.local echo "" >> cabal.project.local + +echo "package HsOpenSSL" >> cabal.project.local +echo " flags: -homebrew-openssl" >> cabal.project.local +echo "" >> cabal.project.local ``` #### Building and installing the node ```bash +cabal update cabal build all ``` +:::caution +More recent versions of MacOS seems to install openssl in a different location than expected by default. If you have installed openssl via **homebrew** and encounter the following build error: + +``` +Failed to build HsOpenSSL-0.11.7.2. The failure occurred during the configure +step. +[1 of 1] Compiling Main (...) +Linking .../dist-newstyle/tmp/src-75805/HsOpenSSL-0.11.7.2/dist/setup/setup ... +Configuring HsOpenSSL-0.11.7.2... +setup: Can’t find OpenSSL library +``` + +You'll most likely need to add relevant symlinks as follows: + +``` +sudo mkdir -p /usr/local/opt/openssl +sudo ln -s /opt/homebrew/opt/openssl@3/lib /usr/local/opt/openssl/lib +sudo ln -s /opt/homebrew/opt/openssl@3/include /usr/local/opt/openssl/include +``` + +This is a wart of the `HsOpenSSL` library wrapper, and using classic methods such as setting `LDFLAGS` & `CPPFLAGS`, or using `--extra-include-dirs` and `--extra-lib-dirs` won't work properly. +::: Install the newly built node and CLI to the $HOME/.local/bin directory: diff --git a/docs/get-started/installing-cardano-wallet.md b/docs/get-started/installing-cardano-wallet.md index 7be4e457dd..323ced9be9 100644 --- a/docs/get-started/installing-cardano-wallet.md +++ b/docs/get-started/installing-cardano-wallet.md @@ -3,7 +3,7 @@ id: installing-cardano-wallet title: Installing cardano-wallet sidebar_label: Installing cardano-wallet description: This guide shows how to build and install the cardano-wallet from the source-code for all major Operating Systems -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-installing-cardano-wallet.png --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -26,7 +26,7 @@ This guide assumes you have installed `cardano-node` and `cardano-cli` into your :::important -You must connect your `cardano-node` to the `testnet` network and make sure it is fully synchronized. If you are not sure how to do that, It is recommended to read [Running cardano-node](running-cardano.md) guide before proceeding. +You must connect your `cardano-node` to a [testnet network](docs/get-started/testnets-and-devnets.md) and make sure it is fully synchronized. If you are not sure how to do that, It is recommended to read [Running cardano-node](running-cardano.md) guide before proceeding. ::: diff --git a/docs/get-started/koios.md b/docs/get-started/koios.md index 5e24b3d102..51f5fb4797 100644 --- a/docs/get-started/koios.md +++ b/docs/get-started/koios.md @@ -3,10 +3,10 @@ id: koios title: Get Started with Koios sidebar_label: Koios description: Get Started with Koios -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-koios.png --- -Koios provides an open-source & elastic API layer that allows you to query Cardano blockchain (across mainnet, testnet and guildnet network). +Koios provides an open-source & elastic API layer that allows you to query Cardano blockchain (across Mainnet, testnets and guildnet network). The key flexibility from a consumer of Koios API is being able to use Koios as a light webservice or being able to run a Koios instance and optionally `extend` the query layer with automatic failover and high availability support across the globe. When running an instance, one is free to add additional endpoints to their individual service if they have a use case that may not need to be added upstream. Let's start with basics from consumer point of view, and then we can dive to a brief summary about running a Koios Instance as a provider (independently OR adding to existing members of Koios cluster). @@ -57,7 +57,7 @@ Typical steps involved for setting up your gRest instance would be (assuming you 4. Once your node is in sync, set up your dbsync instance (easier to use snapshots instead of synching from scratch) as per instructions [here](https://cardano-community.github.io/guild-operators/Build/dbsync/). Ensure that you're running dbsync as a systemd service (not as a script on terminal). -5. You should now be able to run the `setup-grest.sh` script as per details [here](https://cardano-community.github.io/guild-operators/Build/grest/#setup). Thus, if you'd like to deploy gRest against mainnet version, you may elect to run `./setup-grest.sh -f -i prmcd -q -b ` which will set up all the components, endpoints and deploy them as service on your system. +5. You should now be able to run the `setup-grest.sh` script as per details [here](https://cardano-community.github.io/guild-operators/Build/grest/#setup). Thus, if you'd like to deploy gRest against Mainnet version, you may elect to run `./setup-grest.sh -f -i prmcd -q -b ` which will set up all the components, endpoints and deploy them as service on your system. 6. [Optional] You can also install [ogmios](https://ogmios.dev) instance to have it enabled on your instance. This is currently not enabled by default, as it would require more advanced session management over WSS, that is more suited for a server-client architecture than a RESTful interface to access directly. There may be middleware leveraging this service in future, but it will not be scoped for v1 of Koios API. @@ -94,3 +94,9 @@ Every gRest instance is capable to participate into Koios Cluster, by simply ope ## Any other Query/Follow-ups There are bi-weekly open meetings on every 2nd/4th Thursday of the month. Feel free to join the [Koios discussions](https://t.me/+zE4Lce_QUepiY2U1) and follow pinned messages for the same. + +:::note + +For some interfaces to Koios, see [Builder Tools > Koios](/tools?tags=koios). + +::: diff --git a/docs/get-started/mesh/get-started.md b/docs/get-started/mesh/get-started.md new file mode 100644 index 0000000000..c743a80208 --- /dev/null +++ b/docs/get-started/mesh/get-started.md @@ -0,0 +1,73 @@ +--- +id: get-started +sidebar_position: 2 +title: Get Started +sidebar_label: Get Started +description: Get Started with Mesh +image: /img/og/og-getstarted-mesh.png +--- + +There are multiple ways to get started with Mesh: +- [Starter Kits](#starter-kits) +- [Guides](#guides) +- [Migration or Manual Installation](#migration-manual-installation) + +## Starter Kits + +The easiest way to get started with Mesh is to use one of the [Starter Kits](https://meshjs.dev/starter-templates). + +For example, if you are an NFT project and wants to start your own multi-sig minting website, you can use the [Multi-sig Minting Starter Kit](https://minting-template.meshjs.dev/). + +Or, if you are a stake pool operator, this [Pool Operator Portal Starter Kit](https://staking-template.meshjs.dev/) allows delegators to connect their wallet and stake with your pool. + +Explore and choose from a collection of open-source [Starter Kits](https://meshjs.dev/starter-templates). + +### Install with CLI + +To start the installation, open your Terminal and run the following CLI command: + +```shell +npx create-mesh-app your-app name +``` + +You will be prompted with a few questions, you can pick one of the templates, choose a framework and select the language of your choice. The entire process should take less than 1 minute. + +### Demeter + +Kick start your project on [Demeter](https://demeter.run), with a click of a button: + +1. Visit [Starter Kits](https://meshjs.dev/starter-templates) +2. Select one of the templates +3. Click *Demeter* to start a project instance + +### Clone GitHub repo + +Every starter templates are open-source, you can clone them from [GitHub](https://github.com/MeshJS): + +1. Visit [Starter Kits](https://meshjs.dev/starter-templates) +2. Select one of the templates +3. Click on *GitHub Repo* to go to the GitHub repository +4. Clone the repository + +## Guides + +Whether you are new to web development or a seasoned blockchain full-stack developer, these guides will help you get started. + +| [Browse all guides](https://meshjs.dev/guides) | | +|--|--| +| [Start a Web3 app on Next.js](https://meshjs.dev/guides/nextjs) | A step-by-step guide to setup a Next.js web application, connect wallet and browse wallet's assets. | +| [Minting on Node.js](https://meshjs.dev/guides/minting-on-nodejs) | Load a CLI generated key and mint assets on Node.js | +| [Multi-Signatures Transaction (Minting)](https://meshjs.dev/guides/multisig-minting) | Create a multi-sig transaction and mint NFTs| +| [Use Smart Contract with Mesh](https://meshjs.dev/guides/smart-contract) | A step-by-step guide to integrate your Cardano Smart Contract to a web application. | +| [Cryptographically Prove Wallet Ownership](https://meshjs.dev/guides/prove-wallet-ownership) | Cryptographically prove the ownership of a wallet by signing a piece of data using data sign. | + +## Migration Manual Installation + +If you are looking to use Mesh into your existing project, you can choose the stack and configure them. + +| [Browse all stacks](https://meshjs.dev/migration-manual-installation) | | +|--|--| +| [Next.js](https://meshjs.dev/migration-manual-installation#nextjs) | Web development framework created by Vercel enabling React-based web applications with server-side rendering | +| [NestJS](https://meshjs.dev/migration-manual-installation#nestjs) | Framework for server-side applications | +| [Gatsby](https://meshjs.dev/migration-manual-installation#gatsby) | Static site generator built on top of Node.js using React and GraphQL | +| [Webpack](https://meshjs.dev/migration-manual-installation#webpack) | A module bundler for JavaScript. | diff --git a/docs/get-started/mesh/overview.md b/docs/get-started/mesh/overview.md new file mode 100644 index 0000000000..48fb0ebbca --- /dev/null +++ b/docs/get-started/mesh/overview.md @@ -0,0 +1,26 @@ +--- +id: overview +sidebar_position: 1 +title: Overview +sidebar_label: Overview +description: Mesh is an open-source library providing everything you need to build on Web3 +image: /img/og/og-getstarted-mesh.png +--- + +Mesh is an open-source library providing everything you need to build applications on the Cardano blockchain with ease. + +Like a well-woven fabric, Mesh connects business goals with technology stacks. It enables developers to build applications according to project requirements on the blockchain. Mesh is filling the gap by making product development accessible on Cardano. + +Whether you're a new developer, a startup, or a large enterprise, Mesh makes Web3 development easy with reliable, scalable, and well-engineered APIs & developer tools. + +| List of Features | | +|----|---| +| [Clean and intuitive APIs](https://meshjs.dev/apis/) | Whether you're a new developer, a startup, or a large enterprise; Mesh makes Web3 development easy with reliable, scalable, and well-engineered APIs & developer tools. | +| [Mesh Playground](https://meshjs.dev/) | Mesh Playground is an interactive tool which allows you to explore Mesh's features. Most APIs are interactive, where you can modify the inputs and see how to use the code in your project. | +| [Starter Kits](https://meshjs.dev/starter-templates) | Whether you are a NFT project that need a multi-sig minting site, or a SPO that need a website for your pool, pick from one of our starter kits, and get started in minutes. | +| [React Components and Hooks](https://meshjs.dev/react/) | Mesh offers UI components you need to build your dApp, so you can jumpstart your next project and bring the user interface to life. | +| [Interact with smart contracts](https://meshjs.dev/apis/transaction/smart-contract) | Locking and unlocking, minting and burning assets, designing datum and redeemer. Mesh provides everything you need to work with smart contracts. | +| [Guides](https://meshjs.dev/guides) | Whether you are new to web development or a seasoned blockchain full-stack developer, these guides will help you get started. | +| [Offline Resolvers](https://meshjs.dev/apis/resolvers) | Many blockchains operations are computed locally without the need to fetch data from services. | +| [Service Providers](https://meshjs.dev/providers) | Providers are services provided by the Cardano community, to help you ship your apps faster. | +| [Always up to date](https://meshjs.dev/about) | Mesh is developed closely to network updates, your application will always be ready for the latest network changes, so you can focus on building your application. | diff --git a/docs/get-started/mesh/react.md b/docs/get-started/mesh/react.md new file mode 100644 index 0000000000..bc07a633be --- /dev/null +++ b/docs/get-started/mesh/react.md @@ -0,0 +1,190 @@ +--- +id: react +sidebar_position: 8 +title: React Web App +sidebar_label: React Web App +description: Start building web3 applications, interact with your contracts using your wallets. +image: /img/og/og-getstarted-mesh.png +--- + +Mesh provide a collection of useful UI components, so you can easily include web3 functionality and convenient utilities for your application. + +- [MeshProvider](#meshprovider) - Subscribe to wallet changes +- [UI Components](#ui-components) - React frontend components to speed up your app development. +- [Wallet Hooks](#wallet-hooks) - React hooks for interacting with connected wallet + +To start, install `mesh-react`: + +```bash +npm install @meshsdk/react +``` + +Next, let's add `MeshProvider` to the root of the application. [React Context](https://reactjs.org/docs/context.html) allows apps to share data across the app, and MeshProvider allows your app to subscribe to context changes. + +```javascript +import { MeshProvider } from "@meshsdk/react"; + +function MyApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +}; +``` + +## UI Components + +In order for dApps to communicate with the user's wallet, we need a way to connect to their wallet. + +Add this CardanoWallet to allow the user to select a wallet to connect to your dApp. After the wallet is connected, see Browser Wallet for a list of CIP-30 APIs. + +```javascript +import { CardanoWallet } from '@meshsdk/react'; + +export default function Page() { + return ( + <> + + + ); +} +``` + +Browse all [UI Components](https://meshjs.dev/react/ui-components) provided by Mesh to start building web3 applications, interact with your contracts using your wallets. + +## Wallet Hooks + +In a React application, Hooks allows you to extract and reuse stateful logic and variables without changing your component hierarchy. This makes it easy to reuse the same Hook among many components. You can try each of these hooks on [Mesh Playground](https://meshjs.dev/react/wallet-hooks). + +### useWalletList + +Returns a list of wallets installed on user's device. + +```javascript +import { useWalletList } from '@meshsdk/react'; + +export default function Page() { + const wallets = useWalletList(); + + return ( + <> + {wallets.map((wallet, i) => { + return ( +

+ + {wallet.name} +

+ ); + })} + + ); +} +``` + +### useAddress + +Return address of connected wallet. + +```javascript +import { useAddress } from '@meshsdk/react'; + +export default function Page() { + const address = useAddress(); + + return ( +

Your wallet address is: {address}

+ ); +} +``` + +### useAssets + +Return a list of assets in connected wallet from all UTXOs. + +```javascript +import { useAssets } from '@meshsdk/react'; + +export default function Page() { + const assets = useAssets(); + + return ( +
    + {assets && + assets.slice(0, 10).map((asset, i) => { + return ( +
  1. + {asset.assetName} (x{asset.quantity}) +
  2. + ); + })} +
+ ); +} +``` + +### useLovelace + +Return amount of lovelace in wallet. + +```javascript +import { useLovelace } from '@meshsdk/react'; + +export default function Page() { + const lovelace = useLovelace(); + + return ( +
+

You have ₳ {parseInt(lovelace) / 1000000}.

+
+ ); +} +``` + +### useNetwork + +Return the network of connected wallet. + +```javascript +import { useNetwork } from '@meshsdk/react'; + +export default function Page() { + const network = useNetwork(); + + return ( +
+

Connected network: {network}.

+
+ ); +} +``` + +### useWallet + +Provide information on the current wallet's state, and functions for connecting and disconnecting user wallet. + +```javascript +import { useWallet } from '@meshsdk/react'; + +export default function Page() { + const { wallet, connected, name, connecting, connect, disconnect, error } = useWallet(); + + return ( +
+

+ Connected?: {connected ? 'Is connected' : 'Not connected'} +

+

+ Connecting wallet?: {connecting ? 'Connecting...' : 'No'} +

+

+ Name of connected wallet: + {name} +

+ +
+ ); +} +``` + +Check out the [Mesh Playground](https://meshjs.dev/react/wallet-hooks) for live demo and full explanation. diff --git a/docs/get-started/mesh/transactions-basic.md b/docs/get-started/mesh/transactions-basic.md new file mode 100644 index 0000000000..dccfef068f --- /dev/null +++ b/docs/get-started/mesh/transactions-basic.md @@ -0,0 +1,125 @@ +--- +id: transactions-basic +sidebar_position: 4 +title: Basic Transactions +sidebar_label: Basic Transactions +description: Create transactions for sending assets. +image: /img/og/og-getstarted-mesh.png +--- + +As of writing, there are 4 main types of transactions: + +- [Send lovelace and assets](transactions-basic) (this) +- [Interacting with smart contracts](transactions-smart-contract) +- [Minting and burning assets](transactions-minting) +- [Interacting with stakepools](transactions-staking) + +In this section, we will explore the following: + +- [Send ADA to Addresses](#send-ada-to-addresses) +- [Send Multiple Assets to Addresses](#send-multiple-assets-to-addresses) +- [Send Assets to Handler](#send-assets-to-handler) +- [Send tokens and stable coins to addresses](#send-tokens-and-stable-coins-to-addresses) + +## Send ADA to Addresses + +You can chain `tx.sendLovelace()` to send to multiple recipients. For example: + +```javascript +import { Transaction } from "@meshsdk/core"; + +const tx = new Transaction({ initiator: wallet }) + .sendLovelace( + "addr_test1vpvx0sacufuypa2k4sngk7q40zc5c4npl337uusdh64kv0c7e4cxr", + "1000000" + ) + .sendLovelace("ANOTHER ADDRESS HERE", "1500000"); + +const unsignedTx = await tx.build(); +const signedTx = await wallet.signTx(unsignedTx); +const txHash = await wallet.submitTx(signedTx); +``` + +[Try demo](https://meshjs.dev/apis/transaction#sendAda) + +## Send Multiple Assets to Addresses + +We can chain a series of `tx.sendAssets()` and `tx.sendLovelace()` to send multiple assets to multiple recipients. For example: + +```javascript +import { Transaction, Asset } from "@meshsdk/core"; + +const tx = new Transaction({ initiator: wallet }) + .sendLovelace( + "addr_test1vpvx0sacufuypa2k4sngk7q40zc5c4npl337uusdh64kv0c7e4cxr", + "1000000" + ) + .sendAssets( + "addr_test1vpvx0sacufuypa2k4sngk7q40zc5c4npl337uusdh64kv0c7e4cxr", + [ + { + unit: "64af286e2ad0df4de2e7de15f8ff5b3d27faecf4ab2757056d860a424d657368546f6b656e", + quantity: "1", + }, + ] + ) + .sendLovelace("ANOTHER ADDRESS HERE", "1500000"); + +const unsignedTx = await tx.build(); +const signedTx = await wallet.signTx(unsignedTx); +const txHash = await wallet.submitTx(signedTx); +``` + +[Try demo](https://meshjs.dev/apis/transaction#sendAssets) + +## Send Assets to Handler + +We can get the ADA Handle's address with any blockchain providers and calling the `fetchHandleAddress()` function. + +For instance, lets send some lovelace to `$jingles`: + +```javascript +import { KoiosProvider, Transaction } from "@meshsdk/core"; + +const koios = new KoiosProvider("api"); + +const tx = new Transaction({ initiator: wallet }) + .sendLovelace( + await koios.fetchHandleAddress("jingles"), + "1000000" + ); + +const unsignedTx = await tx.build(); +const signedTx = await wallet.signTx(unsignedTx); +const txHash = await wallet.submitTx(signedTx); +``` + +## Send tokens and stable coins to addresses + +Like `sendLovelace()`, we can chain `sendToken()` along side `tx.sendLovelace()` to send multiple assets to multiple recipients. + +For instance, lets send some DJED to ADA to `jingles`: + +```javascript +import { Transaction } from '@meshsdk/core'; + +const koios = new KoiosProvider("api"); +const address = await koios.fetchHandleAddress("jingles"); + +const tx = new Transaction({ initiator: wallet }) + .sendToken( + address, + 'DJED', + '1000000' + ) + .sendLovelace( + address, + "1000000" + ); + +const unsignedTx = await tx.build(); +const signedTx = await wallet.signTx(unsignedTx); +const txHash = await wallet.submitTx(signedTx); +``` + +Check out the [Mesh Playground](https://meshjs.dev/apis/transaction) for live demo and full explanation. diff --git a/docs/get-started/mesh/transactions-minting.md b/docs/get-started/mesh/transactions-minting.md new file mode 100644 index 0000000000..419c9a3f78 --- /dev/null +++ b/docs/get-started/mesh/transactions-minting.md @@ -0,0 +1,104 @@ +--- +id: transactions-minting +sidebar_position: 6 +title: Minting Transactions +sidebar_label: Minting Transactions +description: Learn to use ForgeScript to create minting transactions for minting and burning native assets. +image: /img/og/og-getstarted-mesh.png +--- + +In this section, we will learn to use ForgeScript to create minting transactions for minting and burning native assets. If you are new to transactions, be sure to check out how to create transactions to [send lovelace and assets](transactions-basic). + +In this section, we will explore the following: + +- [Minting Assets](#minting-assets) +- [Burning Assets](#burning-assets) + +## Minting Assets + +We will see how to mint native assets with a `ForgeScript`. + +```javascript +import { Transaction, ForgeScript } from "@meshsdk/core"; +import type { Mint, AssetMetadata } from "@meshsdk/core"; + +// prepare forgingScript +const usedAddress = await wallet.getUsedAddresses(); +const address = usedAddress[0]; +const forgingScript = ForgeScript.withOneSignature(address); + +const tx = new Transaction({ initiator: wallet }); + +// define asset#1 metadata +const assetMetadata1: AssetMetadata = { + name: "Mesh Token", + image: "ipfs://QmRzicpReutwCkM6aotuKjErFCUD213DpwPq6ByuzMJaua", + mediaType: "image/jpg", + description: "This NFT is minted by Mesh (https://meshjs.dev/).", +}; +const asset1: Mint = { + assetName: "MeshToken", + assetQuantity: "1", + metadata: assetMetadata1, + label: "721", + recipient: "addr_test1vpvx0sacufuypa2k4sngk7q40zc5c4npl337uusdh64kv0c7e4cxr", +}; +tx.mintAsset(forgingScript, asset1); + +const unsignedTx = await tx.build(); +const signedTx = await wallet.signTx(unsignedTx); +const txHash = await wallet.submitTx(signedTx); +``` + +Additionally, you can define the forging script with NativeScript. For example if you want to have a policy locking script, you can do this: + +```javascript +import type { NativeScript } from "@meshsdk/core"; + +const nativeScript: NativeScript = { + type: "all", + scripts: [ + { + type: "before", + slot: "", + }, + { + type: "sig", + keyHash: "", + }, + ], +}; + +const forgingScript = ForgeScript.fromNativeScript(nativeScript); +``` + +[Try demo](https://meshjs.dev/apis/transaction/minting#minting) + +## Burning Assets + +Like minting assets, we need to define the `ForgeScript`. We use the first wallet address as the "minting address". Note that, assets can only be burned by its minting address. + +```javascript +import { Transaction, ForgeScript } from "@meshsdk/core"; +import type { Asset } from "@meshsdk/core"; + +// prepare forgingScript +const usedAddress = await wallet.getUsedAddresses(); +const address = usedAddress[0]; +const forgingScript = ForgeScript.withOneSignature(address); + +const tx = new Transaction({ initiator: wallet }); + +// burn asset#1 +const asset1: Asset = { + unit: "64af286e2ad0df4de2e7de15f8ff5b3d27faecf4ab2757056d860a424d657368546f6b656e", + quantity: "1", +}; +tx.burnAsset(forgingScript, asset1); + +const unsignedTx = await tx.build(); +const signedTx = await wallet.signTx(unsignedTx); +const txHash = await wallet.submitTx(signedTx); +``` + +Check out the [Mesh Playground](https://meshjs.dev/apis/transaction/minting) for live demo and full explanation. diff --git a/docs/get-started/mesh/transactions-smart-contract.md b/docs/get-started/mesh/transactions-smart-contract.md new file mode 100644 index 0000000000..ee2ce97a7c --- /dev/null +++ b/docs/get-started/mesh/transactions-smart-contract.md @@ -0,0 +1,146 @@ +--- +id: transactions-smart-contract +sidebar_position: 5 +title: Smart Contracts Transactions +sidebar_label: Smart Contracts Transactions +description: Create transactions to work with smart contracts. +image: /img/og/og-getstarted-mesh.png +--- + +In this section, we will look at how to create transactions to work with smart contracts. If you are new to transactions, be sure to check out how to create transactions to [send lovelace and assets](transactions-basic). + +In this section, we will explore the following: + +- [Lock Assets in Smart Contract](#lock-assets-in-smart-contract) +- [Unlock Assets from Smart Contract](#unlock-assets-from-smart-contract) +- [Minting Assets with Smart Contract](#minting-assets-with-smart-contract) + +## Lock Assets in Smart Contract + +Token locking is a feature where certain assets are reserved on the smart contract. The assets can only be unlocked when certain conditions are met, for example, when making a purchase. + +To lock assets in the always succeed contract: + +```javascript +import { Transaction } from "@meshsdk/core"; + +// this is the script address of always succeed contract +const scriptAddress = "addr_test1wpnlxv2xv9a9ucvnvzqakwepzl9ltx7jzgm53av2e9ncv4sysemm8"; + +const tx = new Transaction({ initiator: wallet }).sendAssets( + { + address: scriptAddress, + datum: { + value: "supersecret", + }, + }, + [ + { + unit: "64af286e2ad0df4de2e7de15f8ff5b3d27faecf4ab2757056d860a424d657368546f6b656e", + quantity: "1", + }, + ] +); + +const unsignedTx = await tx.build(); +const signedTx = await wallet.signTx(unsignedTx); +const txHash = await wallet.submitTx(signedTx); +``` + +[Try demo](https://meshjs.dev/apis/transaction/smart-contract#lockAssets) + +## Unlock Assets from Smart Contract + +As we may have locked assets in the contract, you can create transactions to unlock the assets with a redeemer that corresponds to the datum. Define the corresponding code to create the datum, only a transaction with the corrent datum hash is able to unlock the asset. Define the unit of the locked asset to search for the UTXO in the smart contract, which is required for the transaction's input. + +```javascript +async function _getAssetUtxo({ scriptAddress, asset, datum }) { + const koios = new KoiosProvider("preprod"); + + const utxos = await koios.fetchAddressUTxOs(scriptAddress, asset); + + const dataHash = resolveDataHash(datum); + + let utxo = utxos.find((utxo: any) => { + return utxo.output.dataHash == dataHash; + }); + + return utxo; +} + +// fetch input UTXO +const assetUtxo = await _getAssetUtxo({ + scriptAddress: "addr_test1wpnlxv2xv9a9ucvnvzqakwepzl9ltx7jzgm53av2e9ncv4sysemm8", + asset: "64af286e2ad0df4de2e7de15f8ff5b3d27faecf4ab2757056d860a424d657368546f6b656e", + datum: "supersecret", +}); + +// get wallet change address +const address = await wallet.getChangeAddress(); + +// create the unlock asset transaction +const tx = new Transaction({ initiator: wallet }) + .redeemValue({ + value: assetUtxo, + script: { + version: "V1", + code: "4e4d01000033222220051200120011", + }, + datum: "supersecret", + }) + .sendValue(address, assetUtxo) // address is recipient address + .setRequiredSigners([address]); + +const unsignedTx = await tx.build(); +// note that the partial sign is set to true +const signedTx = await wallet.signTx(unsignedTx, true); +const txHash = await wallet.submitTx(signedTx); +``` + +[Try demo](https://meshjs.dev/apis/transaction/smart-contract#unlockAssets) + +## Minting Assets with Smart Contract + +We can use a Plutus Script to mint tokens. This script is designed to always succeed, meaning that anyone can sign and mint tokens with it, as there are no validation on this script. + +```javascript +import { + Transaction, + AssetMetadata, + Mint, + Action, + PlutusScript, +} from "@meshsdk/core"; + +const script: PlutusScript = { + code: plutusMintingScriptCbor, + version: "V2", +}; + +const redeemer: Partial = { + tag: "MINT", +}; + +const tx = new Transaction({ initiator: wallet }); + +const assetMetadata1: AssetMetadata = { + name: "Mesh Token", + image: "ipfs://QmRzicpReutwCkM6aotuKjErFCUD213DpwPq6ByuzMJaua", + mediaType: "image/jpg", + description: "This NFT is minted by Mesh (https://meshjs.dev/).", +}; +const asset1: Mint = { + assetName: "MeshToken", + assetQuantity: "1", + metadata: assetMetadata1, + label: "721", + recipient: "addr_test1vpvx0sacufuypa2k4sngk7q40zc5c4npl337uusdh64kv0c7e4cxr", +}; +tx.mintAsset(script, asset1, redeemer); + +const unsignedTx = await tx.build(); +const signedTx = await wallet.signTx(unsignedTx); +const txHash = await wallet.submitTx(signedTx); +``` + +Check out the [Mesh Playground](https://meshjs.dev/apis/transaction/smart-contract) for live demo and full explanation. diff --git a/docs/get-started/mesh/transactions-staking.md b/docs/get-started/mesh/transactions-staking.md new file mode 100644 index 0000000000..22620f3634 --- /dev/null +++ b/docs/get-started/mesh/transactions-staking.md @@ -0,0 +1,54 @@ +--- +id: transactions-staking +sidebar_position: 7 +title: Staking Transactions +sidebar_label: Staking Transactions +description: APIs for staking ADA and managing stake pools. +image: /img/og/og-getstarted-mesh.png +--- + +In this section, we will learn to create to stake ADA in stakepools. If you are new to transactions, be sure to check out how to create transactions to [send lovelace and assets](transactions-basic). + +In this section, we will explore the following: + +- [Register Stake Address](#register-stake-address) +- [Delegate ADA to Stakepool](#delegate-ada-to-stakepool) + +## Register Stake Address + +New address must "register" before they can delegate to stakepools. + +```javascript +import { Transaction } from "@meshsdk/core"; + +const rewardAddress = "stake1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"; +const poolId = "pool1mhww3q6d7qssj5j2add05r7cyr7znyswe2g6vd23anpx5sh6z8d"; + +const tx = new Transaction({ initiator: wallet }); +tx.registerStake(rewardAddress); +tx.delegateStake(rewardAddress, poolId); + +const unsignedTx = await tx.build(); +const signedTx = await wallet.signTx(unsignedTx); +const txHash = await wallet.submitTx(signedTx); +``` + +## Delegate ADA to Stakepool + +Delegation is the process by which ADA holders delegate the stake associated with their ADA to a stake pool. Doing so, this allows ADA holders to participate in the network and be rewarded in proportion to the amount of stake delegated. + +```javascript +import { Transaction } from "@meshsdk/core"; + +const rewardAddress = "stake1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"; +const poolId = "pool1mhww3q6d7qssj5j2add05r7cyr7znyswe2g6vd23anpx5sh6z8d"; + +const tx = new Transaction({ initiator: wallet }); +tx.delegateStake(rewardAddress, poolId); + +const unsignedTx = await tx.build(); +const signedTx = await wallet.signTx(unsignedTx); +const txHash = await wallet.submitTx(signedTx); +``` + +Check out the [Mesh Playground](https://meshjs.dev/apis/transaction/staking) for live demo and full explanation. diff --git a/docs/get-started/mesh/wallets-integration.md b/docs/get-started/mesh/wallets-integration.md new file mode 100644 index 0000000000..ea8848146e --- /dev/null +++ b/docs/get-started/mesh/wallets-integration.md @@ -0,0 +1,119 @@ +--- +id: wallets-integration +sidebar_position: 3 +title: Wallets Integration +sidebar_label: Wallets Integration +description: Wallet for building transactions in your applications. +image: /img/og/og-getstarted-mesh.png +--- + +With Mesh, you can initialize a new wallet with: +- CIP-30 wallets ([Browser Wallet](#browser-wallet)) +- Cardano CLI generated keys ([App Wallet](#app-wallet)) +- Mnemonic phrases ([App Wallet](#app-wallet)) +- Private key ([App Wallet](#app-wallet)) + +## Browser Wallet + +[Browser Wallet](https://meshjs.dev/apis/browserwallet) is use for connecting, queries and performs wallet functions in accordance to [CIP-30](https://github.com/cardano-foundation/CIPs/tree/master/CIP-0030), which defines the API for dApps to communicate with the user's wallet. + +To use Browser Wallet is simple, just import `BrowserWallet` execute the APIs, for example: + +```javascript +// import BrowserWallet +import { BrowserWallet } from '@meshsdk/core'; + +// connect to a wallet +const wallet = await BrowserWallet.enable('eternl'); + +// get assets in wallet +const assets = await wallet.getAssets(); +``` + +| APIs | | +|--|--| +| [Get installed wallets](https://meshjs.dev/apis/browserwallet#getInstallWallets) | ```BrowserWallet.getInstalledWallets();``` | +| [Connect wallet](https://meshjs.dev/apis/browserwallet#connectWallet) | ```const wallet = await BrowserWallet.enable('eternl');``` | +| [Get balance](https://meshjs.dev/apis/browserwallet#getBalance) | ```const balance = await wallet.getBalance();``` | +| [Get change address](https://meshjs.dev/apis/browserwallet#getChangeAddress) | ```const changeAddress = await wallet.getChangeAddress();``` | +| [Get network ID](https://meshjs.dev/apis/browserwallet#getNetworkId) | ```const networkId = await wallet.getNetworkId();``` | +| [Get reward addresses](https://meshjs.dev/apis/browserwallet#getRewardAddresses) | ```const rewardAddresses = await wallet.getRewardAddresses();``` | +| [Get used addresses](https://meshjs.dev/apis/browserwallet#getUsedAddresses) | ```const usedAddresses = await wallet.getUsedAddresses();``` | +| [Get unused addresses](https://meshjs.dev/apis/browserwallet#getUnusedAddresses) | ```const unusedAddresses = await wallet.getUnusedAddresses();``` | +| [Get UTXOs](https://meshjs.dev/apis/browserwallet#getUtxos) | ```const utxos = await wallet.getUtxos();``` | +| [Sign data](https://meshjs.dev/apis/browserwallet#signData) | ```const addresses = await wallet.getUsedAddresses(); const signature = await wallet.signData(addresses[0], 'mesh');``` | +| [Sign transaction](https://meshjs.dev/apis/browserwallet#signTx) | ```const signedTx = await wallet.signTx(tx, partialSign?);``` | +| [Submit transaction](https://meshjs.dev/apis/browserwallet#submitTx) | ```const txHash = await wallet.submitTx(signedTx);``` | +| [Get lovelace](https://meshjs.dev/apis/browserwallet#getLovelace) | ```const lovelace = await wallet.getLovelace();``` | +| [Get assets](https://meshjs.dev/apis/browserwallet#getAssets) | ```const assets = await wallet.getAssets();``` | +| [Get policy IDs](https://meshjs.dev/apis/browserwallet#getPolicyIds) | ```const policyIds = await wallet.getPolicyIds();``` | +| [Get collection of assets](https://meshjs.dev/apis/browserwallet#getPolicyIdAssets) | ```const assets = await wallet.getPolicyIdAssets('64af2...42');``` | + +Definitely do check out the [Mesh Playground](https://meshjs.dev/apis/browserwallet) for live demo and full explanation. + +## App Wallet + +[App Wallet](https://meshjs.dev/apis/appwallet) is use for building transactions in your applications. You can import App Wallet with: + +```javascript +import { AppWallet } from '@meshsdk/core'; +``` + +### Generate a new wallet + +```javascript +import { AppWallet } from '@meshsdk/core'; + +const mnemonic = AppWallet.brew(); +``` + +### Load with Cardano CLI generated keys + +```javascript +import { AppWallet } from '@meshsdk/core'; + +const wallet = new AppWallet({ + networkId: 0, + fetcher: blockchainProvider, + submitter: blockchainProvider, + key: { + type: 'cli', + payment: '5820aaca553a7b95b38b5d9b82a5daa7a27ac8e34f3cf27152a978f4576520dd6503', + stake: '582097c458f19a3111c3b965220b1bef7d548fd75bc140a7f0a4f080e03cce604f0e', + }, +}); +``` + +### Load with mnemonic phrases + +```javascript +import { AppWallet } from '@meshsdk/core'; + +const wallet = new AppWallet({ + networkId: 0, + fetcher: blockchainProvider, + submitter: blockchainProvider, + key: { + type: 'mnemonic', + words: ["solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution","solution"], + }, +}); +``` + +### Load with private keys + +```javascript +import { AppWallet } from '@meshsdk/core'; + +const wallet = new AppWallet({ + networkId: 0, + fetcher: blockchainProvider, + submitter: blockchainProvider, + key: { + type: 'root', + bech32: 'xprv1cqa46gk29plgkg98upclnjv5t425fcpl4rgf9mq2txdxuga7jfq5shk7np6l55nj00sl3m4syzna3uwgrwppdm0azgy9d8zahyf32s62klfyhe0ayyxkc7x92nv4s77fa0v25tufk9tnv7x6dgexe9kdz5gpeqgu', + }, +}); +``` + +Check out the [Mesh Playground](https://meshjs.dev/apis/appwallet) for live demo and full explanation. \ No newline at end of file diff --git a/docs/get-started/ogmios.md b/docs/get-started/ogmios.md index c04428de6d..90e6df76b9 100644 --- a/docs/get-started/ogmios.md +++ b/docs/get-started/ogmios.md @@ -3,7 +3,7 @@ id: ogmios title: Get Started with Ogmios sidebar_label: Ogmios description: Get Started with Ogmios -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-ogmios.png --- **Ogmios** is a lightweight bridge interface for [cardano-node](https://github.com/input-output-hk/cardano-node/). It offers a WebSockets API that enables local clients to speak [Ouroboros' mini-protocols](https://hydra.iohk.io/build/1070091/download/1/network.pdf#chapter.3) via JSON/RPC. diff --git a/docs/get-started/overview.md b/docs/get-started/overview.md index 0e4696729f..c15d986fae 100644 --- a/docs/get-started/overview.md +++ b/docs/get-started/overview.md @@ -4,7 +4,7 @@ slug: /get-started/ title: Get Started sidebar_label: Overview description: Get Started -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-overview.png --- ![Cardano Get Started](../../static/img/card-get-started-title.svg) diff --git a/docs/get-started/plu-ts.md b/docs/get-started/plu-ts.md new file mode 100644 index 0000000000..a3d09e5e68 --- /dev/null +++ b/docs/get-started/plu-ts.md @@ -0,0 +1,44 @@ +--- +id: plu-ts +title: Get Started with `plu-ts` +sidebar_label: plu-ts +description: Get Started with `plu-ts` +--- + +`plu-ts` is a Typescript-embedded smart contract programming language and a transaction creation library. + +## Installation + +### Add `plu-ts` as dependecy + +To install `plu-ts` you can use `npm` (or the node package manager of your coiche) and run the following in you root project. + +```sh +npm install @harmoniclabs/plu-ts +``` + +### Get `plu-ts` from source + +First clone the git repository + +```sh +git clone https://github.com/HarmonicLabs/plu-ts.git +``` + +then run `npm install` to set up everything +```sh +npm install +``` + +and finally build the project using +```sh +npm run build +``` + +the output can be found in the `dist` directory under the project root. + +## Hello World + +You now have all you need to start your adventure with Typescript smart contracts. Have a look at the [hello world example contract](https://pluts.harmoniclabs.tech/docs/examples/Hello%20World). + +Visit the `plu-ts` website and explore [other examples](https://pluts.harmoniclabs.tech/docs/category/examples). \ No newline at end of file diff --git a/docs/get-started/running-cardano.md b/docs/get-started/running-cardano.md index 8cc9481b0e..53c04665fe 100644 --- a/docs/get-started/running-cardano.md +++ b/docs/get-started/running-cardano.md @@ -3,7 +3,7 @@ id: running-cardano title: How to run cardano-node sidebar_label: Running cardano-node description: This guide will explain and show you how to run the cardano-node and components on your system. -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-running-cardano-node.png --- ### Overview @@ -17,6 +17,17 @@ This guide assumes you installed `cardano-node` and `cardano-cli` into your syst This guide does not cover the topic of running a block-producing `cardano-node` or running a **Cardano Stake Pool**. For more information regarding that topic, please visit the [Stake Pool Operation](/docs/operate-a-stake-pool/) section. ::: +## Cardano blockchain nets: +### Testnet +There are two types of testnet: `preview` and `pre-prod`. + +- **Preview Testnet**: Testing release candidates and Mainnet releases. Leads Mainnet hard forks by at least 4 weeks. This net is for those who just want to see how it runs, get familiarised and play with cardano-node. + +- **Pre-Production Testnet**: Testing release candidates and Mainnet releases. Forks at approximately same time as Mainnet (within an epoch of each other). This net is ideal for those who are ready to run the Mainnet but want to test it before running it. + +### Production (Mainnet) +This is the live Production. Only gets official Mainnet releases. Please use this net once you are ready to use the cardano-node. + ### Configuration Files The `cardano-node` application requires at least four configuration files to run as of writing this article. @@ -33,33 +44,53 @@ Currently, the `cardano-node` topology is manually set by the community of netwo For more information about **Cardano** blockchain eras and upgrades, please visit the [Cardano Roadmap](https://roadmap.cardano.org/en). ::: -You can download the current **Cardano** blockchain network configuration files here: +You can download the current **Cardano** blockchain network configuration files here: [The Cardano Operations Book > Environments](https://book.world.dev.cardano.org/environments.html) +…or by running: -#### Mainnet / Production +#### Testnet / Preview -**NetworkMagic**: `764824073` +**NetworkMagic**: `2` ``` -curl -O -J https://hydra.iohk.io/build/7370192/download/1/mainnet-config.json -curl -O -J https://hydra.iohk.io/build/7370192/download/1/mainnet-byron-genesis.json -curl -O -J https://hydra.iohk.io/build/7370192/download/1/mainnet-shelley-genesis.json -curl -O -J https://hydra.iohk.io/build/7370192/download/1/mainnet-alonzo-genesis.json -curl -O -J https://hydra.iohk.io/build/7370192/download/1/mainnet-topology.json +curl -O -J https://book.world.dev.cardano.org/environments/preview/config.json +curl -O -J https://book.world.dev.cardano.org/environments/preview/db-sync-config.json +curl -O -J https://book.world.dev.cardano.org/environments/preview/submit-api-config.json +curl -O -J https://book.world.dev.cardano.org/environments/preview/topology.json +curl -O -J https://book.world.dev.cardano.org/environments/preview/byron-genesis.json +curl -O -J https://book.world.dev.cardano.org/environments/preview/shelley-genesis.json +curl -O -J https://book.world.dev.cardano.org/environments/preview/alonzo-genesis.json ``` +#### Testnet / Preprod -#### Testnet / Sandbox +**NetworkMagic**: `1` -**NetworkMagic**: `1097911063` +``` +curl -O -J https://book.world.dev.cardano.org/environments/preprod/config.json +curl -O -J https://book.world.dev.cardano.org/environments/preprod/db-sync-config.json +curl -O -J https://book.world.dev.cardano.org/environments/preprod/submit-api-config.json +curl -O -J https://book.world.dev.cardano.org/environments/preprod/topology.json +curl -O -J https://book.world.dev.cardano.org/environments/preprod/byron-genesis.json +curl -O -J https://book.world.dev.cardano.org/environments/preprod/shelley-genesis.json +curl -O -J https://book.world.dev.cardano.org/environments/preprod/alonzo-genesis.json +``` + +#### Mainnet / Production + +**NetworkMagic**: `764824073` ``` -curl -O -J https://hydra.iohk.io/build/7654130/download/1/testnet-topology.json -curl -O -J https://hydra.iohk.io/build/7654130/download/1/testnet-shelley-genesis.json -curl -O -J https://hydra.iohk.io/build/7654130/download/1/testnet-config.json -curl -O -J https://hydra.iohk.io/build/7654130/download/1/testnet-byron-genesis.json -curl -O -J https://hydra.iohk.io/build/7654130/download/1/testnet-alonzo-genesis.json +curl -O -J https://book.world.dev.cardano.org/environments/mainnet/config.json +curl -O -J https://book.world.dev.cardano.org/environments/mainnet/db-sync-config.json +curl -O -J https://book.world.dev.cardano.org/environments/mainnet/submit-api-config.json +curl -O -J https://book.world.dev.cardano.org/environments/mainnet/topology.json +curl -O -J https://book.world.dev.cardano.org/environments/mainnet/byron-genesis.json +curl -O -J https://book.world.dev.cardano.org/environments/mainnet/shelley-genesis.json +curl -O -J https://book.world.dev.cardano.org/environments/mainnet/alonzo-genesis.json ``` +The latest supported networks can be found at https://book.world.dev.cardano.org/environments.html + :::note Each network has a `config` file, `genesis` file(s), `topology` file, and unique identifier called the **Network Magic**. @@ -67,9 +98,9 @@ Each network has a `config` file, `genesis` file(s), `topology` file, and unique This section will be updated when new **Cardano** networks come online with their respective configuration files and **Network Magic**. ::: -You might be asking what the difference is between `mainnet` and `testnet` and why there are two networks? To put it simply, **Cardano** is an open-source blockchain, and anyone is free to spin up a network based on **Cardano's** software components. The `mainnet` network was the first one established during the start of the **Byron** era in 2017. And everyone participating in the network agreed that is where all the real value of **Cardano** lives. +You might be asking what the difference is between `mainnet` and `testnet` and why there are two official network types? To put it simply, **Cardano** is an open-source blockchain, and anyone is free to spin up a network based on **Cardano's** software components. The `mainnet` network was the first one established during the start of the **Byron** era in 2017. And everyone participating in the network agreed that is where all the real value of **Cardano** lives. - Testing the network's features and capabilities can be expensive and will consume real value. So [Input-Output Global](https://iohk.io) has spun up a sandbox or testnet version of the network. Instead of using real `ada` tokens for transactions, you use the `tAda` or **Test ADA**. Alternatively, you can spin up your own custom **Cardano** network, but that is outside the scope of this guide. + Testing the network's features and capabilities can be expensive and will consume real value. So [Input-Output Global](https://iohk.io) has spun up sandboxes or testnet versions of the network. Instead of using real `ada` tokens for transactions, you use the `tAda` or **Test ADA**. Alternatively, you can spin up your own custom **Cardano** network, but that is outside the scope of this guide. ### Running the node @@ -132,34 +163,34 @@ Available options: ### cardano-node parameters :::note -In this section, we will use the path `$HOME/cardano` to store all the `cardano-node` related files as an example, and please replace it with the directory you have chosen to store the files. +In this section, we will use the path `$HOME/cardano/testnet` to store all the testnet `cardano-node` related files as an example, and please replace it with the directory you have chosen to store the files. ::: We will focus on six key command-line parameters for running a node: **`--topology`**: This requires the path of the `topology.json` file that you have downloaded as instructed [above](/docs/get-started/running-cardano#configuration-files). -> For example, If you have downloaded the `topology.json` file to the path `$HOME/cardano/topology.json`, then the argument would be something like this: +> For example, If you have downloaded the `topology.json` file to the path `$HOME/cardano/testnet/topology.json`, then the argument would be something like this: ``` ---topology $HOME/cardano/topology.json +--topology $HOME/cardano/testnet/topology.json ``` **`--database-path`**: This expects the path to a directory where we will store the actual blockchain data like **blocks**, **transactions**, **metadata**, and other data type that people stored in the **Cardano** blockchain. We explore how we can query those kinds of data in the cardano-db-sync section. ***@TODO: link to the cardano-db-sync section.*** -> For example, if we decide that all files required by `cardano-node` will be in the path `$HOME/cardano/`. Then we could create a database directory like this, `mkdir -p $HOME/cardano/db`. +> For example, if we decide that all files required by `cardano-node` will be in the path `$HOME/cardano/testnet`. Then we could create a database directory like this, `mkdir -p $HOME/cardano/testnet/db`. > The directory structure would then be something like this: ``` -$HOME/cardano/ +$HOME/cardano/testnet/ ├── db -├── testnet-alonzo-genesis.json -├── testnet-byron-genesis.json -├── testnet-config.json -├── testnet-shelley-genesis.json -└── testnet-topology.json +├── alonzo-genesis.json +├── byron-genesis.json +├── config.json +├── shelley-genesis.json +└── topology.json 1 directory, 4 files ``` -> As you may have noticed, we are planning to run a `testnet` node in this example and have downloaded the configuration files into the `$HOME/cardano/` directory. We also see that we have created the `db` directory inside `$HOME/cardano/` successfully. The argument would look something like this: +> As you may have noticed, we are planning to run a testnet node in this example and have downloaded the configuration files into the `$HOME/cardano/testnet/` directory. We also see that we have created the `db` directory inside `$HOME/cardano/testnet/` successfully. The argument would look something like this: ``` ---database-path $HOME/cardano/db +--database-path $HOME/cardano/testnet/db ``` > Please download and move the configuration files to your Cardano directory as shown above to continue following this guide. @@ -169,7 +200,7 @@ $HOME/cardano/ > > Here is an example `--socket-path` argument for **Linux**: ``` ---socket-path $HOME/cardano/db/node.socket +--socket-path $HOME/cardano/testnet/db/node.socket ``` > As you can see, the argument points to a file since **unix sockets** are represented as files (like everything else in **Linux**). In this case, we put the socket file in the `db` directory that we have just created before. > @@ -197,7 +228,7 @@ $HOME/cardano/ **`--config`**: This expects the path to the main configuration file that we have downloaded previously. > Here is an example `--config` argument: ``` ---config $HOME/cardano/testnet-config.json +--config $HOME/cardano/testnet/config.json ``` > Please make sure that the `alonzo-genesis.json`, `byron-genesis.json` and `shelley-genesis.json` are in the same directory as the `config.json`. @@ -205,12 +236,12 @@ Here is a realistic example for running `cardano-node`: ```bash cardano-node run \ ---config $HOME/cardano/testnet-config.json \ ---database-path $HOME/cardano/db/ \ ---socket-path $HOME/cardano/db/node.socket \ +--config $HOME/cardano/testnet/config.json \ +--database-path $HOME/cardano/testnet/db/ \ +--socket-path $HOME/cardano/testnet/db/node.socket \ --host-addr 127.0.0.1 \ --port 1337 \ ---topology $HOME/cardano/testnet-topology.json +--topology $HOME/cardano/testnet/topology.json ``` If you have everything set correctly, you should see something like this: @@ -258,7 +289,7 @@ So we will set that in `$HOME/.bashrc` or `$HOME/.zshrc`, depending on which she Add this line to the bottom of your shell profile (**MacOS** and **Linux**): ``` -export CARDANO_NODE_SOCKET_PATH="$HOME/cardano/db/node.socket" +export CARDANO_NODE_SOCKET_PATH="$HOME/cardano/testnet/db/node.socket" ``` Once saved, reload your shell/terminal for changes to take effect. @@ -266,20 +297,26 @@ Once saved, reload your shell/terminal for changes to take effect. Finally, we can now test querying the blockchain tip of our `cardano-node`: - First, run `cardano-node` in a separate terminal for it to start syncing (if not already). -- Open another terminal and run the following command `cardano-cli query tip --testnet-magic 1097911063`. +- Open another terminal and run the following command `cardano-cli query tip --testnet-magic 1`. > You should see something like this: -> ```json +```json { - "blockNo": 2598870, - "headerHash": "e5be38153db4dc639134969e6449f37e105e0c5228f828f76a885968b4423aaf", - "slotNo": 27149964 + "block": 2598870, + "epoch": 133, + "era": "Shelley", + "hash": "7b5633590bf8924d8fce5b6515f34fga0c712f64e9b7d273f915656f88fba872", + "slot": 27149964, + "syncProgress": "57.09" } +``` :::note -We include `--testnet-magic ` in the parameter for `cardano-cli query tip` because we are using a `testnet` node. If you intend to query `mainnet` instead, please use the `--mainnet` parameter and make sure your node is connected to the `mainnet` network. +We include `--testnet-magic ` in the parameter for `cardano-cli query tip` because we are using a testnet node. If you intend to query `mainnet` instead, please use the `--mainnet` parameter and make sure your node is connected to the `mainnet` network. ::: -What you see here is the local tip data of your node. This case, means that you are synced up to `blockNo: 2598870` and `slotNo: 27149964`. +What you see here is the local tip data of your node. This case, means that you are synced up to `block: 2598870` and `slot: 27149964`. + +`syncProgress` is the percentage your node that has been synced. `100` meaning it is fully synced. To know whether you are fully synced or not, you can check the **Cardano Blockchain Explorer** of the relevant network: diff --git a/docs/get-started/secure-workflow.md b/docs/get-started/secure-workflow.md index 2fab58162b..3b3d888769 100644 --- a/docs/get-started/secure-workflow.md +++ b/docs/get-started/secure-workflow.md @@ -3,18 +3,18 @@ id: secure-workflow title: Secure Transaction Workflow sidebar_label: Secure Transaction Workflow description: Procedures for using private keys separately from the Internet. -image: ../img/og-developer-portal.png +image: /img/og/og-security-secure-transaction-workflow.png --- This general guide is written to help Cardano stake pool operators and developers keep to one simple rule: -:::important +:::warning Payment keys can never be stored, even for a moment, on an Internet connected machine. ::: -Therefore we will present a standard workflow for this sequences of `cardano-cli` commands for a simple, single transaction for funds transfer: +Therefore we present a secure, standard workflow for this sequence of `cardano-cli` commands for a simple, single transaction for funds transfer: - **[Create Simple Transaction](../stake-pool-course/handbook/create-simple-transaction)** (*insecure* version) @@ -31,44 +31,44 @@ All transactions will be done in these 3 steps: 1. on Internet connected computer: - **Assemble** all transaction details (from Cardano node or other query) in a file & save it to a removable device. -2. in [Air Gap Environment](./air-gap): +2. in [air gap environment](./air-gap): - **Build** information from this file into a signed transaction & save the Tx file back on the same device (note `Tx` = "transaction"). 3. on Internet connected computer: - **Upload** the Tx file to your Cardano node and submit it. -Therefore, the payment signing key (the private component of the [Cardano wallet address key pair](../operate-a-stake-pool/cardano-key-pairs#wallet-address-key-pairs)) **never leaves the Air Gap environment**. This is vital because: +Therefore, the payment signing key (the private component of the [Cardano wallet address key pair](../operate-a-stake-pool/cardano-key-pairs#wallet-address-key-pairs)) **never leaves the air gap environment**. This is vital because: - A standard assumption in security is that *any* Internet connection on *any* computer creates opportunities for malicious people or programs to copy, view, or modify *anything* unencrypted on that computer. - Unlike transactions with cryptocurrenty wallet software, in which the wallet's private payment keys are carefully encrypted and securely managed, the payment key (in this documentation, `payment.skey`) used for the raw transactions of development & stake pool operations is *not encrypted*. - - This means that this file stored anywhere on your Internet connected computer or server, even for an instant, creates an opportunity the funds at that address (`payment.addr`) to be ***lost***. + - This means that this file stored anywhere on your Internet connected computer or server, even for an instant, creates an opportunity for the funds at that address (`payment.addr`) to be ***lost***. ## Prerequisites -### Your [Air Gap Environment](./air-gap) +### Your [air gap environment](./air-gap) -Follow [these instructions](./air-gap) to create the environment (usually a dedicated "air gap machine") if you haven't already. +Follow [these instructions](./air-gap) to procure the environment (usually a dedicated "air gap machine") if you haven't already. -### Move any existing keys inside the Air Gap +### Move any existing keys inside the air gap Second, if you've been running your applications, token/NFT generation, or stake pool with keys stored on any Internet connected machine (whether desktop or server): - - Move all those keys onto the Air Gap host and [securely delete](../get-started/air-gap#install-secure-deletion-tools) the originals. + - Move all those keys onto the air gap host and [securely delete](../get-started/air-gap#install-secure-deletion-tools) the originals. - Also, seriously consider whether those resources should be rebuilt due to the exposure of those private keys. To simplify the commands below, this guide assumes you will store all your keys and addresses *in the same single directory* where you will be building your transactions. ### Dedicate a memory stick to moving your Tx files -Format a memory stick on a machine you believe to be secure, and then format it again on the Air Gap machine. Some ideas: +Format a memory stick on a machine you believe to be secure, and then (to be on the safe side) format it again on the air gap machine. Some ideas: - - The objective here is to avoid bringing malicious software from your host computer into the Air Gap environment, especially via viruses that are designed to propagate by memory sticks. - - Use a filesystem that will be compatible with your regular Internet connected machine *and* your Air Gapped Linux environment: the one most likely to be writable by all types of desktop is FAT32. + - The objective here is to avoid bringing malicious software from your host computer into the air gap environment, especially via viruses that are designed to propagate by memory sticks. + - Use a filesystem that will be compatible with your regular Internet connected machine *and* your air gapped Linux environment: the one most likely to be writable by all types of desktop is FAT32. ## Steps of a secure transaction -This is rewritten from page [Create Simple Transaction](../stake-pool-course/handbook/create-simple-transaction) (only considered secure to run on testnet) with the following exception: +This is rewritten from page [Create Simple Transaction](../stake-pool-course/handbook/create-simple-transaction) (only considered secure to run on a testnet) with the following exception: - - [Determinng the TTL (time to Live)](../stake-pool-course/handbook/create-simple-transaction#determine-the-ttl-time-to-live-for-the-transaction) for the transaction is omitted, along with setting this value in the transaction itself, to simplify the information-gathering step. + - [Determining the TTL (time to Live)](../stake-pool-course/handbook/create-simple-transaction#determine-the-ttl-time-to-live-for-the-transaction) for the transaction is omitted, along with setting this value in the transaction itself, to simplify the information-gathering step. - This poses no security risk since an omitted TTL value allows a Tx file to be used indefinitely *but* submitting that Tx will change the UTxO set so that submitting that transaction again will be impossible. Also note that in general your "Internet connected machine" and your "Cardano node" will be two separate systems, and you will have to transfer files from one to the other with programs like [`rsync`](https://linux.die.net/man/1/rsync). @@ -105,7 +105,7 @@ Then copy both this file and `protocol.json` to the transfer memory stick. ### 2\. *Build* Tx details into a signed transaction. -Attach your transfer memory stick to the Air Gap host and copy the files to your working directory: +Attach your transfer memory stick to the air gap host and copy the files to your working directory: - `protocol.json` - your scratch file @@ -132,12 +132,12 @@ cardano-cli transaction build-raw \ #### Calculate the fee -A simple transaction needs one input, a valid UTXO from `payment.addr`, and two outputs: +The generally simplest transaction needs one input (a valid UTXO from `payment.addr`) and two outputs: - - Output1: The address that receives the transaction. - - Output2: The address that receives the change of the transaction. +1. The address that receives the transaction. +1. The address that receives the change of the transaction. -Note that to calculate the fee you need to include the draft transaction +Note that to calculate the fee you need to include the draft transaction: ``` sh cardano-cli transaction calculate-min-fee \ @@ -165,7 +165,7 @@ expr 20000000 - 10000000 - 167965 #### Build the transaction -We write the transaction in a file, we will name it `tx.raw`. +We write the transaction in a file; we will name it `tx.raw`: ``` sh cardano-cli transaction build-raw \ @@ -188,7 +188,7 @@ cardano-cli transaction sign \ --out-file tx.signed ``` -Save the `tx.signed` file back on the transfer memory stick, then [safely remove](https://help.ubuntu.com/stable/ubuntu-help/files-removedrive.html.en) the memory stick from the Air Gap machine. +Save the `tx.signed` file back on the transfer memory stick, then [safely remove](https://help.ubuntu.com/stable/ubuntu-help/files-removedrive.html.en) the memory stick from the air gap machine. ### 3\. **Upload** and submit the Tx file. @@ -196,7 +196,7 @@ Reattach your transfer memory stick back to the Internet connected computer, the #### Submit the transaction -Log into your Cardano node and execute: +Log into your Cardano node (or prepare Daedalus if using its node) and execute: ``` sh cardano-cli transaction submit \ @@ -219,14 +219,16 @@ Some consider this so much easier to use that ***all*** transactions should be p However, this discussion revealed the undocumented condition that `transaction build` can only be done on a **live** Cardano node. The community in general doesn't know the reasons for this (with some speculation in the thread above), so in the meantime: - Using `transaction build` would require, in addition to accumulating the UTxO and balance information from your live Cardano node or network environment to build your transaction, that you also run the `build` command in the networked environment as well and save the unsigned transaction file on your transfer media. - - This transaction file would then need to be copied from the live environment to the Air Gap environment, where it would be signed... but in a security paranoid environment the user could never be sure the transaction was not built or modified maliciously outside the Air Gap. + - This transaction file would then need to be copied from the live environment to the air gap environment, where it would be signed... but in a security paranoid environment the user could never be sure the transaction was not built or modified maliciously outside the air gap. -Therefore this guide suggests *only* assembling transaction *details* outside the Air Gap, to be applied to `cardano-cli transaction build-raw` inside the Air Gap, because there is not much convenience overall to using `transaction build` and perhaps some security risk as well. +Therefore this guide suggests *only* assembling transaction *details* outside the air gap, to be applied to `cardano-cli transaction build-raw` inside the air gap, because there is not much convenience overall to using `transaction build` and perhaps some security risk as well. ## Other pending topics in secure workflow These are not directly related to transacations, and will all eventually be addressed in their own pages on the Developer Portal: - - pool key installation & updates: transferring keys securely from your Air Gap to your stake pool block producer - - making encrypted backups of your private keys (offsite / stored outside your Air Gap Environment) + - pool key installation & updates: transferring keys (e.g. VRF and KES) securely from within the air gap to your stake pool block producer + - making encrypted backups of your private keys (so they can be kept offsite / stored outside your air gap environment) - keeping secure (encrypted) records of your stake pool & development resources + +For ideas on secure backup & record-keeping, see [Get Started with the Frankenwallet > Making & verifying backups of assets & keys](/docs/operate-a-stake-pool/frankenwallet#making--verifying-backups-of-assets--keys). diff --git a/docs/get-started/tangocrypto.md b/docs/get-started/tangocrypto.md index a51c59ce51..619a06304c 100644 --- a/docs/get-started/tangocrypto.md +++ b/docs/get-started/tangocrypto.md @@ -3,7 +3,7 @@ id: tangocrypto title: Getting started with Tangocrypto sidebar_label: Tangocrypto description: Getting started with Tangocrypto -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-tangocrypto.png --- # What is Tangocrypto? @@ -41,12 +41,12 @@ We provide the most accessible and reliable Cardano infrastructure, freeing comp ### Network and App ID -You can choose the mainnet or the testnet for your queries. The API requires a valid `app_id` to be included with your request traffic. This identifier should be appended to the request URL. +You can choose Mainnet or a testnet for your queries. The API requires a valid `app_id` to be included with your request traffic. This identifier should be appended to the request URL. | Network | Endpoint | ---------------- | :-----------: -| Cardano mainnet | https://cardano-mainnet.tangocrypto.com/{app_id}/v1 -|Cardano testnet | https://cardano-testnet.tangocrypto.com/{app_id}/v1 +| Cardano mainnet | [https://cardano-mainnet.tangocrypto.com/{app_id}/v1](https://cardano-mainnet.tangocrypto.com/{app_id}/v1 "Cardano mainnet {rel='nofollow'}") +| Cardano testnet | [https://cardano-testnet.tangocrypto.com/{app_id}/v1](https://cardano-testnet.tangocrypto.com/{app_id}/v1 "Cardano testnet {rel='nofollow'}") ### API Key header diff --git a/docs/get-started/technical-concepts.md b/docs/get-started/technical-concepts.md index 7ed09fd2ef..e76080f90b 100644 --- a/docs/get-started/technical-concepts.md +++ b/docs/get-started/technical-concepts.md @@ -3,7 +3,7 @@ id: technical-concepts title: Get started with the technical concepts sidebar_label: Technical Concepts description: Get started with the technical concepts behind Cardano. -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-technical-concepts.png --- To get the most out of the Cardano Developer Portal, you should have programming experience and a basic understanding of blockchain concepts such as [UTxO](#unspent-transaction-output-utxo), [transactions](#transactions), [addresses](#addresses), [key derivation](#key-derivation), and [networking](#networking). @@ -40,7 +40,7 @@ We answer your questions about how nodes on Cardano talk to each other. Learn ab ## Cardano Improvement Proposals (CIP) -The [Cardano Improvement Proposal](../governance/cardano-improvement-proposals/CIP-0001) (CIP) process allows the community to interact with the Cardano Foundation to improve the Cardano ecosystem in a formal way. +The [Cardano Improvement Proposal](/docs/governance/cardano-improvement-proposals/CIP-0001) (CIP) process allows the community to interact with the Cardano Foundation to improve the Cardano ecosystem in a formal way. ## Slot Lottery @@ -116,5 +116,30 @@ Learn how to take blockchain snapshots for Governance voting purposes. ## Djed Stablecoin -Learn a little bit about the Algorithmic stablecoin Djed coming to Cardano - \ No newline at end of file +Learn a little bit about the Algorithmic stablecoin Djed coming to Cardano. + + + ## Genesis Key Delegation +Learn about how Genesis Keys work on cardano and how they are delegated. + + + ## Music NFTs +Learn and dive into CIP-60 which is the Music NFT metadata standard on Cardano. + + + ## Pointer Addresses +Learn and dive into CPS-0002 which focuses on Pointer Addresses. + + + ## Kogmios +Learn about Kogmios, a Kotlin library for communicating with Ogmios. + + + ## Aiken +Learn about Aiken, a bespoke smart contract language for Cardano. + + + ## Voltaire Governance +Learn about the upcoming CIP-1694 and how voting and governance might work in the Voltaire era. + + diff --git a/docs/get-started/testnets-and-devnets.md b/docs/get-started/testnets-and-devnets.md index ac296eec86..d7e01403f1 100644 --- a/docs/get-started/testnets-and-devnets.md +++ b/docs/get-started/testnets-and-devnets.md @@ -3,43 +3,74 @@ id: testnets-and-devnets title: Get started with testnets sidebar_label: Testnets description: Get started with testnets and devnets -image: ../img/og-developer-portal.png +image: /img/og/og-getstarted-testnets.png --- To make the difference between Cardano mainnet functionality and testnet functionality clearer, we moved the old content of [developers.cardano.org](https://developers.cardano.org) to [testnets.cardano.org](https://testnets.cardano.org) with the launch of this developer portal. +## Cardano testnets +The [Cardano testnets](https://testnets.cardano.org/en/testnets/cardano/overview/) are your playgrounds when testing [Cardano integration](/docs/integrate-cardano/), building with [transaction metadata](/docs/transaction-metadata/), exploring [native tokens](/docs/native-tokens/) or learning how to [operate a stake pool](/docs/operate-a-stake-pool/). -## Cardano testnet -The [Cardano testnet](https://testnets.cardano.org/en/testnets/cardano/overview/) is your playground when testing [Cardano integration](/docs/integrate-cardano/), building with [transaction metadata](/docs/transaction-metadata/), exploring [native tokens](/docs/native-tokens/) or learning how to [operate a stake pool](/docs/operate-a-stake-pool/). +The Testnets are an essential part of the development process for Cardano, as they allow developers to test and refine their code before deploying it on the live network, ultimately improving the reliability and security. -Because the [Cardano testnet](https://testnets.cardano.org/en/testnets/cardano/overview/) is an independent network, separate from the Cardano mainnet, it requires its own token: test ada (tAda). +### What testnet should I use? -### Where to get test ada? -Test ada is worth nothing. With it you can safely perform all tests free of charge - the reason why you want to develop on the testnet. +#### Preview Testnet + +- The Preview Testnet is a testing environment used to showcase new features and functionality to the Cardano community before they are deployed on the Mainnet. +- It allows developers and users to test and provide feedback on new features and changes before they are released to the wider community. +- The Preview Testnet helps to ensure that new features are user-friendly and meet the needs of the community, ultimately improving the user experience on the Mainnet. +- Leads Mainnet hard forks by at least 4 weeks. + +You can download the current Cardano blockchain network configuration files for Preview Testnet here: [The Cardano Operations Book > Preview Testnet.](https://book.world.dev.cardano.org/environments.html#preview-testnet) + +#### Guild Network + +- Guild Network is a community maintained public testnet network that is primarily useful for 'quick' testing for development/integrations, as it runs short 1-hour epochs. +- The primary use-case for this network is often short-term scope-specific testing, it has gone through previous forks on cardano chain with minimal data to ensure we do have different data objects across older forks. The faucet distribution for this network is manual and available with members across timezones based on request in [support](https://t.me/guild_operators_official) channel. +- The timeline for forks lead Mainnet but are flexible depending on community needs that could be discussed on [github](https://github.com/cardano-community/guild-operators/) (unless specific conditions require testing beforehand), and is useful for testing data against longer history (over 10K epochs). + +You can download the current Cardano blockchain network configuration files for Guild Network [here](https://github.com/cardano-community/guild-operators/tree/alpha/files) + +#### Pre-Production Testnet + +- The Pre-Production Testnet is a testing environment used to validate major upgrades and releases before deployment to the Mainnet. +- It is a staging area where developers can simulate real-world scenarios and ensure that everything is working as expected before going live. +- The preprod testnet helps to minimize the risk of bugs, security issues, and other problems that could negatively impact the Mainnet. +- Hard forks at approximately the same time as Mainnet (within an epoch of each other) -To get free test ada, you need to visit the [Cardano testnet faucet](/docs/integrate-cardano/testnet-faucet/). +You can download the current Cardano blockchain network configuration files for Pre-Production Testnet here: [The Cardano Operations Book > Pre-Production Testnet.](https://book.world.dev.cardano.org/environments.html#pre-production-testnet) + +#### Summary + +The Pre-Production Testnet is a more comprehensive testing environment used to validate major upgrades, while the Preview Testnet is a more targeted testing environment used to showcase new features and gather feedback from the community. ### Where to get a testnet wallet? -- [Daedalus Wallet for Cardano Testnet](https://testnets.cardano.org/en/testnets/cardano/get-started/wallet/) is the testnet version of Daedalus wallet. +- [Daedalus Wallet for Cardano Testnet](https://testnets.cardano.org/en/testnets/cardano/get-started/wallet/) is the Pre-Production and Preview versions of Daedalus wallet. +- [Nami Wallet](https://namiwallet.io/) is a lightweight wallet developed by Cryptonomic and supports both Pre-Production and Preview testnets. +- [Eternl Wallet](https://eternl.io/) is a another lightweight wallet supporting both testnets with both single- and multiple-address wallets. +- [Ledger Nano S and Ledger Nano X](https://www.ledger.com/) are hardware wallets that support both Pre-Production and Preview testnets. +- [Cardano-wallet](/docs/integrate-cardano/listening-for-payments-wallet) is a convenient way of using the cardano-wallet HTTP Application Programming Interface. -### Which block explorers can I use for the Cardano testnet? -- [explorer.cardano-testnet.iohkdev.io](https://explorer.cardano-testnet.iohkdev.io/) is a testnet block explorer by [IOHK](https://iohk.io). -- [testnet.cexplorer.io](https://testnet.cexplorer.io/) is a testnet block explorer by [Cexplorer](https://cexplorer.io). -- [testnet.cardanoscan.io](https://testnet.cardanoscan.io) is a testnet block explorer by [Cardanoscan](https://cardanoscan.io). +It's important to note that while all of these wallets support Cardano testnets, you will need to choose the testnet network option within the wallet when setting it up or switching to testnet. -### Which metadata explorers can I use for the Cardano testnet? -- [bi-testnet.stakepoolcentral.com](https://bi-testnet.stakepoolcentral.com) is a testnet transaction metadata explorer by [CENT](https://cent.stakepoolcentral.com). +### Where to get test ada? -### What kind of monitoring tools are available for the testnet? -- [Grafana dashboard](https://monitoring.cardano-testnet.iohkdev.io/grafana/d/Oe0reiHef/cardano-application-metrics-v2?orgId=1&refresh=1m&from=now-7d&to=now) provides many health metrics. -- [tokentool.io](https://tokentool.io) lists all native tokens on mainnet and testnet. +Because the [Cardano testnets](https://docs.cardano.org/cardano-testnet/overview/) are independent networks, separate from the Cardano mainnet, they requires their own token: test ada (tAda). + +Test ada is worth nothing. With it you can safely perform all tests free of charge - the reason why you want to develop on the testnets. -## Where has the old content of developers.cardano.org gone? -The developer portal covers everything that you can do on Cardano Mainnet today. To illustrate this difference, we moved the old content of [developers.cardano.org](https://developers.cardano.org) to [testnets.cardano.org](https://testnets.cardano.org) with the launch of this developer portal. +To get free test ada for Preprod or Preview, you need to visit: [Cardano Testnet Faucet.](https://docs.cardano.org/cardano-testnet/tools/faucet) -### Programming languages -If you miss information about programming languages like [Plutus](https://testnets.cardano.org/en/programming-languages/plutus/overview/) or [Marlowe](https://testnets.cardano.org/en/programming-languages/marlowe/overview/), visit [testnets.cardano.org](https://testnets.cardano.org). +In depth explanation about Cardano Testnet Faucet can be found [here.](/docs/integrate-cardano/testnet-faucet/) -### Smart Contracts -To get you up to speed with the Smart Contract functionality coming to Cardano, we prepared [get started with smart contracts on Cardano](/docs/smart-contracts/). +### Which block explorers can I use for the Cardano testnets? +- [testnet.cardanoscan.io](https://testnet.cardanoscan.io) is a Pre-Production and Preview block explorer by [Cardanoscan](https://cardanoscan.io). +- [testnet.cexplorer.io](https://testnet.cexplorer.io/) is a Pre-Production and Preview block explorer by [Cexplorer](https://cexplorer.io). +### Which metadata explorers can I use for the Cardano testnets? +- [pool.pm/test/metadata](https://pool.pm/test/metadata) is a testnet metadata explorer by [Pool.pm](https://pool.pm/) +- [bi-testnet.stakepoolcentral.com](https://bi-testnet.stakepoolcentral.com) is a testnet transaction metadata explorer by [CENT](https://cent.stakepoolcentral.com). +### What kind of monitoring tools are available for the testnets? +- [Grafana dashboard](https://monitoring.cardano-testnet.iohkdev.io/grafana/d/Oe0reiHef/cardano-application-metrics-v2?orgId=1&refresh=1m&from=now-7d&to=now) provides many health metrics. +- [Prometheus](/docs/stake-pool-course/handbook/apply-logging-prometheus/#docusaurus_skipToContent_fallback) is used to track the health and performance of Cardano nodes. diff --git a/docs/governance/overview.md b/docs/governance/overview.md index 6f2089b55a..bc04ccbe74 100644 --- a/docs/governance/overview.md +++ b/docs/governance/overview.md @@ -4,7 +4,7 @@ slug: /governance/ title: Be Part of the Governance sidebar_label: Overview description: Governance is an essential topic that includes Cardano Improvement Proposals (CIP), project funding, voting, and network parameters. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ![Cardano Governance](../../static/img/card-governance-title.svg) diff --git a/docs/governance/project-catalyst.md b/docs/governance/project-catalyst.md index 81f94608dc..03a9b9dddd 100644 --- a/docs/governance/project-catalyst.md +++ b/docs/governance/project-catalyst.md @@ -3,16 +3,18 @@ id: project-catalyst title: Fund your Project with Catalyst sidebar_label: Project Catalyst description: Fund your project with Catalyst -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- +Visit the official [Project Catalyst website](https://projectcatalyst.io/) for a comprehensive overview of the services and solutions provided by the world's largest decentralized innovation engine for solving real-world challenges. + The portal on [cardano.ideascale.com](https://cardano.ideascale.com/) is where the Cardano community’s ideas come to life. Here, users can browse active campaigns, participate in discussions, and put forward their ideas for feedback and voting from the community. Built around ‘Active Campaigns’, the Project Catalyst Ideascale contains several categories of proposals that idea-makers and entrepreneurs can explore when making a proposal. These include classes like ‘DApps and Integrations’, ‘Local Community Centers’, ‘Developer Ecosystem’ proposals, and more. There are separate funds available for each category, and some classes already have well over 100 active proposals. Within each active campaign, you can find a campaign brief. This is a short explainer of what proposals should include, how to meet the campaign's requirements and some guiding questions for proposals. You will also find a stage flow that guides you through the timeline of each campaign. -If you click on ‘Browse Ideas’, you can see a [list of other proposals](https://cardano.ideascale.com/a/ideas/recent/campaign-filter/byids/campaigns/25873/stage/unspecified) that community members have already created. If you’re thinking of submitting a one, this is a great way to see what goes into a successful proposal and how you can position your proposal for maximum traction. For voters and community participants, this is also where you can join discussions or upvote your favourite proposal. +Discover a wealth of community-generated proposals by visiting one of the [idea explorers](#browse-funded-ideas) listed below. Explore existing proposals to gain valuable insights into what makes a successful proposal and how to position your submission for maximum impact. Whether you're considering submitting an idea or simply looking to engage with the community, this is the place to start. :::tip Catalyst Announcements The best way to keep up to date with Project Catalyst is to follow [the announcement channel on Telegram](https://t.me/cardanocatalyst). @@ -39,6 +41,7 @@ Download the Catalyst voting app in the [Apple Store](https://apps.apple.com/kg/ ## Previous Project Catalyst voting results +* [Project Catalyst Fund 9 Voting Results](https://drive.google.com/file/d/1HiI0fgiJWbirl2QEGNwiUbKLSQXqdxdv/view) * [Project Catalyst Fund 8 Voting Results](https://drive.google.com/file/d/1s3jCE7pmoUujy3ASMia-UhFl2KLi_hnf/view) * [Project Catalyst Fund 7 Voting Results](https://drive.google.com/file/d/193GZulHuk0zhpTrMiLhcNC4OeEMoRyIa/view) * [Project Catalyst Fund 6 Voting Results](https://drive.google.com/file/d/13h5JFtwqyylMUNMoRGXQZ-FJEM4bznOJ/view) @@ -59,10 +62,9 @@ Please join our different channels on Telegram, Discord and Forum to join our Ca * [Improving project Catalyst process on Ideascale](https://cardano.ideascale.com/a/campaign-home/25622) * [Cardano Project Catalyst Discord](https://discord.gg/TTZKB9M) * [Cardano Catalyst Community Site](https://cardanocataly.st/) - + ## Instruction guides -* [Basic community usage guide help articles for new users](https://intercom.help/ideascale/en/collections/2406712-new-user-guide) * [Project Catalyst Challenge and Proposal Guide](https://docs.google.com/document/d/1oE_cnP0gksdAanXV4w5DYaDNp_tbYEvyHhTUG4HYZ3Q/edit?usp=sharing) * [Proposal Assessor (formerly Community Advisor) Guide](https://docs.google.com/document/d/1g-iZhDlKhUBZkui1uv8NVNfJC4oVD3JtR-P6Fue7XPU/edit#heading=h.nvn8rjkdb8jh) @@ -72,6 +74,10 @@ Find common FAQ and the FAQ of previous funds on Project Catalyst: * [General Project Catalyst FAQ](https://cardanocataly.st/faq/) * [Project Catalyst FAQ + Timelines](https://iohk.zendesk.com/hc/en-us/articles/900006490763-Project-Catalyst-FAQ) +## Browse funded ideas + +* [Project Catalyst Website](https://projectcatalyst.io/search) +* [Catalyst Explorer by LIDO Nation](https://www.lidonation.com/en/project-catalyst/proposals) ## Alternative funding options diff --git a/docs/integrate-cardano/creating-wallet-faucet.md b/docs/integrate-cardano/creating-wallet-faucet.md index 3061afa633..f5cd9b4bd0 100644 --- a/docs/integrate-cardano/creating-wallet-faucet.md +++ b/docs/integrate-cardano/creating-wallet-faucet.md @@ -3,17 +3,17 @@ id: creating-wallet-faucet title: Exploring Cardano wallets sidebar_label: Exploring Cardano wallets description: This article explains how you can create different kinds of Cardano Wallets and how you can recieve some tAda(test ada) from the faucet. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ### Overview -In this guide, we will show you how to create a **Cardano** wallet, receive some `tAda` (**test ada**) in the `testnet` network and send basic example transactions. We will explore tools like `cardano-cli` and `cardano-wallet` on how they can help with these functionalities. +In this guide, we will show you how to create a **Cardano** wallet, receive some `tAda` (**test ada**) on a [testnet network](docs/get-started/testnets-and-devnets.md) and send basic example transactions. We will explore tools like `cardano-cli` and `cardano-wallet` on how they can help with these functionalities. :::note This guide assumes you have installed `cardano-node` and `cardano-cli` into your system. If not you can refer to [Installing cardano-node](/docs/get-started/installing-cardano-node) guide for instructions on how to do that. -You must also connect your `cardano-node` to the `testnet` network and make sure it is fully synchronized. +You must also connect your `cardano-node` to a testnet network and make sure it is fully synchronized. If you are not sure how to do that, It is recommended to read [Running cardano-node](/docs/get-started/running-cardano) guide before proceeding. ::: @@ -62,7 +62,7 @@ In this section, We will use the path `$HOME/cardano` to store all the `cardano- ::: :::important -Please make sure your `cardano-node` is connected and synchronized to the `testnet` network before proceeding. +Please make sure your `cardano-node` is connected and synchronized to a testnet network before proceeding. ::: :::warning @@ -125,7 +125,7 @@ Lets try to understand what these keys are used for in a very high-level overvie } ``` -Since we now have our **payment key-pair**, the next step would be to generate a **wallet address** for the `testnet` network like so: +Since we now have our **payment key-pair**, the next step would be to generate a **wallet address** for a testnet network like so: ```bash cardano-cli address build \ @@ -162,8 +162,8 @@ addr_test1vz95zjvtwm9u9mc83uzsfj55tzwf99fgeyt3gmwm9gdw2xgwrvsa5 :::note You can derive more than one **wallet address** from a **Public Verification Key** for more advanced use-cases using `cardano-addresses` component. Which we discuss in more details here: ***@TODO: link to article*** - - `mainnet` addresses are **prefixed** with the string value `addr1`. - - `testnet` addresses are **prefixed** with the string value `addr_test1`. + - Mainnet addresses are **prefixed** with the string value `addr1`. + - testnet addresses are **prefixed** with the string value `addr_test1`. If you want to create a wallet address to be used on `mainnet`, please use the `--mainnet` flag instead of `--testnet-magic 1097911063`. You can learn more about the different **Cardano** blockchain networks [here](/docs/get-started/running-cardano#mainnet--production). @@ -181,7 +181,7 @@ cardano-cli query utxo \ - `cardano-cli query utxo` : Queries the wallet address **UTXO**. -- `--testnet-magic 1097911063` : Specifies that we want to query the `testnet` **Cardano** network. +- `--testnet-magic 1097911063` : Specifies that we want to query a testnet **Cardano** network. - `--address $(cat $HOME/cardano/keys/payment1.addr)` : The **wallet address** string value that we want to query, In this case we read the contents of `$HOME/cardano/keys/payment1.addr` using the `cat` command and we pass that value to the `--address` flag. That means you could also directly paste the **wallet address** value like so: ``` @@ -485,7 +485,7 @@ We will use the path `$HOME/cardano/wallets` to store all the `cardano-wallet` r ::: :::important -Please make sure your `cardano-node` is connected and synchronized to the `testnet` network before proceeding. +Please make sure your `cardano-node` is connected and synchronized to a testnet network before proceeding. ::: :::warning @@ -514,9 +514,9 @@ cardano-wallet serve \ `--port` : Specifies the port that the web server will listen to for any requests. -> You can choose whatever `port` number you like, but it is recommended to use `port` numbers `1024` and above. See [Registered Port](https://www.sciencedirect.com/topics/computer-science/registered-port) for more information. +> You can choose whatever `port` number you like, but it is recommended to use `port` numbers `1024` and above. See [Registered Port](https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml) for more information. -`--testnet` : Specifies the **Byron** genesis file path for the `testnet` network. +`--testnet` : Specifies the **Byron** genesis file path for the testnet network. > This should match the genesis file that the `cardano-node` you are connected is using as-well. If you meant to connect to `mainnet` then use the `--mainnet` flag and the `mainnet` **Byron** genesis file instead. @@ -854,7 +854,7 @@ We now have the following wallets: | WalletId | Wallet Name | Balance(Lovelace) | | -------- | --------- | ---------- | | 5076b34c6949dbd150eb9c39039037543946bdce | test_cf_1 | 1000000000 | -| 4a64b453ad1c1d33bfec4d3ba90bd2456ede35bb | test_cf_2 | 0 | +| 4a64b453ad1c1d33bfec4d3ba90bd2456ede35bb | test_cf_2 | 0 | Now let's say that we want to send `250,000,000 lovelaces` to `test_cf_2` wallet. Well first we have to get `test_cf_2` wallet address like so: diff --git a/docs/integrate-cardano/listening-for-payments-cli.md b/docs/integrate-cardano/listening-for-payments-cli.md index 105e1134aa..458262e367 100644 --- a/docs/integrate-cardano/listening-for-payments-cli.md +++ b/docs/integrate-cardano/listening-for-payments-cli.md @@ -3,7 +3,7 @@ id: listening-for-payments-cli title: Listening for ada payments using cardano-cli sidebar_label: Receiving payments (cardano-cli) description: How to listen for ada Payments with the cardano-cli. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -13,7 +13,7 @@ import TabItem from '@theme/TabItem'; :::note This guide assumes that you have basic understanding of `cardano-cli`, how to use it and that you have installed it into your system. Otherwise we recommend reading [Installing cardano-node](/docs/get-started/installing-cardano-node), [Running cardano-node](/docs/get-started/running-cardano) and [Exploring Cardano Wallets](/docs/integrate-cardano/creating-wallet-faucet) guides first. -This guide also assumes that you have `cardano-node` running in the background and connected to the `testnet` network. +This guide also assumes that you have `cardano-node` running in the background and connected to a [eestnet network](docs/get-started/testnets-and-devnets.md). ::: ## Use case @@ -59,7 +59,7 @@ cardano-cli address key-gen \ --signing-key-file $HOME/receive-ada-sample/keys/payment.skey ``` -Since we now have our **payment key-pair**, the next step would be to generate a **wallet address** for the `testnet` network like so: +Since we now have our **payment key-pair**, the next step would be to generate a **wallet address** for a testnet network like so: ```bash cardano-cli address build \ @@ -103,7 +103,7 @@ import cmd from 'node-cmd'; // Path to the cardano-cli binary or use the global one const CARDANO_CLI_PATH = "cardano-cli"; -// The `testnet` identifier number +// The testnet identifier number const CARDANO_NETWORK_MAGIC = 1097911063; // The directory where we store our payment keys // assuming our current directory context is $HOME/receive-ada-sample @@ -122,7 +122,7 @@ const cmd: any = require('node-cmd'); // Path to the cardano-cli binary or use the global one const CARDANO_CLI_PATH: string = "cardano-cli"; -// The `testnet` identifier number +// The testnet identifier number const CARDANO_NETWORK_MAGIC: number = 1097911063; // The directory where we store our payment keys // assuming our current directory context is $HOME/receive-ada-sample/receive-ada-sample @@ -140,7 +140,7 @@ import subprocess # Path to the cardano-cli binary or use the global one CARDANO_CLI_PATH = "cardano-cli" -# The `testnet` identifier number +# The testnet identifier number CARDANO_NETWORK_MAGIC = 1097911063 # The directory where we store our payment keys # assuming our current directory context is $HOME/receive-ada-sample @@ -158,7 +158,7 @@ using SimpleExec; // `dotnet add package SimpleExec --version 7.0.0` // Path to the cardano-cli binary or use the global one const string CARDANO_CLI_PATH = "cardano-cli"; -// The `testnet` identifier number +// The testnet identifier number const int CARDANO_NETWORK_MAGIC = 1097911063; // The directory where we store our payment keys // assuming our current directory context is $HOME/user/receive-ada-sample @@ -498,7 +498,7 @@ const cmd: any = require('node-cmd'); // Path to the cardano-cli binary or use the global one const CARDANO_CLI_PATH: string = "cardano-cli"; -// The `testnet` identifier number +// The testnet identifier number const CARDANO_NETWORK_MAGIC: number = 1097911063; // The directory where we store our payment keys // assuming our current directory context is $HOME/receive-ada-sample/receive-ada-sample @@ -595,7 +595,7 @@ import subprocess # Path to the cardano-cli binary or use the global one CARDANO_CLI_PATH = "cardano-cli" -# The `testnet` identifier number +# The testnet identifier number CARDANO_NETWORK_MAGIC = 1097911063 # The directory where we store our payment keys # assuming our current directory context is $HOME/receive-ada-sample @@ -784,7 +784,7 @@ You should see the **wallet address** value: addr_test1vpfkp665a6wn7nxvjql5vdn5g5a94tc22njf4lf98afk6tgnz5ge4 ``` -Now simply send atleast `1,000,000 lovelace` to this **wallet address** or request some `test ada` funds from the [Cardano Testnet Faucet](../integrate-cardano/testnet-faucet). Once complete, we can now run the code again and we should see a successful result this time. +Now simply send atleast `1,000,000 lovelace` to this **wallet address** or request some `test ada` funds from the [Cardano Testnet Faucet](https://docs.cardano.org/cardano-testnet/tools/faucet). Once complete, we can now run the code again and we should see a successful result this time. +1. Please follow [Get Started with Blockfrost](../get-started/blockfrost/get-started.md) to obtain Blockfrost API key +2. In the code, go to environment file `.env.local` and put the key into `BLOCKFROST_API_KEY`. + + +#### Get CoinMarketCap Key + +1. Go to [CoinMarketCap](https://pro.coinmarketcap.com/login/) and sign in to your account. +2. Once you're signed in, navigate to your dashboard. +3. Copy API Key. +6. In the code, go to environment file `.env.local` and put the key into `COINMARKETCAP_API_KEY`. + +### Adding Constants + +Before creating any API requests, it is important to add constants such as base URLs and endpoints. These constants will be used throughout the project and will make it easier to make changes or updates in the future. + +Navigate to `constants` folder, create `links.js` file and insert the following based on network you will be using: + + + + + +```js +export const LINKS = { + CARDANO_SCAN: "https://preview.cardanoscan.io/address/", + BLOCKFROST_ADDRESS: "https://cardano-preview.blockfrost.io/api/v0/addresses/", + COINMARKETCAP_ADA_USD_PAIR: + "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=ADA&convert=USD", +}; +``` + + + + + +```js +export const LINKS = { + CARDANO_SCAN: "https://preprod.cardanoscan.io/address/", + BLOCKFROST_ADDRESS: "https://cardano-preprod.blockfrost.io/api/v0/addresses/", + COINMARKETCAP_ADA_USD_PAIR: + "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=ADA&convert=USD", +}; +``` + + + + + +```js +export const LINKS = { + CARDANO_SCAN: "https://cardanoscan.io/address/", + BLOCKFROST_ADDRESS: "https://cardano-mainnet.blockfrost.io/api/v0/addresses/", + COINMARKETCAP_ADA_USD_PAIR: + "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=ADA&convert=USD", +}; +``` + + + + + +### Creating API files + +In `api` folder create `blockfrost.js` file and insert the following code: + +```js +import { LINKS } from "../../constants/links"; + +export default async function handler(req, res) { + const { address } = req.query; + const projectId = process.env.BLOCKFROST_API_KEY; + const url = LINKS.BLOCKFROST_ADDRESS + address + "/total"; + + const response = await fetch(url, { + headers: { + "Content-Type": "application/json", + project_id: projectId, + }, + }); + + const data = await response.json(); + + res.status(200).json({ value: data }); +} +``` +In this file, we are creating an API request to `Blockfrost` using personal key. We use constant link address and submit `projectId` to get a `data` response. + +Now let’s do the same with CoinMarketCap. Add `coinmarketcap.js` file into `api` folder to receive pair data: + +```js +import { LINKS } from "../../constants/links"; + +export default async function handler(req, res) { + const url = LINKS.COINMARKETCAP_ADA_USD_PAIR; + + const response = await fetch(url, { + headers: { + "X-CMC_PRO_API_KEY": process.env.COINMARKETCAP_API_KEY, + }, + }); + + const data = await response.json(); + const adaPrice = data.data.ADA.quote.USD.price; + + res.status(200).json({ value: adaPrice }); +} +``` + + In this file, we are creating another API request to `CoinMarketCap` to receive price of 1 ada in USD. + +### Connecting APIs + +Now that all of the APIs are set up and ready to be used, it's time to move onto the `index.js` file and start adding the necessary functionalities and API requests. + +To fetch the `ada-usd` price upon loading the page, we need to add the `fetchAdaPrice` and `useEffect` functions to the `index.js` file: + +```js + // Fetch ada price from CoinMarketCap + const fetchAdaPrice = async () => { + fetch("/api/coinmarketcap") + .then((response) => { + if (!response.ok) { + throw new Error("Network response was not ok"); + } + return response.json(); + }) + .then((data) => setAdaValue(data.value)) + .catch((error) => console.error("Error:", error)); + }; + + useEffect(() => { + const fetchPrice = async () => { + await fetchAdaPrice(); + }; + fetchPrice(); + }, []); +``` + +This code will make an API request to retrieve the current price and display it on the page for the user to see. The `fetchAdaPrice` function will perform an API request to CoinMarketCap and set the `adaValue` state with the current value. Later on, in the return statement, the calculated value based on the input amount will be displayed as: + +```js +{amount} $ = {(amount / adaValue).toFixed(2)} ₳ +``` + +## Connecting Blockfrost API to Popup + +Next, we will add some Blockfrost API requests to the popup to compare the inserted address balance and see if the transaction went through successfully. + +Navigate to `components` folder into `popup.js`. The current popup generates a QR code for users to scan, which redirects with a [CIP-13](../governance/cardano-improvement-proposals/CIP-0013.md) URI guidelines and automatically fills in the details for the transaction, such as the address and the amount to be sent. For now, the application does not connect to the API, so we need to add a few functions to ensure application able to retrieve the necessary data from the API. + +First, lets add `fetchAddressQuantityOnOpen` function to fetch balance of the address: + +```js + // Fetch balance of ada in the address when opening popup + const fetchAddressQuantityOnOpen = async () => { + address.length && + fetch(`/api/blockfrost?address=${address}`) + .then((response) => { + if (!response.ok) { + throw new Error("Network response was not ok"); + } + return response.json(); + }) + .then((data) => { + if (data.value.received_sum) { + setBalance(data.value.received_sum[0].quantity / 1000000); + } + }) + .catch((error) => console.error("Error:", error)); + }; +``` +This function will store current balance in the store called `balance`. + +Now let’s create another function called `CompareQuantity` that fetches address balance but checks it every few seconds: + +```js + // Fetch balance of ada in the address every few seconds to compare it with the initial balance from fetchAddressQuantityOnOpen() + const CompareQuantity = async () => { + fetch(`/api/blockfrost?address=${address}`) + .then((response) => { + if (!response.ok) { + throw new Error("Network response was not ok"); + } + return response.json(); + }) + .then((data) => { + if (data.value.received_sum) { + setNewBalance(data.value.received_sum[0].quantity / 1000000); + } + }) + .catch((error) => console.error("Error:", error)); + }; + + // Fetch ada balance every 3 seconds + useEffect(() => { + address && fetchAddressQuantityOnOpen(address); + const interval = + address && + setInterval(() => { + const result = CompareQuantity(address); + return result; + }, 3000); + return () => clearInterval(interval); + }, [address]); +``` + +This function will store new balance in the store called `newBalance` state and using `useEffect` will continue fetching data every few seconds. + +Later on in the code, we compare `balance` and `newBalance` states. If `newBalance` is greater or equal by the `amount` requested, the `Waiting for payment…` will be changed to `Payment received successfully` + +Here it how it looks: + +```html + {newBalance - balance >= amount ? ( + + Payment received successfully + + ) : ( + + Waiting for payment... + + )} +``` + +#### Adding CardanoScan Redirect + +To add a redirect to CardanoScan in the `href` attribute of our popup component, we need to add the following code into our application. + +```js +import { LINKS } from "../constants/links"; +``` + +Locate into `return` section and uncomment the following section: + +```js + + {address.substring(0, 30) + "..."} + +``` + + +Congratulations! Your Point of Sale application using Cardano is now fully functional and ready to use. You can test it by entering an amount and address into the inputs, scanning the generated QR code, performing a transaction and waiting for confirmation on the popup screen. diff --git a/docs/integrate-cardano/testnet-faucet.md b/docs/integrate-cardano/testnet-faucet.md index 258a028ca9..58a1210e7d 100644 --- a/docs/integrate-cardano/testnet-faucet.md +++ b/docs/integrate-cardano/testnet-faucet.md @@ -2,25 +2,33 @@ id: testnet-faucet title: Testnet Faucet sidebar_label: Testnet Faucet -description: Request some test ada (tAda) from the Cardano testnet faucet. -image: ../img/og-developer-portal.png +description: Request some test ada (tAda) from the Cardano Testnet Faucet. +image: /img/og/og-developer-portal.png --- -The testnet faucet is a service that provides test ada (tAda) to users of the Cardano testnet. These tokens have no value, but they enable users to experiment with Cardano testnet features without spending real ada on the mainnet. You can use test ada to [mint native tokens](../native-tokens/minting), to [play around with Cardano wallets](creating-wallet-faucet) or to [learn how to operate a stake pool](../operate-a-stake-pool/). - -## How to get test ada -1. Default funds are in `tAda`. If you'd like to test the native token functionality, select `Testcoin` from the dropdown menu. -1. Enter the address of the account where you want to top up funds. -1. If you have been issued with an API key, please enter this to access any additional funds you may have been allocated. -1. Confirm the `I'm not a robot` box and solve the captcha if needed. -1. Click on `Request` and the funds will be in the testnet account you specified within a few minutes. Use the [Cardano testnet explorer](https://explorer.cardano-testnet.iohkdev.io/) in case you want to check any transactions on the Cardano testnet. - -
- -
+The Testnet Faucet is a service that provides test ada (tAda) to users of the Cardano testnets. These tokens have no value, but they enable users to experiment with Cardano testnet features without spending real ada on the Mainnet. You can use test ada to [mint native tokens](../native-tokens/minting), to [play around with Cardano wallets](creating-wallet-faucet) or to [learn how to operate a stake pool](../operate-a-stake-pool/). +## Testnets faucet +This portal allows you to send test ada to your wallet. You can access it [here](https://docs.cardano.org/cardano-testnet/tools/faucet). :::note Return the test ada Send your test tokens to this address: `addr_test1qqr585tvlc7ylnqvz8pyqwauzrdu0mxag3m7q56grgmgu7sxu2hyfhlkwuxupa9d5085eunq2qywy7hvmvej456flknswgndm3` -::: \ No newline at end of file +::: + +## How to get test ada +1. Define your environment. You can get tada for either the `preview` or `preprod` testnets. +2. Define your action. Select `Receive test ADA` in this case. You can also ask for `pool delegation` if you are managing a pool (learn [more](https://developers.cardano.org/docs/operate-a-stake-pool/)). +3. Enter the address of the account where you want to top up funds. +4. If you have been issued with an API key, please enter this to access any additional funds you may have been allocated. +5. Confirm the `I'm not a robot` box and solve the captcha if needed. +6. Click on `Request` and the funds will be in the testnet account you specified within a few minutes. Use the [Cardano Testnet Explorer](https://explorer.cardano-testnet.iohkdev.io/) in case you want to check any transactions on a Cardano testnet. + + + + + + + diff --git a/docs/integrate-cardano/user-wallet-authentication.md b/docs/integrate-cardano/user-wallet-authentication.md new file mode 100644 index 0000000000..6883d33225 --- /dev/null +++ b/docs/integrate-cardano/user-wallet-authentication.md @@ -0,0 +1,246 @@ +--- +id: user-wallet-authentication +title: Authenticating users with their Cardano wallet +sidebar_label: User wallet authentication +description: Full example on authenticating users on the web with their Cardano wallet. +image: /img/og/og-developer-portal.png +--- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## Overview + +This guide is a walthrough on how to implement the *message signing* described in [CIP-08](/docs/governance/cardano-improvement-proposals/CIP-0008) in order to authenticate users on the web with just their [CIP-30](/docs/governance/cardano-improvement-proposals/CIP-0030)-compatible wallet app. + +:::note + +There are 2 components used in this guide — the front-end and the back-end. In order to implement this example, a [nodejs](https://nodejs.org) server is needed to run the back-end component that will receive and process the signed message submitted by the user. + +::: + +## Use cases + +The following are a just some examples of where this implementation can be used: + +1. Authenticating holders of a specific native token in order to grant access to exclusive content or service +1. Authenticating wallet or stake address owners for registration to some whitelist +1. Authenticating wallet or stake address owners when claiming native token rewards + +## Time to code + +As mentioned above, there are 2 components in this example - the front-end and the back-end. Our front-end code will handle our interaction with the user, to prompt them to sign some message with their wallet. The signed message will then be submitted to our back-end component which will parse the message and verify the user's signature. + +In this example, we will be asking the user to sign a simple text message containing the string `account: `, followed by their wallet's bech32 stake address. For example: + +`account: stake1uynpv0vlulhufm8txwry0da9qq6tn9wn42mxltq65pw403qvdcveh` + +Our purpose in this case is for the user to prove their ownership of the given stake address. + +Also for simplicity, we will be interacting with [Typhon Wallet](https://typhonwallet.io) only, in this example. But the concepts shown here should work with any other [CIP-30](/docs/governance/cardano-improvement-proposals/CIP-0030)-compliant wallet app. + +### Front-end + +For brevity, our front-end component will just be an HTML page containing a single button which will start the process, when clicked by the user. + +```html title="index.html" + + + Authenticating users with their Cardano wallet + + + + + + +``` + +The logic to handle the click event on the above button will be in a separate Javascript file. This is what we will really be working on for the front-end component. Let's start with the following: + +```js title="userWalletAuth.js" +window.addEventListener("load", () => { + const loginBtn = document.querySelector("#login-btn"); + loginBtn.addEventListener("click", authenticate); +}) + +async function authenticate(){ + // +} +``` + +For now, we just attached an event listener to our button, which will call the function `authenticate` when clicked. + +Before we go on to add functionality to `authenticate` and anything else, we have to first import a couple of dependencies. Let's add the following to the top of `userWalletAuth.js`: + +```js title="userWalletAuth.js" +import { Buffer } from "buffer"; +let csl, wallet; + +async function loadCsl(){ + csl = await import("@emurgo/cardano-serialization-lib-browser/cardano_serialization_lib"); +}; +loadCsl(); + +... +``` + +With the above lines, we just made available to the rest of our script, the [Buffer](https://www.npmjs.com/package/buffer) package and the [Cardano Serialization Library](/docs/get-started/cardano-serialization-lib/overview). Also, we just declared the top-level variable `wallet` there for convenience later. We will set its value in the following steps. + +Now, let's make the `authenticate` function actually do some things: + +```js title="userWalletAuth.js" +... + +async function authenticate(){ + if (!csl) await loadCsl(); // make sure CSL is loaded before doing anything else. + + wallet = await window.cardano.typhoncip30.enable(); + + const [stakeAddrHex, stakeAddrBech32] = await getStakeAddress(); + const messageUtf = `account: ${stakeAddrBech32}`; + const messageHex = Buffer.from(messageUtf).toString("hex"); + const sigData = await wallet.signData(stakeAddrHex, messageHex); + const result = await submitToBackend(sigData); + alert(result.message); +} +``` + +Our `authenticate` function now gets the user's stake address both in hex and bech32 format. It then puts together the message that we'll ask the user to sign. After converting the message into a hex string, we call the `signData` method on the user's wallet to prompt the user to sign. When we get the signed message, we send it to our backend component to be processed and verified. + +You'll notice that we called two more functions from the `authenticate` function. We have to add them to our code also: + +```js title="userWalletAuth.js" +... + +async function getStakeAddress(){ + const networkId = await wallet.getNetworkId(); + const changeAddrHex = await wallet.getChangeAddress(); + + // derive the stake address from the change address to be sure we are getting + // the stake address of the currently active account. + const changeAddress = csl.Address.from_bytes( Buffer.from(changeAddrHex, 'hex') ); + const stakeCredential = csl.BaseAddress.from_address(changeAddress).stake_cred(); + const stakeAddress = csl.RewardAddress.new(networkId, stakeCredential).to_address(); + + return [stakeAddress.to_hex(), stakeAddress.to_bech32()]; +} + +async function submitToBackend(sigData){ + const result = await fetch(`http://localhost:8081/login`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(sigData), + }); + return result.json(); +} +``` + +That completes our front-end code. It can be viewed in full [here](https://github.com/inimrod/cardano-message-signing-demo/blob/main/frontend/js/userWalletAuth.js). + + +### Back-end + +For our back-end, let's create a file named `server.js` and first, we will import the dependencies we need: + +```js title="server.js" +const { Buffer } = require("buffer"); +const { COSESign1, COSEKey, BigNum, Label, Int } = require("@emurgo/cardano-message-signing-nodejs"); +const { Ed25519Signature, RewardAddress, PublicKey, Address } = require("@emurgo/cardano-serialization-lib-nodejs"); +const express = require("express"); +const cors = require("cors"); +``` + +Here, we will be creating just a simple [Express JS](https://expressjs.com) server that can receive our `POST` request from our front-end. Along with the others, we imported a few required classes from the `cardano-message-signing` and `cardano-serialization-lib` packages. + +Now let's add a sample list of "registered users" of our app, identified by their stake addresses: + +```js title="server.js" +... + +const registeredUsers = [ + "stake1uyzu7upg082rqajwasmwgam09fe7yj2cm3fkdfecqgptg8cwuze7s", + "stake1u8k7mwu8gdqyvgved89996cy6g8d9vw36w7j05qy2etanxgmgl5s7", + "stake1uynpv0vlulhufm8txwry0da9qq6tn9wn42mxltq65pw403qvdcveh", + "stake1uxa2x4andawqtcqxw9gy4mamdx6extq5g5grqq6pf7zpxxge4aa7l", + "stake1ux8yttnhy6qm9lkehvnmlhufnx38ef2q8vl6xyu8gyk0zwc83nvxh", + "stake1uykkptznwz0jd3flwa442a0cdmfrpwhg8pa9ypytf4cwacqw2085c" +] +``` + +Next, we create our `express` server with one endpoint to receive the request from our front-end: + +```js title="server.js" +... + +const app = express(); +app.use(express.json()); +app.options("*", cors()); +app.use(cors({ + origin: "*" +})); + +app.post("/login", authenticate); +app.listen(8081, () => + console.log("Backend component listening on port 8081!"), +); +``` + +The above code adds the `/login` endpoint which fires up the `authenticate` handler function. Now let's add that function: + +```js title="server.js" +... + +async function authenticate(req, res) { + const sigData = req.body; + const decoded = COSESign1.from_bytes( Buffer.from(sigData.signature, "hex") ); + const headermap = decoded.headers().protected().deserialized_headers(); + const addressHex = Buffer.from( headermap.header( Label.new_text("address") ).to_bytes() ) + .toString("hex") + .substring(4); + const address = Address.from_bytes( Buffer.from(addressHex, "hex") ); + + const key = COSEKey.from_bytes( Buffer.from(sigData.key, "hex") ); + const pubKeyBytes = key.header( Label.new_int( Int.new_negative(BigNum.from_str("2")) ) ).as_bytes(); + const publicKey = PublicKey.from_bytes(pubKeyBytes); + + const payload = decoded.payload(); + const signature = Ed25519Signature.from_bytes(decoded.signature()); + const receivedData = decoded.signed_data().to_bytes(); + + const signerStakeAddrBech32 = RewardAddress.from_address(address).to_address().to_bech32(); + const utf8Payload = Buffer.from(payload).toString("utf8"); + const expectedPayload = `account: ${signerStakeAddrBech32}`; // reconstructed message + + // verify: + const isVerified = publicKey.verify(receivedData, signature); + const payloadAsExpected = utf8Payload == expectedPayload; + const signerIsRegistered = registeredUsers.includes(signerStakeAddrBech32); + + const isAuthSuccess = isVerified && payloadAsExpected && signerIsRegistered; + + res.send({ + success: isAuthSuccess, + message: isAuthSuccess ? "✅ Authentication success!" : "❌ Authentication failed." + }) +} +``` + +Let's unpack what happened there. + +First, we decoded the serialized signature that was submitted by the user. From the headers of this decoded data, we got the address of the signer. We later convert it back to its bech32 format to reconstruct our expected message string. + +We then created a `PublicKey` instance of the `key` that came together with the signature sent by the user. We later use this to verify the submitted signature. + +We also parsed the `payload` from the decoded signature data. After reconstructing our expected message string, we compare it with the `payload` we actualy received. + +Since we already have the signer's stake address, we also checked it against our `registeredUsers` list. + +Lastly, we send a response back to the user with a success message if all three checks where passed and a failure message if otherwise. + +That completes our backend component. The full code can be viewed [here](https://github.com/inimrod/cardano-message-signing-demo/blob/main/backend/server.js). + + +### Demo project repository + +For quick and convenient testing of the above code, a demo project is available [here](https://github.com/inimrod/cardano-message-signing-demo) that can be cloned and quickly run. diff --git a/docs/native-tokens/cardano-token-registry.md b/docs/native-tokens/cardano-token-registry.md index 785a7f697a..7be57b5cb6 100644 --- a/docs/native-tokens/cardano-token-registry.md +++ b/docs/native-tokens/cardano-token-registry.md @@ -3,7 +3,7 @@ id: cardano-token-registry title: Cardano Token Registry sidebar_label: Token Registry description: The Cardano Token Registry provides a means to register off-chain token metadata that can map to on-chain identifiers. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- The [Cardano Token Registry](https://github.com/cardano-foundation/cardano-token-registry) provides a means to register off-chain token metadata to map to on-chain identifiers (typically hashes representing asset IDs, output locking scripts, or token forging policies). diff --git a/docs/native-tokens/minting-nfts.md b/docs/native-tokens/minting-nfts.md index a000076350..d658bab92b 100644 --- a/docs/native-tokens/minting-nfts.md +++ b/docs/native-tokens/minting-nfts.md @@ -3,10 +3,10 @@ id: minting-nfts title: Minting NFTs sidebar_label: Minting NFTs description: How to mint NFTs on Cardano. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- - - +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; :::note There are many ways to realize NFTs with Cardano. However, in this guide, we will concentrate on the most dominant way, to attach storage references of other services like [IPFS](https://ipfs.io/) to our tokens. @@ -102,12 +102,35 @@ Apart from the same requisites as on the [minting native assets](minting.md) gui We recommend upload images to IPFS as it is the most common decentralized storage service. There are alternatives, but IPFS has the biggest adoption in terms of how many NFTs got minted. ::: -## Setup +## Lets get started Since the creation of native assets is documented extensively in the [minting](minting.md) chapter, we won't go into much detail here. Here's a little recap and needed setup ### Working directory -First of all, we are going to set up a new working directory and change into it. + +:::note +Minting course is available in three different versions, which are the Preview Testnet, Pre-Production Testnet, and Mainnet. +::: + + + + + + + + + + + + +First of all, we are going to set up a new working directory and change into it: ```bash mkdir nft @@ -117,7 +140,7 @@ cd nft/ ### Set variables We will set important values in a more readable variable for better readability and debugging of failed transactions. -Since cardano-node version 1.31.0 the token name should be in hex format. We will set the variable $realtokenname (real name in utf-8) and then convert it to $tokenname (name in hex format). +Since cardano-node version 1.31.0 the token name should be in hex format. We will set the variable $realtokenname (real name in utf-8) and then convert it to $tokenname (name in hex format): ```bash realtokenname="NFT1" tokenname=$(echo -n $realtokenname | xxd -b -ps -c 80 | tr -d '\n') @@ -134,19 +157,50 @@ The IPFS hash is a key requirement and can be found once you upload your image t ### Generate keys and address -We will be generating new keys and a new payment address: +Each NFT is a unique asset and it is important to maintain the security and privacy of the asset and its associated funds. We will be generating new keys and a new payment address: ```bash cardano-cli address key-gen --verification-key-file payment.vkey --signing-key-file payment.skey ``` -Those two keys can now be used to generate an address. +Those two keys can now be used to generate an address: + + + + + + ```bash + cardano-cli address build --payment-verification-key-file payment.vkey --out-file payment.addr --testnet-magic 2 + ``` + + + + + +```bash +cardano-cli address build --payment-verification-key-file payment.vkey --out-file payment.addr --testnet-magic 1 +``` + + + + ```bash cardano-cli address build --payment-verification-key-file payment.vkey --out-file payment.addr --mainnet ``` -We will save our address hash in a variable called address. + + + + +We will save our address hash in a variable called address: ```bash address=$(cat payment.addr) @@ -159,11 +213,58 @@ Sending native assets requires sending at least 1 ada. So make sure the address you are going to use as the input for the minting transaction has sufficient funds. For our example, the newly generated address was funded with 10 ada. +Use the address you just generated and send ada to it. To find and copy the address use the following command: + +```bash +cat payment.addr +``` + +You will see something similar to this: +```bash +addr_test1vzm8e7stya3kzp85zu2jqqj99sqnx268a3ew2k90n7gs36c5fte8v +``` + +:::note +Because the Cardano testnet is an independent network, separate from the Cardano mainnet, it requires its own token: test ada (tAda). + +To get free test ada, you need to visit: [Cardano Testnet Faucet](https://docs.cardano.org/cardano-testnet/tools/faucet). +::: + +To check if the address has successfully received the funds, use the following command: + + + + + +```bash +cardano-cli query utxo --address $address --testnet-magic 2 +``` + + + + +```bash +cardano-cli query utxo --address $address --testnet-magic 1 +``` + + + + ```bash cardano-cli query utxo --address $address --mainnet ``` + -You should see something like this. + + +You should see something like this: ```bash TxHash TxIx Amount -------------------------------------------------------------------------------------- @@ -173,12 +274,43 @@ You should see something like this. For our transaction calculations, we need some of the current protocol parameters. The parameters can be saved in a file called `protocol.json` with this command: + + + + +```bash +cardano-cli query protocol-parameters --testnet-magic 2 --out-file protocol.json +``` + + + + + +```bash +cardano-cli query protocol-parameters --testnet-magic 1 --out-file protocol.json +``` + + + + + ```bash cardano-cli query protocol-parameters --mainnet --out-file protocol.json ``` + + + + ### Creating the policyID -Just as in generating native assets, we will need to generate some policy-related files like key pairs and a policy script. +Just as in generating native assets, we will need to generate some policy-related files like key pairs and a policy script: ```bash mkdir policy @@ -223,7 +355,60 @@ For this specific purpose `policy.script` file which will look like this: As you can see, we need to adjust two values here, the `slot` number as well as the `keyHash`. To set everything at once and copy and paste it, use this command(s): -**You need to have the `jq` installed to parse the tip correctly!** +**You need to have the `jq` installed to parse the tip correctly:** + + + + + +```bash +echo "{" >> policy/policy.script +echo " \"type\": \"all\"," >> policy/policy.script +echo " \"scripts\":" >> policy/policy.script +echo " [" >> policy/policy.script +echo " {" >> policy/policy.script +echo " \"type\": \"before\"," >> policy/policy.script +echo " \"slot\": $(expr $(cardano-cli query tip --testnet-magic 2 | jq .slot?) + 10000)" >> policy/policy.script +echo " }," >> policy/policy.script +echo " {" >> policy/policy.script +echo " \"type\": \"sig\"," >> policy/policy.script +echo " \"keyHash\": \"$(cardano-cli address key-hash --payment-verification-key-file policy/policy.vkey)\"" >> policy/policy.script +echo " }" >> policy/policy.script +echo " ]" >> policy/policy.script +echo "}" >> policy/policy.script +``` + + + + + +```bash +echo "{" >> policy/policy.script +echo " \"type\": \"all\"," >> policy/policy.script +echo " \"scripts\":" >> policy/policy.script +echo " [" >> policy/policy.script +echo " {" >> policy/policy.script +echo " \"type\": \"before\"," >> policy/policy.script +echo " \"slot\": $(expr $(cardano-cli query tip --testnet-magic 1 | jq .slot?) + 10000)" >> policy/policy.script +echo " }," >> policy/policy.script +echo " {" >> policy/policy.script +echo " \"type\": \"sig\"," >> policy/policy.script +echo " \"keyHash\": \"$(cardano-cli address key-hash --payment-verification-key-file policy/policy.vkey)\"" >> policy/policy.script +echo " }" >> policy/policy.script +echo " ]" >> policy/policy.script +echo "}" >> policy/policy.script +``` + + + + ```bash echo "{" >> policy/policy.script @@ -242,7 +427,13 @@ echo " ]" >> policy/policy.script echo "}" >> policy/policy.script ``` -**If this command is not working, please set the key hash and correct slot manually.** + + + + +:::caution +If this command is not working, please set the key hash and correct slot manually. Otherwise skip to `slotnumber` command few rows down below. +::: To generate the `keyHash`, use the following command: ```bash @@ -250,15 +441,47 @@ cardano-cli address key-hash --payment-verification-key-file policy/policy.vkey ``` To calculate the correct slot, query the current slot and add 10000 to it: + + + + + +```bash +cardano-cli query tip --testnet-magic 2 +``` + + + + + +```bash +cardano-cli query tip --testnet-magic 1 +``` + + + + + ```bash cardano-cli query tip --mainnet ``` -Make a new file called policy.script in the policy folder + + + + +Make a new file called policy.script in the policy folder: ```bash touch policy/policy.script ``` -Paste the JSON from above, populated with your `keyHash` and your `slot` number into it +Paste the JSON from above, populated with your `keyHash` and your `slot` number into it: ```bash nano policy/policy.script ``` @@ -267,13 +490,13 @@ nano policy/policy.script Be aware the slot number is defined as an integer and therefore needs no double quotation marks, whereas the `keyHash` is defined as a string and needs to be wrapped in double quotation marks. ::: -Please take note of your slot number and save it in a variable. +Please take note of your slot number and save it in a variable. Slot number can be found inside of `policy.script` file: ```bash slotnumber="Replace this with your slot number" ``` -And save the location of the script file into a variable as well. +And save the location of the script file into a variable as well: ```bash script="policy/policy.script" @@ -309,9 +532,7 @@ Here’s an example of the metadata.json which we’ll use for this guide: The third element in the hierarchy needs to have the same name as our NFT native asset. ::: -Save this file as `metadata.json`. - -If you want to generate it "on the fly," use the following commands: +To save this file as `metadata.json` use the following command: ```bash echo "{" >> metadata.json @@ -339,10 +560,41 @@ Let's begin building our transaction. Before we start, we will again need some setup to make the transaction building easier. Query your payment address and take note of the different values present. + + + + +```bash +cardano-cli query utxo --address $address --testnet-magic 2 +``` + + + + + +```bash +cardano-cli query utxo --address $address --testnet-magic 1 +``` + + + + + ```bash cardano-cli query utxo --address $address --mainnet ``` + + + + Your output should look something like this (fictional example): ```bash @@ -351,7 +603,7 @@ Your output should look something like this (fictional example): b35a4ba9ef3ce21adcd6879d08553642224304704d206c74d3ffb3e6eed3ca28 0 1000000000 lovelace ``` -Since we need each of those values in our transaction, we will store them individually in a corresponding variable. +Since we need each of those values in our transaction, we will store them individually in a corresponding variable: ```bash txhash="insert your txhash here" @@ -363,7 +615,7 @@ output=1400000 Here we are setting the `output` value to `1400000` Lovelace which is equivalent to `1.4` ADA. This amount is used because this is the minimum UTxO requirement. -If you're unsure, check if all of the other needed variables for the transaction are set: +If you're unsure, check if all of the other needed variables for the transaction are set, each `echo` should return a value, if something is missing please make sure to go over all of the previous steps: ```bash echo $fee @@ -378,6 +630,55 @@ echo $script If everything is set, run the following command: + + + + +```bash +cardano-cli transaction build \ +--testnet-magic 2 \ +--alonzo-era \ +--tx-in $txhash#$txix \ +--tx-out $address+$output+"$tokenamount $policyid.$tokenname" \ +--change-address $address \ +--mint="$tokenamount $policyid.$tokenname" \ +--minting-script-file $script \ +--metadata-json-file metadata.json \ +--invalid-hereafter $slotnumber \ +--witness-override 2 \ +--out-file matx.raw +``` + + + + + +```bash +cardano-cli transaction build \ +--testnet-magic 1 \ +--alonzo-era \ +--tx-in $txhash#$txix \ +--tx-out $address+$output+"$tokenamount $policyid.$tokenname" \ +--change-address $address \ +--mint="$tokenamount $policyid.$tokenname" \ +--minting-script-file $script \ +--metadata-json-file metadata.json \ +--invalid-hereafter $slotnumber \ +--witness-override 2 \ +--out-file matx.raw +``` + + + + + ```bash cardano-cli transaction build \ --mainnet \ @@ -393,7 +694,11 @@ cardano-cli transaction build \ --out-file matx.raw ``` -The above command may generate output as per below: + + + + +The above command will generate output as per below: ```bash Minimum required UTxO: Lovelace 1448244 @@ -415,7 +720,7 @@ Estimated transaction fee: Lovelace 176677 __NOTE__: Its possible that the Lovelace value for you is different. -Sign the transaction +Sign the transaction: ```bash cardano-cli transaction sign \ @@ -429,30 +734,139 @@ cardano-cli transaction sign \ The signed transaction will be saved in a new file called matx.signed instead of matx.raw. ::: +### Submit the transaction + Now we are going to submit the transaction, therefore minting our native assets: + + + + + +```bash +cardano-cli transaction submit --tx-file matx.signed --testnet-magic 2 +``` + + + + + +```bash +cardano-cli transaction submit --tx-file matx.signed --testnet-magic 1 +``` + + + + + ```bash cardano-cli transaction submit --tx-file matx.signed --mainnet +``` + + + + + +If everything is correcrt you should a message like this: + +```bash +Transaction successfully submitted ``` Congratulations, we have now successfully minted our own token. -After a couple of seconds, we can check the output address +After a couple of seconds, we can check the output address. + + + + + +```bash +cardano-cli query utxo --address $address --testnet-magic 2 +``` + + + + + +```bash +cardano-cli query utxo --address $address --testnet-magic 1 +``` + + + + + ```bash cardano-cli query utxo --address $address --mainnet ``` + + + + and should see something like this: +```bash +   TxHash TxIx Amount +-------------------------------------------------------------------------------------- +e86535386ecd803d061a923c0da1fad82f46b0f2e3fdd766fb23e7f1b490a0e8 0 1518558 lovelace + 1 ad79da159614ff55130b3a28189fbe5c429c0dfc1c0aeaf94a1de95e.4b6964646f7330373138 + TxOutDatumNone +``` ### Displaying your NFT -One of the most adopted NFT browsers is [pool.pm](https://pool.pm/tokens). -Enter your address in the search bar, hit enter, and your NFT will be displayed with all its attributes and the corresponding image. + + + + + One of the most adopted NFT browsers with testnet supported is [pool.pm](https://pool.pm/test/metadata). + + Copy metadata from `metadata.json` file into the field and your NFT will be displayed with all its attributes and the corresponding image. + + ![img](../../static/img/nfts/poolpm_nft_testnet.png) + + + -![img](../../static/img/nfts/poolpm_nft.png) + One of the most adopted NFT browsers with testnet supported is [pool.pm](https://pool.pm/test/metadata). + + Copy metadata from `metadata.json` file into the field and your NFT will be displayed with all its attributes and the corresponding image. + ![img](../../static/img/nfts/poolpm_nft_testnet.png) -You can check it out yourself and see the NFT created for this tutorial [here](https://pool.pm/6574f051ee0c4cae35c0407b9e104ed8b3c9cab31dfb61308d69f33c.NFT1). + + + + One of the most adopted NFT browsers is [pool.pm](https://pool.pm/tokens). + Enter your address in the search bar, hit enter, and your NFT will be displayed with all its attributes and the corresponding image. + + ![img](../../static/img/nfts/poolpm_nft.png) + + You can check it out yourself and see the NFT created for this tutorial [here](https://pool.pm/6574f051ee0c4cae35c0407b9e104ed8b3c9cab31dfb61308d69f33c.NFT1). + + + + ## Burn your token @@ -471,20 +885,113 @@ Here we are setting the `output` value to `1400000` Lovelace which is equivalent The transaction looks like this: + + + + +```bash +cardano-cli transaction build --testnet-magic 2 --alonzo-era --tx-in $txhash#$txix --tx-out $address+$burnoutput --mint="-1 $policyid.$tokenname" --minting-script-file $script --change-address $address --invalid-hereafter $slot --witness-override 2 --out-file burning.raw +``` + + + + + +```bash +cardano-cli transaction build --testnet-magic 1 --alonzo-era --tx-in $txhash#$txix --tx-out $address+$burnoutput --mint="-1 $policyid.$tokenname" --minting-script-file $script --change-address $address --invalid-hereafter $slot --witness-override 2 --out-file burning.raw +``` + + + + + ```bash cardano-cli transaction build --mainnet --alonzo-era --tx-in $txhash#$txix --tx-out $address+$burnoutput --mint="-1 $policyid.$tokenname" --minting-script-file $script --change-address $address --invalid-hereafter $slot --witness-override 2 --out-file burning.raw ``` + + + + :::note The minting parameter is now called with a negative value, therefore destroying one token. ::: -Sign the transaction. +Sign the transaction: + + + + + +```bash +cardano-cli transaction sign --signing-key-file payment.skey --signing-key-file policy/policy.skey --testnet-magic 2 --tx-body-file burning.raw --out-file burning.signed +``` + + + + + +```bash +cardano-cli transaction sign --signing-key-file payment.skey --signing-key-file policy/policy.skey --testnet-magic 1 --tx-body-file burning.raw --out-file burning.signed +``` + + + + + ```bash cardano-cli transaction sign --signing-key-file payment.skey --signing-key-file policy/policy.skey --mainnet --tx-body-file burning.raw --out-file burning.signed ``` -Full send. + + + + + +Full send: + + + + + +```bash +cardano-cli transaction submit --tx-file burning.signed --testnet-magic 2 +``` + + + + +```bash +cardano-cli transaction submit --tx-file burning.signed --testnet-magic 1 +``` + + + + ```bash cardano-cli transaction submit --tx-file burning.signed --mainnet ``` + + + diff --git a/docs/native-tokens/minting.md b/docs/native-tokens/minting.md index c51437f77d..d066e9d8d1 100644 --- a/docs/native-tokens/minting.md +++ b/docs/native-tokens/minting.md @@ -3,7 +3,7 @@ id: minting title: Minting Native Assets sidebar_label: Minting Native Assets description: How to mint native tokens on Cardano. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- In this section, we will be minting native assets - **not NFTs**. @@ -99,7 +99,7 @@ You need to adjust the path on your setup and your socket path accordingly. ### Improve readability Since we've already answered all of the questions above, we will set variables on our terminal/bash to make readability a bit easier. -We also will be using the testnet. The only difference between minting native assets in the mainnet will be that you need to substitute the network variable testnet with mainnet. +We also will be using a [testnet](docs/get-started/testnets-and-devnets.md). The only difference between minting native assets in the Mainnet will be that you need to substitute the network variable testnet with Mainnet. Since cardano-cli version 1.31.0, token names must be base16 encoded . So here, we use the xxd tool to encode the token names. @@ -168,10 +168,10 @@ address=$(cat payment.addr) ``` ### Fund the address -Submitting transactions always require you to pay a fee. Sending native assets requires also requires sending at least 1 ada. +Submitting transactions always require you to pay a fee. Sending native assets also requires sending at least 1 ada. So make sure the address you are going to use as the input for the minting transaction has sufficient funds. -For the **testnet**, you can request funds through the [testnet faucet](../integrate-cardano/testnet-faucet). +For **testnets**, you can request funds through the [Testnet Faucet](../integrate-cardano/testnet-faucet). ### Export protocol parameters @@ -206,16 +206,10 @@ cardano-cli address key-gen \ --signing-key-file policy/policy.skey ``` -Create a `policy.script` file and fill it with an empty string. +Use the `echo` command to create a `policy.script` (the first line uses `>` instead of `>>`, to create the file if not present and clear any existing contents): ```bash -touch policy/policy.script && echo "" > policy/policy.script -``` - -Use the `echo` command to populate the file: - -```bash -echo "{" >> policy/policy.script +echo "{" > policy/policy.script echo " \"keyHash\": \"$(cardano-cli address key-hash --payment-verification-key-file policy/policy.vkey)\"," >> policy/policy.script echo " \"type\": \"sig\"" >> policy/policy.script echo "}" >> policy/policy.script @@ -432,7 +426,7 @@ receiver="Insert wallet address here" receiver_output="10000000" txhash="" txix="" -funds="Amout of lovelace" +funds="Amount of lovelace" ``` Again - here is an example of how it would look if we use our fictional example: @@ -459,10 +453,9 @@ echo Policy ID: $policyid We will be sending 2 of our first tokens, `Testtoken`, to the foreign address. A few things worth pointing out: -1. We are forced to send at least a minimum of 1 ada (1000000 Lovelace) to the foreign address. We can not send tokens only. So we need to factor this value into our output. We will reference the output value of the remote address with the variable receiver_output. +1. We are forced to send at least a minimum of 1 ada (1000000 Lovelace) to the foreign address. We can not send tokens only. So we need to factor this value into our output. We will reference the output value of the remote address with the variable `receiver_output`. 2. Apart from the receiving address, we also need to set our own address as an additional output. Since we don't want to send everything we have to the remote address, we're going to use our own address to receive everything else coming from the input. -3. Our own address, therefore, needs to receive our funds, subtracted by the transaction fee as well as the minimum of 1 ada we need to send to the other address and -4. all of the tokens the txhash currently holds, subtracted by the tokens we send. +3. Our own address, therefore, needs to receive our funds, subtracted by the transaction fee as well as the minimum of 1 ada we need to send to the other address and all of the tokens the `txhash` currently holds, subtracted by the tokens we send. :::note Depending on the size and amount of native assets you are going to send it might be possible to send more than the minimum requirement of only 1 ada. For this guide, we will be sending 10 ada to be on the safe side. Check the [Cardano ledger docs for further reading](https://cardano-ledger.readthedocs.io/en/latest/explanations/min-utxo-alonzo.html#example-min-ada-value-calculations-and-current-constants) diff --git a/docs/native-tokens/overview.md b/docs/native-tokens/overview.md index 49d60da170..c4e68c06bb 100644 --- a/docs/native-tokens/overview.md +++ b/docs/native-tokens/overview.md @@ -4,7 +4,7 @@ slug: /native-tokens/ title: Discover Native Tokens sidebar_label: Overview description: Discover Cardano's native tokens. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ![Cardano Discover Native Tokens](../../static/img/card-native-tokens-title.svg) @@ -12,8 +12,8 @@ image: ../img/og-developer-portal.png :::note There are currently two ways to make your NFTs: -- For the not-so-tech-savvy through someone else. The [showcase section](../../showcase/?tags=nft) has a few services that offer this. -- For the more tech-savvy on a Cardano node. If you want to have full control over your tokens, you need to mint them **yourself**. And this is what this section is all about. +- For the less tech-savvy: through someone else. The showcase section (under [NFT Support](../../showcase/?tags=nftsupport)) has a few services that offer this. +- Tech-savvy users can issue NFTs on a Cardano node. If you want to have full control over your tokens, you need to mint them **yourself**. And this is what this section is all about. Minting requires a certain amount of skill in navigating and working with Linux through the terminal and a running Cardano node. diff --git a/docs/operate-a-stake-pool/ansible-cardano-node.md b/docs/operate-a-stake-pool/ansible-cardano-node.md index 80fd3e4bf1..daa7192976 100644 --- a/docs/operate-a-stake-pool/ansible-cardano-node.md +++ b/docs/operate-a-stake-pool/ansible-cardano-node.md @@ -132,7 +132,7 @@ This inventory arrangement works well for simple configurations, but as the comp - What - An application, stack or microservice (e.g., database servers, web servers, etc.) - Where - A datacenter or geographic region, to talk to local DNS, storage, etc. (e.g., east, west, Newark, Paris, Cape Town) -- When - The development stage, to avoid testing on production resources (e.g., mainnet, testnet) +- When - The development stage, to avoid testing on production resources (e.g., Mainnet, [testnets](docs/get-started/testnets-and-devnets.md)) For our purposes, we have chosen a combination of the "what" and "when" group structures. Let's look at a high-level overview of our inventory group structure: @@ -327,7 +327,7 @@ Likewise, assign a public IP address for your block producer. This file exists i ### Optional components #### cardano-submit-api -The `cardano-submit-api` provides a web API that allows transactions (generated by an external wallet, for example) to be posted to the Cardano blockchain. To submit a transaction to the network (mainnet, staging, or any of the testnets), `cardano-node` must be running and have access to the genesis file and genesis hash value for the network. Given that our playbook installs a full `cardano-node`, this requirement is already fulfilled. +The `cardano-submit-api` provides a web API that allows transactions (generated by an external wallet, for example) to be posted to the Cardano blockchain. To submit a transaction to the network (Mainnet, staging, or any of the testnets), `cardano-node` must be running and have access to the genesis file and genesis hash value for the network. Given that our playbook installs a full `cardano-node`, this requirement is already fulfilled. Stake pool operators may wish to install and enable the web API on one or more of their relays. This provides another mempool for users to submit their transactions to. This component is disabled by default. To enable it, set the following value in `/roles/cardano-node/defaults/main.yml` to `true`: @@ -344,7 +344,7 @@ ansible-playbook provision.yml -i inventories/relay-node --vault-password-file ~ >**Note:** To prevent installation of `cardano-submit-api` on the block producer, these tasks will _only_ be executed if the `relay-node` inventory is specified during playbook execution. -The associated tasks will handle the build process and installation of `cardano-submit-api` to `/usr/bin`. It will also check for and, optionally, download IOHK's [mainnet base configuration settings](https://raw.githubusercontent.com/input-output-hk/cardano-node/master/cardano-submit-api/config/tx-submit-mainnet-config.yaml). +The associated tasks will handle the build process and installation of `cardano-submit-api` to `/usr/bin`. It will also check for and, optionally, download IOHK's [`mainnet` base configuration settings](https://raw.githubusercontent.com/input-output-hk/cardano-node/master/cardano-submit-api/config/tx-submit-mainnet-config.yaml). Finally, two scripts are created: 1) `tx-api.sh` is added to `/opt/cardano/cnode/scripts` to handle startup of the API, and 2) `tx-api.service` is installed to `/etc/systemd/system` and enabled. The latter `systemd` service allows the API to started and its running status to be checked, like so: diff --git a/docs/operate-a-stake-pool/cardano-key-pairs.md b/docs/operate-a-stake-pool/cardano-key-pairs.md index 73dbbe53e7..f3ed798292 100644 --- a/docs/operate-a-stake-pool/cardano-key-pairs.md +++ b/docs/operate-a-stake-pool/cardano-key-pairs.md @@ -3,7 +3,7 @@ id: cardano-key-pairs title: Cardano Key Pairs sidebar_label: Cardano Key Pairs description: Learn about Cardano key pairs. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- It's critical to understand the numerous cryptographic key pairs connected with Cardano, as well as the purpose of each key pair and best practices for securing those keys, before you start working with it. Every ambitious Cardano developer and stake pool operator should get a complete grasp of these key pairs, as well as the ramifications of a single secret (private) key being hacked. Any Cardano developer or stake pool operator must learn how to manage, safeguard, and store private keys in order to succeed. diff --git a/docs/operate-a-stake-pool/frankenwallet.md b/docs/operate-a-stake-pool/frankenwallet.md new file mode 100644 index 0000000000..6c55ce30a2 --- /dev/null +++ b/docs/operate-a-stake-pool/frankenwallet.md @@ -0,0 +1,220 @@ +--- +id: frankenwallet +title: Get Started with the Frankenwallet +sidebar_label: Frankenwallet (USB air gap) +description: An encrypted, air-gapped Linux bootable USB drive for Cardano transaction signing and airlocked access to & from the outside world +--- + +## An encrypted, air-gapped Linux bootable USB drive for Cardano (and other) secure operations + +Frankenwallet is not a package, library or product, but rather a set of installation guides, security standards and templates that allow Cardano SPOs, token minters, users with funds in bare addresses, and smart contract creators to use an ordinary USB drive for the level of security isolation appropriate to their use case. + +When one's primary computer is booted from this removable drive, the secure ("cold") configuration & usage protocol allows users to: + + - store and work securely and flexibly with private keys + - sign transactions and securely keep records of transaction details + - keep encrypted records & backups without ever revealing keys or passwords in the insecure host environment + +:::warning warning - Linux veterans only + +These instructions may be difficult or unsafe to follow unless you have experience with "dual boot" Linux installations and other custom OS & booting configurations. + +Operators needing a safer path can follow instructions at the [Air Gap Environment](/docs/get-started/air-gap) page. + +::: + +### How to use this guide + +This tool has been developed by the [COSD stake pool](https://cexplorer.io/pool/pool1e98xlcgj80c3rdmm27v5hnvrdtut52e65uk0ema7ctfag596vr2), beginning as a publication of their own operating environment when scared to death of losing their pool pledge and not being able to come by a second machine for the conventional [air gap environment](/docs/get-started/air-gap) (see origin story: [Why was the Frankenwallet developed?](https://cosd.com/frankenwallet/intro/history)). + +At the time of this writing, the full instructions for: + + - the reasons you would want to use this tool + - how to provision & build your own Frankenwallet + - how to use the tool for stake pool operations & secure transactions + +... are in the online book at this external link: [The Frankenwallet](https://cosd.com/frankenwallet).  If you see any problems with this material, please submit an issue at: + + - [github:rphair/frankenwallet](https://github.com/rphair/frankenwallet) if you find an error in the material at this web site + - [github:cardano-foundation/developer-portal](https://github.com/cardano-foundation/developer-portal) with any updates or corrections to this page itself. + +This is a one-page summary of those external instructions, so you can see if the Frankenwallet is something you might use in your workflow and/or being at the official instructions according to your own level of interest & expertise. + +### Use cases for the Frankenwallet + +➤ Anyone working with private keys & [secure transaction signing](/docs/get-started/secure-workflow), seed phrases, or other high value resources targeted by hackers (e.g., [stake pool keys](/docs/operate-a-stake-pool/cardano-key-pairs)). + +➤ Anyone wishing to work in high security with these resources without either a second computer (e.g. perpetual travellers, students, and hardware minimalists) or a hardware wallet ([Why wouldn't I want a hardware wallet?](https://cosd.com/frankenwallet/intro/hardware-wallets)) + +➤ Anyone wanting or needing direct access to all their own files on their main computer in the air-gapped environment. + +➤ Anyone who has wondered how you might get the same (or better) features as a hardware wallet on an easily obtainable & anonymous USB drive: including a full featured operating system with applications that can edit encrypted and richly formatted files and prepare encrypted document archives. + +➤ Anyone using memory sticks to store or back up private keys who has worried about an unencrypted memory stick being lost or stolen. + +➤ Anyone wanting to prepare an off-site or even a network backup of their keys, wallet seed phrases, and other cryptocurrency asset records… given that AES based encryption is considered unbreakable when properly used (i.e. never entering the passphrase on a network-connected machine). + +### If so universally useful, why the build instructions & not just a downloadable ISO image? + +**TL;DR** because then all Frankenwallets would be the same, and any security flaw found in one of them might allow all of them to be exploited before a response could be mounted (see [Why is there no ISO image for Frankenwallet?](https://cosd.com/frankenwallet/intro/no-iso)). + +### Some other use cases & limitations of this material + +➤ You *can* use the Frankenwallet instructions to set up an Air Gap node on a full computer... but since the time of its development, this procedure has been adapted to a more appropriate page on the Dev Portal (the aforementioned [Air Gap Environment](/docs/get-started/air-gap)). + +From [Frankenwallet \> Miscellaneous FAQ's](https://cosd.com/frankenwallet/intro/faq): + +➤ Your VirtualBox or other VM software on your host computer *does not* isolate you from the network, even if you have it disabled... nor can it be ever assumed that the screen or keyboard are isolated either... so VMs are generally unsuitable to create an air gap *or* to implement these instructions. + +➤ Ubuntu + GNOME, though heavyweight and tainted by default with proprietary software, are chosen for their universal documentation especially when it comes to issues of OS installation and dual booting. + +➤ Read more about the [Evil Maid](http://theinvisiblethings.blogspot.com/2009/01/why-do-i-miss-microsoft-bitlocker.html) to see what she, he, or it can & cannot do with your Frankenwallet by compromising your host computer's BIOS in a way to which all commercial computers are vulnerable. + +## Preparing to build the Frankenwallet + +From [Frankenwallet \> Preparation](https://cosd.com/frankenwallet/prepare): + +#### Planning your communication with the host computer + +You will avoid moving files around on memory sticks *and* transferring them over a network (impossible with Air Gap machines) because, when you boot from a USB device based operating system, the main disk on that computer is *also* accessible as if *it* were an external device. + +Therefore you can plan an area on your host computer (called here the Host Folder) which the Frankenwallet will use to store any encrypted files... as well as read the raw data for the transactions that you will prepare in the air gapped environment. + +:::warning warning + +Remember early & often that nothing should be stored on the host computer that is not saved an encrypted document or archive. + +::: + +### Procuring your hardware + +Though regularly used Frankenwallets have been built on cheap & slow USB drives, to make this tool a dependable part of your workflow you should get either: + + - a memory stick with a high benchmark for reading and writing speed + - (for best results in author's experience) a SATA SSD drive plus a SATA-to-USB adapter cable. + +Users who have built dual-boot configurations before will also know you should **familiarise yourself with the computer's BIOS settings** in anticipation of the same type of setup. + +Note there are limitations about using a Mac as host computer which stem from the different means of booting (see [Frankenwallet \> What if I have a Mac?](https://cosd.com/frankenwallet/prepare/hardware)) + +### Choosing passwords + +(from Frankenwallet passwords \> [low security](https://cosd.com/frankenwallet/prepare/password-low) & [high security](https://cosd.com/frankenwallet/prepare/password-high)) + +The [low security password](https://cosd.com/frankenwallet/prepare/password-low) can be one you've already used to encrypt files on the host computer... strong enough you feel comfortable backing up files over the net. + +The [high security password](https://cosd.com/frankenwallet/prepare/password-high)... called the Frankenwallet password itself... should also be stictly long & complex, but should never have been used in a network environment, not even on a network connected machine... otherwise you will be defeating the purpose of using the Air Gap for any purposes of file storage or backup of files to the host computer + +See each of these web links to see which of the Cardano asset & stake pool files it would typically be used to encrypt. + +:::tip + +For ease of use, you can separate the "low security" and "high security" stake pool files into two subdirectories, so they can be backed up as two separately password-encrypted archives. + +::: + +## Installing the OS onto the USB device + +(from [Frankenwallet \> Host computer & media](https://cosd.com/frankenwallet/prepare/computer) though end of [Installation](https://cosd.com/frankenwallet/install) section) + +The full instructions mainly document the [installation of Ubuntu](https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview) in the common "dual boot" configuration: something the target audience should feel comfortable with, and can probably improvise for themselves if also following these checklists during the installation & setup or the installed environment: + +### Installation notes: software + +No need to disconnect from the Internet yet because you will be using it to do your first package updates & software installation. + + - Purists might want to do this without Internet access at all: if feeling comfortable with the baseline OS alone (no upgrades) + getting your packages by saving them in your computer's & installing them from there. + +Select the Minimal software installation (no network hungry apps & games) and plan to install the LibreOffice package later. + +Don't tick **third party hardware for graphics and WiFi** because these black boxes can be full of institutional spyware. + +### Installation notes: partitioning + +When you select **erase disk and install Ubuntu** you will get the options under Advanced Features for: + + - use LVM (the Logical Volume Manager), allowing more flexible disk usage + - select Encrypt the new Ubuntu Installation + - enter the "High Security" password you chose as the drive encryption password + +Note the password you chose will be required now to boot the OS as well as decrypt the the partition it creates on any other devices (so your drive is secure when not booting). + +:::warning warning + +At the next screen Erase disk and install Ubuntu, watch out that you don't accidentally select your computer's own drive... this can be very easy to do\! + +::: + +### Setup notes: operating system + + - Don't let Ubuntu link with any online accounts in its initialisation process: refuse everything like location services, "livepatch", etc. + - Disable lots of little services & settings which might leak your information (see [Frankenwallet \> First boot: Secure system settings](https://cosd.com/frankenwallet/install/settings)) + +### Setup notes: packages + +(details: [Frankenwallet \> First boot: Package installation](https://cosd.com/frankenwallet/install/packages)) + + - Remove all "snaps" and disable Snap. + - Remove CUPS (network printer service). + - Disable unattended upgrades. + - Upgrade the remainder of the system (`apt update; apt upgrade; apt autoremove`) + +### Install document & security-oriented packages + + - `secure-delete` (in case you accidentally write unencrypted keys or secure data to your host computer drive) + - `LibreOffice` (supporting AES256 encrypted documents) + - `p7zip` (supporting AES256 encrypted archives) + +### Tune browser & turn off network access FOREVER + +Lock down the browser settings, just in case, even if you think you'll never use it ([Frankenwallet \> Securing Firefox browser](https://cosd.com/frankenwallet/install/browser)) + +At this point you disable Wi-Fi and all other networks in the system settings, and go on without any future connection to the Internet in your new environment. + +## What to use the Frankenwallet for + +From a growing body of material beginning at [Frankenwallet \> Usage](https://cosd.com/frankenwallet/usage): + +### Prepare and submit secure transactions + +You can now follow the instructions recommended in [Secure Transaction Workflow](/docs/get-started/secure-workflow), with the following modifications: + + - Create a file on your networked host computer in the Host Folder, encrypted with the Low Security password (so you feel safe backing it up over the Internet, but won't store any keys or wallet passphrases there). + - When planning your transaction, save the transaction details and any commands to cut-and-paste, in this file. + - Boot into the Frankenwallet and navigate to your Host Folder. + - Copy-paste the transaction commands and/or transaction data into the Frankenwallet command line. + - Save the resulting transaction file to your Host Folder. + - Reboot into the host computer, upload your transaction file if necessary, and submit it. + +Some copy-paste models & templates for basic Cardano transactions are being assembled here: [Frankenwallet \> Transaction templates](https://cosd.com/frankenwallet/cardano/templates) + +### Making & verifying backups of assets & keys + +from [Frankenwallet \> Backups to host machine](https://cosd.com/frankenwallet/usage/backups): + +For [highly secure stake pool & asset files](https://cosd.com/frankenwallet/prepare/password-high), and any documents storing wallet key phrases or raw private key data: + + - First create the file archive (with 7z) or text document (with LibreOffice) using your "high security" password. + - Then copy it to your host folder, where it can remain stored or backed up (over the network if desired) along with all your other computer's data. + - This is safe (pending the usual arguments) because **you never have entered, and never will enter, the Frankenwallet (high security) password on your host computer or any other machine**. + - This means you can only verify these backups on this or another Frankenwallet... never on the host computer environment itself\! + +For [less secure stake pool & asset files](https://cosd.com/frankenwallet/prepare/password-low), and documents with general transaction records & source data: + + - First create the file archive (with 7z) or text document (with LibreOffice) using your "high security" password. + - These files you might feel comfortable verifying on your host computer. + - NOTE for less urgently secure stake pool pool files (e.g. verification keys, node counters) you might provide a second dedicated password... with "security level" between your general encryption password and the "high security" password... which you only use for the purposes of your assets & stake pool public keys. + +### The "cool" Frankenwallet: a sandbox for crypto wallets + +from [Frankenwallet \> Cool environments](https://cosd.com/frankenwallet/cool): + +Relaxing the Internet environment (meaning **this device should no longer be used for cold, unencrypted key storage**) allows you to use this devices as a node or browser-based wallet. + +Even low-bandwidth memory sticks have been tested in use with the resource intensive Daedalus node wallet, and they still work.  But keep in mind that a node wallet will be considered very slow to sync... especially when your Frankenwallet is booted from your "daily driver" computer and it can be used for no other purpose in the meantime. + +For browser-based wallets, the performance will be better... although the Firefox (or other browser) configuration becomes vital to avoid some institutional or extension spyware possibility compromising your keys. + +In either case, you can still use the Frankenwallet to **copy the wallet key phrases to an encrypted file** on your host computer: so you can have a record of them with a password that has never been entered on your host machine. + +Also keep in mind your security isolation can never be considered complete once you've allowed Internet connection from this "cool" environment... though this "sandbox" is still better than the complete exposure you'd have by running a node or browser based wallet on your network-connected, daily-use machine. diff --git a/docs/operate-a-stake-pool/guild-ops-suite.md b/docs/operate-a-stake-pool/guild-ops-suite.md index 70ad7a05fc..4354ab6985 100644 --- a/docs/operate-a-stake-pool/guild-ops-suite.md +++ b/docs/operate-a-stake-pool/guild-ops-suite.md @@ -3,7 +3,7 @@ id: guild-ops-suite title: Get Started with Guild Operators Tools sidebar_label: Guild Operators Suite description: Get Started with Guild Operators Tools -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ## Guild Operators Suite @@ -28,7 +28,7 @@ Topology Updater was built as a workaround to allow stake pool relays to auto-di #### Guild Network and Support for other networks -Guild Network is a brief (30-minute epoch) network that functions similarly to testnet but is entirely governed by the community. It's excellent for experimenting with things in the sandbox, as well as testing out viable features before releasing them to other networks. This network is already supported by all of the tools in the repo, including mainnet, testnet, and staging. +Guild Network is a brief (30-minute epoch) network that functions similarly to the Cardano testnets but is entirely governed by the community. It's excellent for experimenting with things in the sandbox, as well as testing out viable features before releasing them to other networks. This network is already supported by all of the tools in the repo, including Mainnet, testnets, and staging. #### Others.. diff --git a/docs/operate-a-stake-pool/marketing-spo.md b/docs/operate-a-stake-pool/marketing-spo.md index a71722e64a..820eee5ef5 100644 --- a/docs/operate-a-stake-pool/marketing-spo.md +++ b/docs/operate-a-stake-pool/marketing-spo.md @@ -3,7 +3,7 @@ id: marketing-stake-pool title: Marketing a Stake pool sidebar_label: Marketing a Stake Pool description: This article explains how to promote a stake pool. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- Managing a stake pool is similar to managing a business. It's not enough to have a stake pool that functions flawlessly on the technical side; you also need to attract enough stake. The most fundamental rule of marketing is to develop a marketing strategy that focuses on your customers' needs rather than your primary product. When you operate a stake pool, you allow other users to earn incentives by participating in the Cardano protocol. You'll be able to execute transactions and create new blocks as a result of this. The main way to get people to join your stake pool is to increase its reliability, uptime, and staking reward percentage. @@ -75,7 +75,7 @@ Create a Website that is consistent with the branding of your stake pool. [Get a You can check previous delegation announcements on the blog posts [Our new delegation strategy – announcing the pools we’re supporting](https://iohk.io/en/blog/posts/2021/01/22/our-new-delegation-strategy-announcing-the-pools-we-are-supporting/) and [Announcing new stake pools chosen for our delegation strategy](https://iohk.io/en/blog/posts/2021/05/14/announcing-new-stake-pools-chosen-for-our-delegation-strategy/). So try to follow the news for the next round of applications. You can check the [previous call for delegation to support small pools](https://forum.cardano.org/t/iohk-new-call-for-delegation-to-support-small-pools/56589). -One of the selection criteria is to validate your stake pool parameters such as [pledge](https://docs.cardano.org/core-concepts/pledging-and-delegation-options), [stake delegated to the pool](https://docs.cardano.org/core-concepts/delegation), and the size of pool [saturation](https://docs.cardano.org/glossary/#saturation). This is to be sure that your stake pool will be effective, generate new blocks, and get enough rewards to the delegators. +One of the selection criteria is to validate your stake pool parameters such as [pledge](https://docs.cardano.org/learn/pledging-rewards), [stake delegated to the pool](https://docs.cardano.org/core-concepts/delegation), and the size of pool [saturation](https://docs.cardano.org/glossary/#saturation). This is to be sure that your stake pool will be effective, generate new blocks, and get enough rewards to the delegators. Note that you can watch [The evolution of the Cardano Foundation's delegation methodology video](https://www.youtube.com/watch?v=lq2sXYVDlX8). diff --git a/docs/operate-a-stake-pool/overview.md b/docs/operate-a-stake-pool/overview.md index 4c663520ec..5380faa85d 100644 --- a/docs/operate-a-stake-pool/overview.md +++ b/docs/operate-a-stake-pool/overview.md @@ -4,7 +4,7 @@ slug: /operate-a-stake-pool/ title: Operate a Stake Pool sidebar_label: Overview description: Operate a Cardano stake pool. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ![Cardano Operate a Stake Pool](../../static/img/card-operate-a-stake-pool-title.svg) @@ -57,6 +57,5 @@ You must also construct your pool around a brand that can draw sufficient delega - [Stake Pool Operator Scripts](https://github.com/gitmachtl/scripts) a collection of scripts to manage your stake pool step-by-step. - [Coin Cashew Guides](https://www.coincashew.com/coins/overview-ada/guide-how-to-build-a-haskell-stakepool-node) for stake pool operators. - [Pool Veterinary](http://pool.vet) will help you see if your Cardano stake pool is working and find out why it may not be. -- [SPOCRA](https://members.spocra.io) includes the Stake Pool installation guide from the registered trade guild - Stake Pool Operator Collective Representation Assembly - [RaspberryPi with Docker](https://github.com/speedwing/cardano-staking-pool-edu) Full guide to build and run both testnet and mainnet Cardano Stake Pool with Docker on Raspberry Pi. [Youtube Playlist](https://www.youtube.com/playlist?list=PLBhbLwOuj0DfTnneuG3vyoDHY7Dv_aiyq) - [TOPO Guide](https://es-kb.topopool.com/primeros-pasos). A friendly and complete guide to mount a Stake Pool in Spanish diff --git a/docs/portal-contribute.md b/docs/portal-contribute.md index 93e6f17219..a070719c25 100644 --- a/docs/portal-contribute.md +++ b/docs/portal-contribute.md @@ -3,7 +3,7 @@ id: portal-contribute title: How to contribute to the developer portal sidebar_label: How to contribute description: How to contribute to the Cardano developer portal. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- We wanted to build a developer portal as open and inclusive as Cardano. A portal that is in the hands of the Cardano community and can be constantly evolved by it. @@ -12,6 +12,15 @@ For this to be successful, the portal relies on your contributions, and the fact If you want to install the portal on your local machine, you can [jump directly to the installation instructions.](#installation) +## Why should I contribute? +**Build your reputation:** Contributions to the developer portal will give your GitHub name and profile higher visibility as more and more people come across your work online. As visibility increases, so too will the reputation of your name and brand. + +**Build your confidence:** Creating tutorials and showing fellow community members how to create will not only elevate your knowledge of your own skills and processes, but will also bestow you with greater confidence in your abilities as you interact with others. + +As an added bonus, since everything is public, people typically pay greater attention to how well something is written or programmed. This will also afford you with an invaluable set of eyes on your contributions that will serve as a crucial peer-reviewed tool to catch errors and refine your work. + +**Build your resume:** Each contribution you make acts as a precious notch on your belt towards career development or job searches within the Cardano ecosystem. It is also a way for people to find examples of your work and verify your abilities. +By contributing to open source projects, you will not only gain a lot of valuable experience, but if your profile (or brand) reaches a certain level of attention and recognition, you are also more likely to get professional opportunities further down the line. ## I got the spirit. What can I do to contribute? @@ -37,12 +46,34 @@ If you think something is wrong or something fundamental should change, discussi * [Issues in the GitHub Repo](https://github.com/cardano-foundation/developer-portal/issues) * [Discussions in the GitHub Repo](https://github.com/cardano-foundation/developer-portal/discussions) -### Add projects to showcase or builder tools -Help to add good projects or builder tools. Please note the different guidelines for [adding showcases](https://github.com/cardano-foundation/developer-portal/edit/staging/src/data/showcases.js) or [builder tools](https://github.com/cardano-foundation/developer-portal/edit/staging/src/data/builder-tools.js). +### Add a project to showcase +Help to add good projects to the [showcase section](http://developers.cardano.org/showcase/). Please note the guidelines for adding new projects: +* It must be built on Cardano and have a real use case. For example, a forum where people can talk about Cardano is great, but not for this showcase section. +* It has to run on Cardano mainnet. +* It has to have a running product. (no presale, no protected pages, no coming soon messages) +* It has to have enough community reputation. +* It has to provide a unique value distinct from existing showcase items. +* It has to have a stable domain name. (a random Netlify/Vercel domain is not allowed, no URL shortener, no app store links, or similar) +* The GitHub account that adds the project must not be new. +* The GitHub account must have a history/or already be known in the Cardano community. +* Describe what makes your project special, avoid phrases like "the first this and that". Granular details like which project was first is tribal attribute known to cause rift and conflicts. +* Please refrain from adding NFT projects unless they are immensely different from what is already listed in terms of utility. We can't list hundreds of NFT projects. For details please follow or take part in the discussion [here](https://github.com/cardano-foundation/developer-portal/discussions/243). (TL;DR: we are adding winners of the [CNFT Awards](https://www.cnft-awards.io/)) +* If you add a project with a main component of NFTs, please select "nftproject" as tag. (not "nftsupport") Mainly the project showcase should be a place where someone new to the ecosystem can come to see what can be done. For example we agreed that projects have to have a running product today on Cardano mainnet, no promises, no pre-sales, no coming soon pages. We also don't [aim to map out a future ecosystem.](https://developers.cardano.org/showcase?tags=ecosystem) -Adding projects or builder tools will require [creating a pull request.](#create-pull-requests) +Adding projects to the [showcase section](http://developers.cardano.org/showcase/) will require [creating a pull request](#create-pull-requests). + +### Add tools to builder tools +Help to add useful tools to the [builder tools section](http://developers.cardano.org/tools/). Please note the guidelines for adding new builder tools: +* It is an actual builder tool that adds value to Cardano developers. +* It has a stable domain name (a random for example, Netlify/Vercel domain is not allowed) +* The GitHub account that adds the builder tool must not be new. +* The GitHub account must have a history/or already be known in the Cardano community. + +A builder tool is a software application or platform that enables users to create, modify, and deploy software applications, or other digital products on Cardano. + +Adding tools to the [builder tools section](http://developers.cardano.org/tools/) will require [creating a pull request](#create-pull-requests). ### Create/improve documentation Documentation can constantly be improved, and there are gaps in the developer portal. In particular, the stake pool operator section needs a lot of work. [To create and improve documentation, you should install the portal on your local machine.](#installation) @@ -121,6 +152,12 @@ developer-portal │ ├── 2021-01-07-january.md │ ├── 2021-02-03-february.md │ └── *.md +├── changelog +│ └── source +│ ├── 2021.8.0.md +│ ├── 2021.12.0.md +│ ├── 2021.16.0.md +│ └── *.md ├── docs │ ├── fund-your-project │ ├── get-started @@ -142,6 +179,11 @@ developer-portal │ ├── dotnet │ ├── js | └── python +├── scripts +│ ├── cip.ts +│ ├── rust-library.ts +│ ├── token-registry.ts +│ └── *.md ├── src │ ├── css │ │ └── custom.css @@ -167,8 +209,10 @@ developer-portal ### Project structure rundown - `/blog/` - Contains the blog Markdown files for the developer spotlight. +- `/changelog/source/` - Contains the changelog data split by months into Markdown files. - `/docs/` - Contains the Markdown files for the docs. Customize the order of the docs sidebar in `sidebars.js`. - `/examples/` - Contains example projects for the Markdown files in the docs. *The structure is not final and will likely change in the future* +- `/scripts/` - Contains scripts to fetch auto generated content like CIPs, Rust Library, Token Registry. - `/src/` - Non-documentation files like pages or custom React components. You don't have to strictly put your non-documentation files in here, but putting them under a centralized directory makes it easier to specify in case you need to do some sort of linting/processing. - `/src/data/builder-tools` - Screenshots for the builder tools section. - `/src/data/builder-tools.js` - Definition file for the builder tools section. @@ -179,3 +223,52 @@ developer-portal - `/docusaurus.config.js` - A config file containing the site configuration. - `/package.json` - A Docusaurus website is a React app. You can install and use any npm packages you like in them. - `/sidebar.js` - Used by the documentation to specify the order of documents in the sidebar. + +## Known problems that may arise +We list here problems you may run into when running the developer portal locally. + +### Minimum Node.js version not met +**Problem:** `yarn start` throws the error `[ERROR] Minimum Node.js version not met :(`. +**Solution:** use the node version listed below [requirements](#requirements). If you have different node versions installed for different projects, `nvm` is a neat tool to deal with it. You can switch versions with for example `nvm use 16`. + +### Sidebars file at "developer-portal/sidebars.js" failed to be loaded +**Problem:** `yarn start` throws the error `[ERROR] Sidebars file at "developer-portal/sidebars.js" failed to be loaded.`. + +**Solution:** you need to run at least once `yarn build` as this pulls missing files into your folder, which is then referenced by `sidebars.js`. + +### Sidebar category Token Registry has neither any subitem nor a link +**Problem:** `yarn start` throws the errow `[ERROR] Error: Sidebar category Token Registry has neither any subitem nor a link. This makes this item not able to link to anything.`. + +**Solution:** you need to run at least once `yarn build` as this pulls missing files into your folder, which is then referenced by `sidebars.js`. + +## Other questions +Various other questions and answers. + +### Anything I can do to make sure my pull request will not break on the staging/production server? +Yes, please always do a `yarn build` before submitting a pull request. It will find many more issues than `yarn start`. + +### Is there any style guide? Do we have editorial guidelines? +Yes, both still work in progress but please see [style guide](portal-style-guide.md) and [editorial guidelines](portal-style-guide.md#editorial-style-guide). + +### Should I commit the `yarn.lock` file? +No, please do not commit your `yarn.lock` file: this represents a software baseline and should be updated only at regular intervals by site maintainers. + +### I committed `yarn.lock` to my PR branch: what do I do? + +Assuming: +- `origin` refers to your local fork +- `upstream` refers to the `cardano-foundation` repository + +First, do _one_ of these in your the working root directory of your fork (to restore an unmodified `yarn.lock`): +- ... from your working fork's `staging` branch (if you've created your PR branch from there): + - `git checkout staging -- yarn.lock` +- ... from the `staging` branch of your fork itself: + - `git checkout origin/staging -- yarn.lock` +- ... from the official repository: + - `git checkout upstream/staging -- yarn.lock` + +Then commit to reverse the changes you've made. For example: +- `git commit -m 'reverting to unmodified yarn.lock'` + +The same technique can be used to revert modifications to other portal files. For more help, see the popular thread [Remove a modified file from pull request](https://stackoverflow.com/questions/39459467/remove-a-modified-file-from-pull-request). + diff --git a/docs/portal-contributors.md b/docs/portal-contributors.md index 0a4cdb6d62..be2e4e66fa 100644 --- a/docs/portal-contributors.md +++ b/docs/portal-contributors.md @@ -3,7 +3,7 @@ id: portal-contributors title: Contributors sidebar_label: Contributors description: Thank you for contributing to the Cardano developer portal. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- import ThemedImage from '@theme/ThemedImage'; diff --git a/docs/portal-signup.md b/docs/portal-signup.md index baa2419064..728a279cae 100644 --- a/docs/portal-signup.md +++ b/docs/portal-signup.md @@ -3,7 +3,7 @@ id: portal-signup title: Signup sidebar_label: Signup description: Signup for the Cardano developer portal. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ![img](../static/img/logo.svg) diff --git a/docs/portal-style-guide.md b/docs/portal-style-guide.md index 80f48468fc..f404499bfb 100644 --- a/docs/portal-style-guide.md +++ b/docs/portal-style-guide.md @@ -3,7 +3,7 @@ id: portal-style-guide title: Style Guide sidebar_label: Style Guide description: Style guide for the Cardano developer portal. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- You can write content using [GitHub-flavored Markdown syntax](https://github.github.com/gfm/). [Markdown](https://github.github.com/gfm/) is a way to style text on the web. You control the display of the document; formatting words as bold or italic, adding images, and creating lists are just a few of the things we can do with Markdown. Mostly, Markdown is just regular text with a few non-alphabetic characters thrown in, like `#` or `*`. @@ -839,7 +839,7 @@ To make everything consistent we should agree on spellings and terms here. | `Goguen` | The third era of the Cardano development focused on smart contracts. Named in honour of Joseph Goguen, an US computer scientist. | | `IOHK` | IOHK is now IOG. | | `IOG` | IOG was IOHK. | -| `mainnet` | One word. | +| `Mainnet` | One word. Capitalise when it's a noun (the _Mainnet_) but not when it's an adjective (_mainnet_ functionality), qualified by another proper name (the Cardano _mainnet_), or used as a symbol (e.g. enable Marlowe on `mainnet`). | `Ouroboros` | Ouroboros is a family of Cardano's consensus protocols. There are different flavors: Classic, Praos, Genesis, Chronos, Hydra | | `sidechains` | One word. | | `stake pool` | Two words. | @@ -847,6 +847,7 @@ To make everything consistent we should agree on spellings and terms here. | `Strica` | Creators of Typhon Wallet, Cardanoscan and Flac Finance. Capitalized S, everything else lower case. | | `proof of stake` | Lower case. Hyphenate when followed by a noun: proof-of-stake systems. | | `proof of work` | Lower case. Hyphenate when followed by a noun: proof-of-work systems. | +| `Testnet` | One word. Capitalise when it's a particular testnet (e.g. Preview _testnet_) but not when it's an adjective (e.g. _testnet_ functionality) or referring to more than one (e.g. new iterations of the _testnets_). | | `use case` | Not use-case. | | `Voltaire` | The fifth era of the Cardano development focused on governance and treasury. Named after the French philosopher who prized criticism and argued for the separation of church and state. | | `white paper` | Two words. | diff --git a/docs/smart-contracts/aiken.md b/docs/smart-contracts/aiken.md new file mode 100644 index 0000000000..e7075e2aed --- /dev/null +++ b/docs/smart-contracts/aiken.md @@ -0,0 +1,101 @@ +--- +id: aiken +title: Aiken +sidebar_label: Aiken +description: Aiken +image: /img/aiken-logo.png +--- + +## Introduction + +[Aiken](https://github.com/aiken-lang/aiken) is a new programming language and toolchain for developing smart contracts on the Cardano blockchain. It takes inspiration from many modern languages such as Gleam, Rust, and Elm which are known for friendly error messages and an overall excellent developer experience. + +The language is exclusively used for creating the on-chain validator-scripts. You will need to write your off-chain code for generating transactions in another language such as Rust, Haskell, Javascript, Python etc. + +:::caution + +Aiken is a still a work in progress and is NOT recommended for use in production. + +::: + +## Getting started + +Visit the [Get started with Aiken](/docs/get-started/aiken) to install Aiken from Source or Nix Flakes. + +A comprehensive guide for getting started with Aiken can be found on the [aiken-lang.org](https://aiken-lang.org) website. For more details about the project you might also want to visit the [Aiken git repository](https://github.com/aiken-lang/aiken). + + +### Example contract + +This is a basic validator written in Aiken + +```aiken +use aiken/hash.{Blake2b_224, Hash} +use aiken/list +use aiken/string +use aiken/transaction.{ScriptContext} +use aiken/transaction/credential.{VerificationKey} + +pub type Datum { + owner: Hash, +} + +pub type Redeemer { + msg: ByteArray, +} + +pub fn spend(datum: Datum, redeemer: Redeemer, context: ScriptContext) -> Bool { + let must_say_hello = string.from_bytearray(redeemer.msg) == "Hello, World!" + + let must_be_signed = + list.has(context.transaction.extra_signatories, datum.owner) + + must_say_hello && must_be_signed +} +``` + +### Testing + +Tests can be created directly in Aiken and execute them on-the-fly using the "aiken check" command. + +Below is an example of how such tests can be defined: + +```aiken +use aiken/interval.{Finite, Interval, IntervalBound, PositiveInfinity} + +test must_start_after_succeed_when_lower_bound_is_after() { + let range: ValidityRange = + Interval { + lower_bound: IntervalBound { bound_type: Finite(2), is_inclusive: True }, + upper_bound: IntervalBound { bound_type: PositiveInfinity, is_inclusive: False }, + } + + must_start_after(range, 1) +} + +test must_start_after_suceed_when_lower_bound_is_equal() { + let range: ValidityRange = + Interval { + lower_bound: IntervalBound { bound_type: Finite(2), is_inclusive: True }, + upper_bound: IntervalBound { bound_type: PositiveInfinity, is_inclusive: False }, + } + + must_start_after(range, 2) +} + +test must_start_after_fail_when_lower_bound_is_after() { + let range: ValidityRange = + Interval { + lower_bound: IntervalBound { bound_type: Finite(2), is_inclusive: True }, + upper_bound: IntervalBound { bound_type: PositiveInfinity, is_inclusive: False }, + } + + !must_start_after(range, 3) +} +``` + + +## Links +- [Aiken User-Manual](https://aiken-lang.org/) +- [Aiken Github Repository](https://github.com/aiken-lang/aiken). + diff --git a/docs/smart-contracts/marlowe.md b/docs/smart-contracts/marlowe.md index 7edeb5f6b8..e7ad5d4859 100644 --- a/docs/smart-contracts/marlowe.md +++ b/docs/smart-contracts/marlowe.md @@ -3,7 +3,7 @@ id: marlowe title: Marlowe sidebar_label: Marlowe description: Marlowe -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ## Get started with Marlowe @@ -11,7 +11,7 @@ Marlowe is a domain-specific language (DSL) that enables users to create blockch If you want to learn Marlowe from the ground up, start with [Marlowe Tutorial](https://play.marlowe-finance.io/doc/marlowe/tutorials/index.html), or jump right into the [Marlowe Playground](https://play.marlowe-finance.io): -[![Marlowe Playground](../../static/img/get-started/smart-contracts/marlowe-playground.jpg)](https://alpha.marlowe.iohkdev.io/) +[![Marlowe Playground](../../static/img/get-started/smart-contracts/marlowe-playground.jpg)](https://play.marlowe-finance.io) On the Cardano Forum, you can [dicuss Marlowe](https://forum.cardano.org/c/developers/cardano-marlowe/149) or if you prefer Telegram, there is a special [Marlowe Telegram Group](https://t.me/IOHK_Marlowe). @@ -29,6 +29,82 @@ The design guarantees the following: The Marlowe Playground is a plug-and-play smart contract builder and simulator that is simple to use, visual, and modular. Build, simulate, and analyze Marlowe contracts in this 4-minute tour of the Marlowe Playground. +## Resources for Developing and Deploying Marlowe Contracts + +### How do I run my Marlowe contract on the Cardano blockchain? + +1. Design your contract using [Marlowe Playground](https://play.marlowe-finance.io/#/). +2. Press the `Send to Simulator` button and then press `Download as JSON` to download your contract in JSON format. +3. *If you want to run your contract at the command line using `marlowe-cli`,* install [`marlowe-cli`](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe-cli/ReadMe.md#installation) and follow the instructions [Running Contracts with Marlowe CLI](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe-cli/lectures/04-marlowe-cli-concrete.md). A video lecture playlist [Marlowe CLI](https://www.youtube.com/playlist?list=PLNEK_Ejlx3x0GbvCw-61e9VfRafBT1JSw) provides an overview of the `marlowe-cli` tool. +4. *If you want to run your contract in a Jupyter notebook,* then use git to clone [github.com/input-output-hk/marlowe-cardano](https://github.com/input-output-hk/marlowe-cardano), run `nix develop --command jupyter-lab` from the `marlowe-cli/` folder, open the notebook [Marlowe CLI Lecture 4](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe-cli/lectures/04-marlowe-cli-concrete.ipynb), and follow the instructions. A video lecture [Running a Marlowe Contract with Marlowe CLI](https://www.youtube.com/watch?v=DmF7dIKmJMo&list=PLNEK_Ejlx3x0GbvCw-61e9VfRafBT1JSw&index=4) demonstrates running a contract from within a Jupyter notebook. +5. *If you want to run your contract from the command-line using the Marlowe Runtime backend,* then follow the [tutorial for Marlowe Runtime](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe-runtime/doc/tutorial.ipynb). A video [Marlowe Runtime Tutorial](https://youtu.be/WlsX9GhpKu8) demonstrates its use. +6. *If you want to run your contract using Marlowe Lambda,* follow the example for [using Marlowe Lambda from the command line](https://github.com/input-output-hk/marlowe-lambda/blob/main/examples/zcb.ipynb) or study the example [web application for Marlowe Lambda](https://github.com/input-output-hk/marlowe-lambda/tree/main/web). Videos [Marlowe Lambda at the Command Line](https://youtu.be/huXbRyrmW60) and [Marlowe Lambda in the Browser](https://youtu.be/o5m_y5l_i_g) demonstrate the use of Marlowe Lambda. + +### Why can't I run my Marlowe contract on Mainnet? + +- Marlowe's audit is not complete, so it is not advisable to run Marlowe contracts on Mainnet. +- However, a pull request [enable Marlowe on `mainnet`](https://github.com/input-output-hk/marlowe-cardano/pull/377) modifies Marlowe tools for running on Mainnet. + +### GitHub repositories + +- [Marlowe language and semantics](https://github.com/input-output-hk/marlowe) +- [Marlowe Improvement Proposals (MIPs)](https://github.com/input-output-hk/MIPs) +- [Marlowe on Cardano](https://github.com/input-output-hk/marlowe-cardano) +- [Marlowe Playground](https://github.com/input-output-hk/marlowe-playground) +- [PureScript implementation of Marlowe](https://github.com/input-output-hk/purescript-marlowe) +- [ACTUS in Marlowe](https://github.com/input-output-hk/marlowe-actus-labs) +- [AWS Lambda service for Marlowe Runtime](https://github.com/input-output-hk/marlowe-lambda) + +### Developer Discussions + +- [Marlowe on Cardano Forum](https://forum.cardano.org/c/developers/cardano-marlowe/149) +- [\#marlowe on Cardano StackExchange](https://cardano.stackexchange.com/questions/tagged/marlowe) +- [\#ask-marlowe on Discord](https://discord.com/channels/826816523368005654/936295815926927390) +- [IOG\_Marlowe on Telegram](https://t.me/IOHK_Marlowe) +- [Discussion of improvements to Marlowe](https://github.com/input-output-hk/MIPs/discussions) +- [Discussion of changes to Marlowe's implementation on Cardano](https://github.com/input-output-hk/marlowe-cardano/discussions) + +### Specifications + +- [Marlowe Specification, Version 3](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe/specification/marlowe-isabelle-specification-4f9fa249fa51ec09a4f286099d5399eb4301ed49.pdf) +- [Marlowe-Cardano Specification](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe/specification/marlowe-cardano-specification.md) + +### Testing and debugging + +- [The Marlowe Debugging Cookbook](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe/debugging-cookbook.md) +- [Marlowe Test Report](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe/test/test-report.md) + +### Tools + +- [Marlowe CLI](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe-cli/ReadMe.md): a command-line interface for running Marlowe contracts on the Cardano blockchain. +- [Marlowe Runtime](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe-runtime/doc/ReadMe.md): an application back-end for running Marlowe contracts on the Cardano blockchain. +- [Marlowe Lambda](https://github.com/input-output-hk/marlowe-lambda): an AWS Lambda client for Marlowe Runtime. + +### Examples + +- [Gallery of Marlowe Contracts on Cardano Mainnet (Real World Marlowe)](https://github.com/input-output-hk/real-world-marlowe) +- [Index of example Marlowe contracts and their on-chain execution](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe/example-contracts.md) +- [Marlowe Cookbook](https://github.com/input-output-hk/marlowe-cardano/tree/main/marlowe-cli/cookbook/ReadMe.md) +- [Marlowe Runtime Tutorial](https://github.com/input-output-hk/marlowe-cardano/blob/main/marlowe-runtime/doc/tutorial.md) +- [Marlowe Runtime examples](https://github.com/input-output-hk/marlowe-cardano/tree/main/marlowe-runtime/examples/ReadMe.md) +- [Haskell examples of Marlowe contracts](https://github.com/input-output-hk/marlowe-cardano/tree/main/marlowe-contracts) +- [ACTUS contracts in Marlowe](https://github.com/input-output-hk/marlowe-cardano/tree/main/marlowe-actus) + +### Videos + +- [Marlowe Pioneers 1st Cohort](https://www.youtube.com/@iogacademy9189/playlists?view=50&sort=dd&shelf_id=2) + 1. [Welcome](https://www.youtube.com/playlist?list=PLNEK_Ejlx3x3xkV0OQ0PjRaCtlbPhL0Eg) + 2. [Using Marlowe](https://www.youtube.com/playlist?list=PLNEK_Ejlx3x1o4Hv1GC_0kxXnquikXl70) + 3. [Marlowe in Depth](https://www.youtube.com/playlist?list=PLNEK_Ejlx3x0beuXQwbcy58pAIyF4kASc) + 4. [Marlowe Embedded in Haskell and JavaScript](https://www.youtube.com/playlist?list=PLNEK_Ejlx3x0maFKSYpW-17FV0B0MbAoW) + 5. [Marlowe and Standardization / ACTUS](https://www.youtube.com/playlist?list=PLNEK_Ejlx3x0KLofo1maCkO3AYjQKknz-) + 6. [Assurance and Convenience](https://www.youtube.com/playlist?list=PLNEK_Ejlx3x3PArP4vcu4WV0Z5xV0OLhy) + 7. [Marlowe CLI](https://www.youtube.com/playlist?list=PLNEK_Ejlx3x0GbvCw-61e9VfRafBT1JSw) +- [Using the Marlowe Runtime backend to execute a Marlowe contract on Cardano's preview network](https://youtu.be/WlsX9GhpKu8) +- [Marlowe Lambda at the Command Line](https://youtu.be/huXbRyrmW60) +- [Marlowe Lambda in the Browser](https://youtu.be/o5m_y5l_i_g) +- [A Geo-Located Smart Contract Using Cardano Beam and Marlowe](https://youtu.be/DmkYen0eaV0) + ## Presentations - [Blockchain Essentials](https://www.youtube.com/watch?v=yi8-xaoTQT4) - [Domain-specific languages](https://www.youtube.com/watch?v=T4W19TdJHMw) diff --git a/docs/smart-contracts/opshin.md b/docs/smart-contracts/opshin.md new file mode 100644 index 0000000000..49da864b19 --- /dev/null +++ b/docs/smart-contracts/opshin.md @@ -0,0 +1,69 @@ +--- +id: opshin +title: opshin +sidebar_label: opshin +description: opshin +image: /img/logo-opshin.png +--- + +## Introduction + +[opshin](https://github.com/OpShin/opshin) is a programming language for developing smart contracts on the Cardano blockchain. +Its syntax is 100% valid Python code and it ensures that contracts evaluate on-chain +exactly as their Python counterpart. +This allows unit tests and verification of the Python code using standard tooling available for Python development. +Existing IDEs, linters and language servers may be re-used as well. +Note that the type system of opshin is much stricter than the type system of Python, so that many optimizations can be implemented and an elevated level of security is provided. + +The language interacts closely with the python library [PyCardano](https://pycardano.readthedocs.io/en/latest/index.html). +The internal data structures are defined with data types compatible to the library and allow a tight combination of off- and on-chain code, all written in Python. + +:::caution + +opshin is a still a work in progress and is NOT recommended for use in production. + +::: + +## Getting started + +A complete example on a small written contract and off-chain code to deploy it on-chain can be found in the [opshin-starter-kit](https://github.com/OpShin/opshin-starter-kit) repository. +It contains code that will compile the contract and deploy it to the preview testnet, runnable in demeter.run, in your browser. + +### Example contract + +This is a basic validator written in opshin: + +```python +from opshin.prelude import * + + +@dataclass() +class WithdrawDatum(PlutusData): + pubkeyhash: bytes + + +def validator(datum: WithdrawDatum, redeemer: None, context: ScriptContext) -> None: + sig_present = False + for s in context.tx_info.signatories: + if datum.pubkeyhash == s: + sig_present = True + assert sig_present, "Required signature missing" +``` + +It checks the presence of a specific signature in the transaction to approve spending funds. +We can compile the contract like this + +```bash +$ python3 -m pip install opshin +$ opshin build contract.py +``` + +The result is a directory filled with the contract address, policy ID and data that will be used by off-chain libraries to interact with the contract. + + +## Links +- [opshin Github Repository](https://github.com/OpShin/opshin). +- [opshin pioneer program](https://github.com/OpShin/opshin-pioneer-program) +- [opshin starter kit](https://github.com/OpShin/opshin-starter-kit) +- [PyCardano Smart Contract documentation](https://pycardano.readthedocs.io/en/latest/guides/plutus.html). + diff --git a/docs/smart-contracts/overview.md b/docs/smart-contracts/overview.md index 05836d5823..8e97b02332 100644 --- a/docs/smart-contracts/overview.md +++ b/docs/smart-contracts/overview.md @@ -4,7 +4,7 @@ slug: /smart-contracts/ title: Smart Contracts sidebar_label: Overview description: Learn how to create smart contracts on Cardano. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ![Smart Contracts](../../static/img/card-smart-contracts-title.svg) @@ -24,5 +24,9 @@ In another world, you'd like to build programs, possibly even replace a major co - The smart contract is a piece of code that allows a decentralized system to operate. ## Programming languages +- [Aiken](aiken) - for on-chain validator scripts only: a language & toolchain favouring developer experience. - [Marlowe](marlowe) - a domain-specific language, it covers the world of financial contracts. +- [opshin](opshin) - a programming language for generic Smart Contracts based on Python. - [Plutus](plutus) - a platform to write full applications that interact with the Cardano blockchain. +- [plu-ts](plu-ts) - Typescript-embedded smart contract programming language and a transaction creation library. + diff --git a/docs/smart-contracts/plu-ts.md b/docs/smart-contracts/plu-ts.md new file mode 100644 index 0000000000..dd53be3272 --- /dev/null +++ b/docs/smart-contracts/plu-ts.md @@ -0,0 +1,63 @@ +--- +id: plu-ts +title: plu-ts +sidebar_label: plu-ts +description: plu-ts +image: /img/plu_ts-logo.svg +--- + +## Introduction + +[`plu-ts`](https://github.com/HarmonicLabs/plu-ts) is a Typescript-embedded programming language and library for developing smart contracts on the Cardano blockchain. It is designed for smart contract efficiency while staying as close as possible to the Typescript syntax. + +The tool is composed by the eDSL that allows you to create smart contracts and compile them; and an off-chain library that introuduces all the types required to interact with the Cardano ledger and create transactions. + +## Getting started + +Visit the [Get started with plu-ts](/docs/get-started/plu-ts) to install plu-ts unsing `npm` and setup your project. + +You can find the documentatition for `plu-ts` at [pluts.harmoniclabs.tech](https://pluts.harmoniclabs.tech/docs/intro). + +If you need help feel free to open issues at the [`plu-ts` git repository](https://github.com/HarmonicLabs/plu-ts). + + +### Example contract + +some example projects can be found [in the `plu-ts` documentation](https://pluts.harmoniclabs.tech/docs/category/examples); + +here we report the `Hello plu-ts` contract; to see how it works you can follow [the example project](https://pluts.harmoniclabs.tech/docs/examples/Hello%20World#run-the-template). + +```ts +import { bool, compile, makeValidator, PaymentCredentials, pBool, pfn, Script, ScriptType, PScriptContext, bs, PPubKeyHash } from "@harmoniclabs/plu-ts"; + +const contract = pfn([ + PPubKeyHash.type, + bs, + PScriptContext.type +], bool) +(( owner, message, ctx ) => { + + const isBeingPolite = message.eq("Hello plu-ts"); + + const signedByOwner = ctx.tx.signatories.some( owner.eqTerm ); + + return isBeingPolite.and( signedByOwner ); +}); + +// all validators must be untyped once on-chain +export const untypedValidator = makeValidator( contract ); + +// here we get the raw bytes of the contract +export const compiledContract = compile( untypedValidator ); + +// the `script` object can be used offchain +export const script = new Script( + ScriptType.PlutusV2, + compiledContract +); +``` + +## Links +- [`plu-ts` documentation](https://pluts.harmoniclabs.tech/docs/intro) +- [`plu-ts` Github Repository](https://github.com/HarmonicLabs/plu-ts). + diff --git a/docs/smart-contracts/plutus.md b/docs/smart-contracts/plutus.md index c7a96835e9..23543df8a8 100644 --- a/docs/smart-contracts/plutus.md +++ b/docs/smart-contracts/plutus.md @@ -3,21 +3,21 @@ id: plutus title: Plutus sidebar_label: Plutus description: Plutus -image: ../img/og-developer-portal.png ---- +image: /img/og/og-developer-portal.png +--- -## Get started with Plutus +## Get started with Plutus Plutus is the smart contract platform of the Cardano blockchain. It allows you to write applications that interact with the Cardano blockchain. -Take a look at the [Plutus Tutorial](https://plutus.readthedocs.io/en/latest/tutorials/) if you want to learn Plutus from the beginning. If you don't know Haskell yet, consider [starting with Haskell](#get-started-with-haskell). +Take a look at the [Plutus Tutorial](https://plutus.readthedocs.io/en/latest/tutorials/) if you want to learn Plutus from the beginning or see [Plutus resources](https://docs.cardano.org/plutus/plutus-resources), where you can find references to all Plutus-related repositories, documentation, and training materials. If you don't know Haskell yet, consider [starting with Haskell](#get-started-with-haskell). -[Follow Chris Moreton's content updates](https://plutus-pioneer-program.readthedocs.io/en/latest/plutus_pioneer_program.html). With a high effort he transcribes the lectures of the Plutus Pioneer Program. +[Follow Chris Moreton's content updates](https://plutus-pioneer-program.readthedocs.io/en/latest/plutus_pioneer_program.html). With a high effort he transcribes the lectures of the Plutus Pioneer Program. -Talk to others about [Plutus on the Cardano Forum](https://forum.cardano.org/c/developers/cardano-plutus/148) or if you prefer Discord +Talk to others about [Plutus on the Cardano Forum](https://forum.cardano.org/c/developers/cardano-plutus/148) or if you prefer Discord head to the the [IOG Technical Discord](https://discord.com/invite/w6TwW9bGA6). ## The Plutus platform -In this Video Michael Peyton-Jones starts by walking us through working with Plutus. Plutus allows all programming to be done from a single Haskell library. This lets users build secure applications, forge new assets, and create smart contracts in a predictable, deterministic environment with the highest level of assurance. Furthemore, developers don’t have to run a full Cardano node to test their work. +In this Video Michael Peyton-Jones starts by walking us through working with Plutus. Plutus allows all programming to be done from a single Haskell library. This lets users build secure applications, forge new assets, and create smart contracts in a predictable, deterministic environment with the highest level of assurance. Furthemore, developers don’t have to run a full Cardano node to test their work. Jann Müller then takes us through the Plutus Application Platform, where assets can be built and launched. He also demonstrates how tokens can be transferred using a smart contract. With Plutus you can: @@ -27,29 +27,21 @@ Jann Müller then takes us through the Plutus Application Platform, where assets -## Plutus Playground -The Plutus Playground is a code editor and simulator in one. - -[![Plutus Playground](../../static/img/get-started/smart-contracts/plutus-playground.jpg)](https://playground.plutus.iohkdev.io) - -There is a written tutorial on [how to compile and test a Plutus App](https://plutus.readthedocs.io/en/latest/plutus/tutorials/plutus-playground.html) or you can watch this video tutorial: - - ## Further Tutorials -- [Writing a basic Plutus app in the Plutus Playground](https://plutus.readthedocs.io/en/latest/plutus/tutorials/basic-apps.html) -- [Using Plutus Tx](https://plutus.readthedocs.io/en/latest/plutus/tutorials/plutus-tx.html) -- [Writing basic validator scripts](https://plutus.readthedocs.io/en/latest/plutus/tutorials/basic-validators.html) -- [Writing basic minting policies](https://plutus.readthedocs.io/en/latest/plutus/tutorials/basic-minting-policies.html) -- [Property-based testing of Plutus contracts](https://plutus.readthedocs.io/en/latest/plutus/tutorials/contract-testing.html) +- [Writing a basic Plutus app](https://plutus-apps.readthedocs.io/en/latest/plutus/tutorials/basic-apps.html) +- [Using Plutus Tx](https://plutus.readthedocs.io/en/latest/tutorials/plutus-tx.html) +- [Writing basic validator scripts](https://plutus.readthedocs.io/en/latest/tutorials/basic-validators.html) +- [Writing basic minting policies](https://plutus.readthedocs.io/en/latest/tutorials/basic-minting-policies.html) +- [Property-based testing of Plutus contracts](https://plutus-apps.readthedocs.io/en/latest/plutus/tutorials/contract-testing.html) ## How-to guides -- [How to export scripts, datums and redemmers](https://plutus.readthedocs.io/en/latest/plutus/howtos/exporting-a-script.html) -- [How to write a scalable Plutus app](https://plutus.readthedocs.io/en/latest/plutus/howtos/writing-a-scalable-app.html) -- [How to handle blockchain events](https://plutus.readthedocs.io/en/latest/plutus/howtos/handling-blockchain-events.html) -- [How to analyse the cost and size of Plutus scripts](https://plutus.readthedocs.io/en/latest/plutus/howtos/analysing-scripts.html) +- [How to export scripts, datums and redeemers](https://plutus.readthedocs.io/en/latest/howtos/exporting-a-script.html) +- [How to write a scalable Plutus app](https://plutus-apps.readthedocs.io/en/latest/plutus/howtos/writing-a-scalable-app.html) +- [How to handle blockchain events](https://plutus-apps.readthedocs.io/en/latest/plutus/howtos/handling-blockchain-events.html) +- [How to analyse the cost and size of Plutus scripts](https://plutus-apps.readthedocs.io/en/latest/plutus/howtos/analysing-scripts.html) ## Get started with Haskell -Haskell is the programming language for Plutus contracts. If you are looking for the best guide to Haskell and unsure where to start, we recommend you check out the book or website [Learn You a Haskell for Great Good](http://learnyouahaskell.com/introduction) by Miran Lipovača. +Haskell is the programming language for Plutus contracts. If you are looking for the best guide to Haskell and unsure where to start, we recommend you check out the book or website [Learn You a Haskell for Great Good](http://learnyouahaskell.com/introduction) by Miran Lipovača. Learning Haskell is made easy with this illustrated guide, one of the most engaging ways to learn this fascinating programming language. @@ -58,11 +50,33 @@ Another great learning resource is the online course [Haskell and Crypto Mongoli If you are coming from a Python background, there is an informative project [py2hs](https://github.com/cffls/py2hs) that explains essential Haskell concepts using Python. ## Get started with the Plutus pioneer program -The Plutus pioneer program was created in order to recruit and train developers in Plutus for the Cardano ecosystem. By entering the program, you will become part of a group with early access to a set of courses that teach you the core principles of how to code in both Haskell and Plutus. It will be highly interactive, with weekly videos, exercises, and Q&A sessions and exclusive access to the creators and key experts in the language. -**This course is not for coding beginners.** You do not need to be an expert in formal methods, but programming experience and a general aptitude for logical and mathematical thinking are highly advisable. We recommend to [get started with Haskell](#get-started-with-haskell) before taking the course. +The [Plutus Pioneer Program](https://github.com/input-output-hk/plutus-pioneer-program) was created in order to recruit and train developers in Plutus for the Cardano ecosystem. You can complete this programm at your own pace or sign up for an active iteration of the program. By entering the program, you will become part of a group that communicates on Discord and holds live weekly QA sessions. The course teaches you the core principles of how to code in both Haskell and Plutus. It is highly interactive, with weekly videos, exercises, and Q&A sessions and exclusive access to the creators and key experts in the language. + +Beside the videos you can also read the book based on the Plutus Pioneer Program. The book is written once an iteration of the Pioneer Program comes to an end. It exists from the 3rd iteration on and can be found in the *book/* folder of the Pioneer program github repository. + +**This course is not for coding beginners.** You do not need to be an expert in formal methods, but programming experience and a general aptitude for logical and mathematical thinking are highly advisable. We recommend to [get started with Haskell](#get-started-with-haskell) before taking the course. The IOG education team that created the Priooner program also offers a [Haskell course](https://github.com/input-output-hk/haskell-course) that you can at you own pace. Prior knowledge of Haskell or functional programming is also recommended, as Plutus is heavily based on Haskell and includes advanced features like Template Haskell, type-level programming, and effect systems. -- [Apply for the Plutus Pioneer Program](https://testnets.cardano.org/en/plutus-pioneer-program/) +- [Apply for the Plutus Pioneer Program](https://input-output.typeform.com/to/au0XDcBP) + +## Plutus Project-Based Learning (PPBL) + +[Plutus Project-Based Learning](https://en.plutuspbl.io/) is a free course from [Gimbalabs](https://www.gimbalabs.com/) that provides a hands-on approach to learning Cardano development. The goal of PPBL is to onboard contributors to real projects. + +PPBL is built to complement the [Plutus Pioneer Program](#get-started-with-the-plutus-pioneer-program). Students can complete both courses in any order they choose. Students can prepare for the Plutus Pioneer Program by working through the PPBL course, or they can apply what they have learned in PPP by joining the PPBL course. + +PPBL takes a big-picture view of Cardano development so that students can learn to contextualize the role of smart contracts in full-stack Cardano applications. Course embedded projects give students the chance to investigate new design patterns, and to learn about questions at the frontiers of Cardano development. + +At weekly [Live Coding sessions](https://en.plutuspbl.io/live-coding), students gather to share questions and to build projects together. + +The PPBL 2023 Course is currently going live in English, French, Indonesian, Japanese, Spanish, and Vietnamese. + +- [Get started with the free PPBL 2023 course](https://en.plutuspbl.io/live-coding) +- [Review the PPBL 2023 Course Outline](https://en.plutuspbl.io/get-started/modules) + +## Demeter + +Demeter is a web-based development platform providing a full suite of tools for building Cardano dApps end-to-end. It features starter-kits for a range of different project types including Plutus: [Plutus Starter Kit](https://github.com/txpipe/plutus-starter-kit). -You can also check out the book "Plutus - Learning a smart-contract language" that follows the 3rd iteration of the Plutus pioneer programm and contains all code examples from the course. The book is availabe at this repository: https://github.com/LukaKurnjek/plutus-pioneer-program. +[Demeter.run](https://demeter.run) provides a free tier of their service where you can get started experimenting with Plutus. diff --git a/docs/stake-pool-course/assignments/assignment-1.md b/docs/stake-pool-course/assignments/assignment-1.md index cd85116976..09b9cf8f3e 100644 --- a/docs/stake-pool-course/assignments/assignment-1.md +++ b/docs/stake-pool-course/assignments/assignment-1.md @@ -3,7 +3,7 @@ id: assignment-1 title: Assignment 1 sidebar_label: Assignment 1 description: "Stake pool course: Assignment 1." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- Try to complete this task from what you have learned so far: diff --git a/docs/stake-pool-course/assignments/assignment-2.md b/docs/stake-pool-course/assignments/assignment-2.md index a9f90a7cfe..af7e78051c 100644 --- a/docs/stake-pool-course/assignments/assignment-2.md +++ b/docs/stake-pool-course/assignments/assignment-2.md @@ -3,7 +3,7 @@ id: assignment-2 title: Assignment 2 sidebar_label: Assignment 2 description: "Stake pool course: Assignment 2." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- :::note diff --git a/docs/stake-pool-course/assignments/kes_period.md b/docs/stake-pool-course/assignments/kes_period.md index f7adf2a0e3..0e9ad5073d 100644 --- a/docs/stake-pool-course/assignments/kes_period.md +++ b/docs/stake-pool-course/assignments/kes_period.md @@ -2,54 +2,211 @@ id: kes_period title: KES Periods sidebar_label: KES periods -description: "Stake pool course: KES period assignment." -image: ../img/og-developer-portal.png +description: "Stake pool course: KES period assignment." +image: /img/og/og-developer-portal.png --- -To create an operational certificate for a block-producing node, you need to create a _KES key pair_. +To create an Operational Certificate for a block-producing node, you need a _KES key pair_. -Here "KES" stands for _**K**ey **E**volving **S**ignature_, which means that after a certain _period_, the key will _evolve_ to a new key and discard its old version. This is useful, because it means that even if an attacker compromises the key and gets access to the signing key, he can only use that to sign blocks _from now on_, but not blocks dating from _earlier periods_, making it impossible for the attacker to rewrite history. +Here "KES" stands for _**K**ey **E**volving **S**ignature_, which means that after a certain _period_, the key will _evolve_ to a new key +and discard its old version. This is useful, because it means that even if an attacker compromises the key and gets access to the signing key, he can only use that to sign blocks _from now on_, but not blocks dating from _earlier periods_, making it impossible for the attacker to rewrite history. To generate a new KES key pair, see below. -Unfortunately, there is a catch: A KES key can only evolve for a certain number of periods and becomes useless afterwards. This means that before that number of periods has passed, the node operator has to generate a new KES key pair, issue a new operational node certificate with that new key pair and restart the node with the new certificate. +A KES key can only evolve for a certain number of periods and becomes useless afterwards. +This means that before that number of periods has passed, the node operator has to generate a new KES key pair, issue a new operational node certificate with that new key pair and restart the node with the new certificate. -In order to find out how long one period is and for how long a key can evolve, we can look into the _genesis file_. If that file is called `shelley_testnet-genesis.json`, we can type +### KES key generation +```bash +cardano-cli node key-gen-KES \ + --verification-key-file kes.vkey \ + --signing-key-file kes.skey ``` -cat shelley_testnet-genesis.json | grep KES -> "slotsPerKESPeriod": 3600, -> "maxKESEvolutions": 120, +To find out how long one period is and for how long a key can evolve, we can look into the _genesis file_. If that file is called `mainnet-shelley-genesis.json`, +we can type: + +```bash +cat mainnet-shelley-genesis.json | grep KES +"slotsPerKESPeriod": 129600, +"maxKESEvolutions": 62, +``` + +The key will evolve after each period of 129600 slots and it can evolve up to 62 times before it needs to be renewed. + +Before we can create an Operational Certificate for our node, we need to figure out the start of the KES validity period, i.e. which KES evolution period we are in. + +We check the current tip of the blockchain: + +```bash +cardano-cli query tip --mainnet +{ + "epoch": 259, + "hash": "dbf5104ab91a7a0b405353ad31760b52b2703098ec17185bdd7ff1800bb61aca", + "slot": 26633911, + "block": 5580350 +} ``` -and we see that in this example, the key will evolve after each period of 3600 slots and that it can evolve 120 times before it needs to be renewed. +In this example, we are currently in slot 26633911, and we know from the genesis file that one period lasts for 129600 slots. So we calculate the current period: -Before we can create an operational certificate for our node, we need to figure out the start of the KES validity period, i.e. which KES evolution period we are in. We check the current slot \(assuming our relay node socket file is at `$HOME/cardano-node/relay/db/node.socket`\): +```bash +expr 26633911 / 129600 +> 205 +``` + +### Issue Operational Certificate +```bash +cardano-cli node issue-op-cert \ + --kes-verification-key-file kes.vkey \ + --cold-signing-key-file cold.skey \ + --operational-certificate-issue-counter opcert.counter \ + --kes-period 205 \ + --out-file opcert.cert ``` -export CARDANO_NODE_SOCKET_PATH=$HOME/cardano-node/relay/db/node.socket -cardano-cli shelley query tip --testnet-magic 1097911063 +**This command increments the cold counter by 1.** + +## :warning: Vasil hard fork breaking changes + +Note that from the Vasil hard fork onwards there is a new rule for the opcert.counter: + +A new Operational Certificate will be considered valid only if its counter value is exactly one more than the previous Operational Certificate that has successfully minted at least one block. + +Prior to Vasil, it was permitted to use any strictly larger counter value than used on chain previously, but this is no longer permitted. It must be incremented by exactly one. In particular, this means one cannot use the current time or slot number as a counter value. + +### Find the counter value used on-chain + +To find out the current **Operational Certificate Counter** registered on-chain, run: + +```bash +> cardano-cli query kes-period-info --testnet-magic 42 --op-cert-file node-spo3/opcert.cert +``` + +``` +✓ Operational certificate's KES period is within the correct KES period interval +✓ The operational certificate counter agrees with the node protocol state Operational Certificate { - "blockNo": 27470, - "headerHash": "bd954e753c1131a6cb7ab3a737ca7f78e2477bea93db54511cedefe8899ebed0", - "slotNo": 656260 + "qKesCurrentKesPeriod": 15, + "qKesEndKesInterval": 18, + "qKesKesKeyExpiry": null, + "qKesMaxKESEvolutions": 6, + "qKesNodeStateOperationalCertificateNumber": 3, + "qKesOnDiskOperationalCertificateNumber": 3, + "qKesRemainingSlotsInKesPeriod": 690, + "qKesSlotsPerKesPeriod": 300, + "qKesStartKesInterval": 12 } ``` -In this example, we are currently in slot 656260, and we know from the genesis file that one period lasts for 3600 slots. So we calculate the current period by +Where: + +* `"qKesNodeStateOperationalCertificateNumber": 3,` is the last counter registered **OnChain** to forge a block. + +and + +* `"qKesOnDiskOperationalCertificateNumber": 3,` is the counter value of your **OnDisk** operational certificate. + +When your pool has already forged a block with the current Operational Certificate the above values will match. +If your pool has **not** yet forged a block with the current Operational Certificate, `cardano-cli query kes-period-info` shows that `"qKesOnDiskOperationalCertificateNumber"` is greater than `"qKesNodeStateOperationalCertificateNumber"` by exactly one (1), for example: + +```json +"qKesNodeStateOperationalCertificateNumber": 2, +"qKesOnDiskOperationalCertificateNumber": 3, ``` -expr 656260 / 3600 -> 182 + +Once your pool forges a block `qKesNodeStateOperationalCertificateNumber` will be updated accordingly **(OnChain)** and these values will be the same. + +### How do I know if I have issued an _invalid_ Operational Certificate + +Run `cardano-cli query kes-period-info` right after you have created the new Operational Certificate. If the **OnDisk** counter differs from the **OnChain** counter by more than 1, your certificate will be _invalid_, for example: + +```json +"qKesNodeStateOperationalCertificateNumber": 2, +"qKesOnDiskOperationalCertificateNumber": 4, ``` -With this we are able to generate an operational certificate for our stake pool (assuming the same file names as [here](../handbook/generate-stake-pool-keys)): +Any blocks forged with such a certificate will be _invalid blocks_. + +Issuing a **valid certificate** after having issued an **invalid** one requires a new **Operational Certificate Counter** and a new Operatinal Certificate. + +### No blocks forged with current operational certificate. What to do with the counter? + +Keep in mind that the new rule is that the counter must be **one** more than the last counter used to _actually_ forge a block in the _current chain_. + +**If we have incremented the counter on a previous Operational Certificate but we have NOT forged a block with it, the counter must not be incremented again when issuing a new Operational Certificate i.e it remains the same. In this case we need to issue a new Counter before we issue the new Operational Certificate.** + +**See: Issue new counter and Operational Certificate below.** + +Note that in this scenario we **cannot** use `cardano-cli node issue-op-cert...` right away to issue a new Operational Certificate because this would increment the **OnDisk** counter by 1 more, resulting in an invalid certificate, for example: + +``` +"qKesNodeStateOperationalCertificateNumber": 2, +"qKesOnDiskOperationalCertificateNumber": 4, +``` + +If we issue a certificate with such a counter, any block we forge with it will be an **Invalid Block**. The node logs will show the error: + +``` +Invalid block 237602735e6b56985109480aefbc4821f57e6389736be238ffbec4c0188f9702 at slot 5206: ExtValidationErrorHeader (HeaderProtocolError (HardForkValidationErrFromEra S (S (S (S (S (Z (WrapValidationErr {unwrapValidationErr = CounterOverIncrementedOCERT 2 4})))))))) +``` + +### Issue new counter and Operational Certificate + +**On a running node:** + +1. Query `kes-period-info`. You can save the json output to a file using the `--out-file` flag + +```bash +> cardano-cli query kes-period-info --testnet-magic 42 --op-cert-file node-spo3/opcert.cert --out-file kes_period_info.json + +> cat kes_period_info.json + +> +{ + "qKesCurrentKesPeriod": 18, + "qKesEndKesInterval": 18, + "qKesKesKeyExpiry": null, + "qKesMaxKESEvolutions": 6, + "qKesNodeStateOperationalCertificateNumber": 2, + "qKesOnDiskOperationalCertificateNumber": 4, + "qKesRemainingSlotsInKesPeriod": 198, + "qKesSlotsPerKesPeriod": 300, + "qKesStartKesInterval": 12 +} ``` -cardano-cli shelley node issue-op-cert \ - --kes-verification-key-file kes.vkey \ - --cold-signing-key-file cold.skey \ - --operational-certificate-issue-counter cold.counter \ - --kes-period 182 \ - --out-file node.cert + +**On your cold environment:** + +2. Create a new Counter + +Take the **OnChain** Counter from above. In this case `"qKesNodeStateOperationalCertificateNumber": 2` and increment it by exactly 1 when issuing the new Counter: + +```bash +cardano-cli node new-counter \ + --cold-verification-key-file cold.vkey \ + --counter-value $((2 + 1)) \ + --operational-certificate-issue-counter-file opcert.counter ``` + +3. Generate new KES keys if needed (because of _MaxKESEvolutions_ reached): + +```bash +cardano-cli node key-gen-KES \ + --verification-key-file kes.vkey \ + --signing-key-file kes.skey +``` + +4. Issue the new Operational Certificate: + +```bash + cardano-cli node issue-op-cert --kes-verification-key-file kes.vkey \ + --cold-signing-key-file cold.skey \ + --operational-certificate-issue-counter-file opcert.counter \ + --kes-period 18 \ + --out-file opcert.cert +``` + +5. Copy the new `opcert.cert` and `kes.skey` to your block producer node and restart it. diff --git a/docs/stake-pool-course/handbook/apply-logging-prometheus.md b/docs/stake-pool-course/handbook/apply-logging-prometheus.md index 4299d81a35..ee3841ea13 100644 --- a/docs/stake-pool-course/handbook/apply-logging-prometheus.md +++ b/docs/stake-pool-course/handbook/apply-logging-prometheus.md @@ -3,7 +3,7 @@ id: apply-logging-prometheus title: Monitoring a Node with Prometheus sidebar_label: Monitoring a node with Prometheus description: "Stake pool course: Monitoring a node with Prometheus." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- Open the port 12798, as it is the default port for prometheus, as from the `config.json` file. diff --git a/docs/stake-pool-course/handbook/configure-topology-files.md b/docs/stake-pool-course/handbook/configure-topology-files.md index 47bd0cce19..5a4003c7ba 100644 --- a/docs/stake-pool-course/handbook/configure-topology-files.md +++ b/docs/stake-pool-course/handbook/configure-topology-files.md @@ -3,7 +3,7 @@ id: configure-topology-files title: Configure Topology Files sidebar_label: Configure topology files description: "Stake pool course: Learn how to create stake pool keys." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- Before you start your nodes, you need to prepare the topology files for block-producing and relay nodes. diff --git a/docs/stake-pool-course/handbook/create-simple-transaction.md b/docs/stake-pool-course/handbook/create-simple-transaction.md index e55196b440..6f01ace07f 100644 --- a/docs/stake-pool-course/handbook/create-simple-transaction.md +++ b/docs/stake-pool-course/handbook/create-simple-transaction.md @@ -3,7 +3,7 @@ id: create-simple-transaction title: Create Simple Transaction sidebar_label: Create simple transaction description: "Stake pool course: Learn how to create simple transaction." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- Creating a transaction requires various steps: diff --git a/docs/stake-pool-course/handbook/create-stake-pool-keys.md b/docs/stake-pool-course/handbook/create-stake-pool-keys.md index f27d3a2e7c..3d6b05b11a 100644 --- a/docs/stake-pool-course/handbook/create-stake-pool-keys.md +++ b/docs/stake-pool-course/handbook/create-stake-pool-keys.md @@ -3,7 +3,7 @@ id: create-stake-pool-keys title: Create Stake Pool Keys sidebar_label: Create stake pool keys description: "Stake pool course: Learn how to create stake pool keys." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- In the Shelley era of Cardano, every stakeholder can have two sets of keys and addresses: diff --git a/docs/stake-pool-course/handbook/generate-stake-pool-keys.md b/docs/stake-pool-course/handbook/generate-stake-pool-keys.md index 9f5644bb13..d9f8f368e4 100644 --- a/docs/stake-pool-course/handbook/generate-stake-pool-keys.md +++ b/docs/stake-pool-course/handbook/generate-stake-pool-keys.md @@ -3,7 +3,7 @@ id: generate-stake-pool-keys title: Generate Stake Pool Keys sidebar_label: Generate stake pool keys description: "Stake pool course: Generate stake pool keys." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ## Stake key pair diff --git a/docs/stake-pool-course/handbook/grafana-loki.md b/docs/stake-pool-course/handbook/grafana-loki.md new file mode 100644 index 0000000000..d333191af6 --- /dev/null +++ b/docs/stake-pool-course/handbook/grafana-loki.md @@ -0,0 +1,295 @@ +--- +id: grafana-loki +title: Grafana Loki Tutorial +sidebar_label: Grafana Loki Tutorial +description: "Stake pool course: Grafana Loki Tutorial" +image: /img/og/og-developer-portal.png +--- +As far as some of us here are running several cardano nodes, at some point it might happen that we might need to go through some cardano node logs, maybe it is relay what misbehaves or maybe you missed a block and now you need to find out what happened. I personally used to go through logs with tail, grep and etc. That doesn’t seems very productive way. How you can filter all logs from all nodes for 12:00-12:05 UTC 5th of May for example? You can of course grep it on several machines and then piece them together, but what if you can have a central location were all logs are stored and you can search through all logs from all nodes simultaneously or on particular box only or on several particular boxes and even create alerts based on particular log entry using regexp and etc. + +So here I would like to explain how I personally build centralized log solutions for all my cardano-nodes. I used for that grafana loki, what will receive logs and then you can see them in grafana. As far as grafana is widely used by SPOs, I think it a reasonable choice, you don’t need to add much to your existing infrastructure. + +## 1. Loki installation + +I personally installed Grafana & prometheus some time ago using docker-compose, so to install Loki I just needed to update docker-compose file accordingly. + +Grafana-prometheus-loki docker-compose files what I personally use for Grafana, Loki and Prometheus can be found here: + +[docker-compose files](https://github.com/os11k/grafana-loki-prometheus) + +If you are starting without existing grafana, or you want to use docker now, you can just run 5 following commands(assuming we are using debian based Linux distro) and you will have new and shiny grafana, prometheus and loki running in docker: + +```shell +apt-get update && apt-get upgrade -y && apt-get install docker-compose -y +mkdir /docker && cd /docker +git clone https://github.com/os11k/grafana-loki-prometheus.git +cd ./grafana-with-prometheus/ +docker-compose up -d --build +``` + +Don’t forget to update accordingly to your setup `./etc-prometheus/prometheus.yml`. + +If you are here just for Loki, you need to update docker-compose.yml and comment out all parts related to grafana & prometheus: + +```shell +version: "3.5" + +services: +# grafana: +# container_name: grafana +# network_mode: "host" +# image: grafana/grafana:latest +# restart: always +# volumes: +# - grafana_data:/var/lib/grafana +# logging: +# driver: "json-file" +# options: +# max-size: "200k" +# max-file: "10" +# prometheus: +# container_name: prometheus +# network_mode: "host" +# image: prom/prometheus:latest +# restart: always +# volumes: +# - ./etc-prometheus:/etc/prometheus +# - prometheus_data:/prometheus +# logging: +# driver: "json-file" +# options: +# max-size: "200k" +# max-file: "10" + loki: + container_name: loki + network_mode: "host" + image: grafana/loki:latest + restart: always + volumes: + - ./etc-loki:/etc/loki + - loki_data:/loki + command: -config.file=/etc/loki/loki-config.yml + logging: + driver: "json-file" + options: + max-size: "200k" + max-file: "10" +volumes: +# prometheus_data: {} +# grafana_data: {} + loki_data: {} +``` + +There are some other ways to install Loki, but I personally would avoid that: + +[Installing Loki on Ubuntu 20.04](https://lindevs.com/install-loki-on-ubuntu/) + +## 2. Installing and configuring agent for pushing logs to Loki + +When Loki installed, you need to configure your nodes to push logs to Loki. In case if your cardano nodes are running in docker, you just need to install docker module and restart docker engine + +```shell +docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions +systemctl restart docker +``` + +you can verify that everything is fine: + +```shell +docker plugin ls +``` + +And you should see your newly installed plugin for docker: + +```shell +ID NAME DESCRIPTION ENABLED +b20ef946c02f loki:latest Loki Logging Driver true +``` + +Then you can either to configure each container separately, for example I just added those lines in my docker-compose(don’t forget to put your Loki IP instead of loki-ip): + +```shell + logging: + driver: loki + options: + loki-url: http://loki-ip:3100/loki/api/v1/push + max-size: 50m +``` + +Or you can configure it once for all containers by creating `/etc/docker/daemon.json` file(again do not forget to change loki-ip to IP address of your Loki box): + +```shell +{ + "debug" : true, + "log-driver": "loki", + "log-opts": { + "loki-url": "https://loki-ip/loki/api/v1/push", + "max-size": "50m" + } +} +``` + +If you created or edited `daemon.json`, then you will need to restart docker service: + +```shell +systemctl restart docker +``` + + +:::note + +max-size setting seems weird, but you need to have it, otherwise loki docker plugin will fill out all the space. + +::: + + +Keep in mind that containers must be recreated so they can start sending logs to Loki. As far as I utilize docker-compose, that what worked for me: + +```shell +docker-compose down +docker-compose up -d --build +``` + +More details: + +[Configuring the Docker Driver](https://grafana.com/docs/loki/latest/clients/docker-driver/configuration/) + +[Collecting Docker Logs With Loki](https://yuriktech.com/2020/03/21/Collecting-Docker-Logs-With-Loki/) + +If you are running your nodes not in docker then you will need to install promtail - a client which will push logs to Loki: + +[Install Promtail on Ubuntu 20.04](https://lindevs.com/install-promtail-on-ubuntu/) + +You will need to configure promtail too, here is simple config file, what should work(never tried, though): + +```shell +server: + http_listen_port: 0 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +client: + url: http://localhost:3100/api/prom/push + +scrape_configs: +- job_name: system + entry_parser: raw + static_configs: + - targets: + - localhost + labels: + job: varlogs + __path__: /var/log +``` + +Keep in mind that you must put correct Loki IP, in above example it is localhost, additionally you need to change directory where cardano-node logs are stored, in example above it is `/var/log`, so if your cardano node logs goes in different directory, you need to update it. + +[Config file was taken from here](https://github.com/rongfengliang/grafana-loki-demo/blob/master/promtail-local-config.yaml) + +Loki do not pull logs, but rather promtail or docker engine are pushing logs to Loki. So if you are using default 9100 port for Loki, then from clients(cardano nodes in our case) you should be able to access Loki on 9100 port. You can check that with telnet command from cardano nodes: + +```shell +telnet loki-ip 9100 +``` + +In case of successful connection you should see something like that: + +```shell +Connected to loki-ip. +Escape character is '^]'. +``` + +## 3. Configuring Loki datasource in Grafana + +When Loki is installed and Loki client is configured(docker driver or promtail) you should add Loki as source to Grafana, it is same process as you did for prometheus: + +Configuration => Datasources: + +![Datasource](/img/stake-pool-course/loki-grafana-datasource.png) + +Press add data source and then select Loki from list: + +![Datasource](/img/stake-pool-course/loki-grafana-select-loki.png) + +You will see following screen: + +![Datasource](/img/stake-pool-course/loki-grafana-data-source-loki.png) + +If you are running Loki on same box as Grafana or in docker as I described above, you will need just to put localhost in URL, as it proposes: + +![Datasource](/img/stake-pool-course/loki-grafana-configure-ip.png) + +If you run Loki on different server, then those link should be updated accordingly. + +## 4. Setting up Loki dashboards + +Now we are ready to browse Loki data in grafana. Go to explore: + +![Datasource](/img/stake-pool-course/loki-explore-loki.png) + +Select Loki: + +![Datasource](/img/stake-pool-course/loki-select-loki.png) + +There you should be able to see different labels. In my case it is compose_projects and others, compose_projects are my docker container names, with promtail it can be configured inside config file I believe, but in any case you must have something there. + +![Datasource](/img/stake-pool-course/loki-explore-labels.png) + +If we select specific label in our case compose_project => test-relay1 + +![Datasource](/img/stake-pool-course/loki-test-relay1-explore.png) + +If we press show logs, you should be able to see all logs from that box: + +![Datasource](/img/stake-pool-course/loki-show-logs.png) + +This is how you can access all your logs in “explore” menu, if you like you can add that screen of logs to dashboard, if you press “add to dashboard” button on right top corner: + +![Datasource](/img/stake-pool-course/loki-add-dashboard.png) + +I personally created one dashboard with 4 panels with logs from all my nodes, as shown here: + +![Datasource](/img/stake-pool-course/loki-4-panels.png) + +To search in all logs simultaneously you can do it via “explore” or you can add following dashboard to your grafana: + +[Dashboard](https://gist.github.com/os11k/ffcc2a41862a8c35db7a30fd7f13ef09) + +Keep in mind in my example dashboard cardano nodes has label named “compose_project”, so if your nodes has different labels inside loki just substitute in above file word “compose_project” with correct one. Your labels you can find in “explore” of grafana like here: + +![Datasource](/img/stake-pool-course/loki-labels.png) + +At the end you should be able to have following dashboard: + +![Datasource](/img/stake-pool-course/loki-final-dashboard.png) + +In “compose_project” you can select nodes where you can search for logs and String match field is what you are looking for. For example I have p2p on my test pool, let search on relays, when peer status changed from Hot to Cold: + +![Datasource](/img/stake-pool-course/loki-hot2cold.png) + +So that seems pretty nice working and no need to go login via SSH to your nodes and go through logs. + +:::note + +I would like to add that currently latest(8.5+ and 9+) versions of Grafana has very nice alerting out of the box, so called unified alerting. So if any of you are using some old Grafana versions, it is worth to consider to move to new version and maybe even a docker based Grafana, what will allow you to send alerts to telegram, slack and etc, without need alert manager and if you will choice docker then updates of Grafana will become much easier. + +::: + +## Recommended resources: + +[How To Forward Logs to Grafana Loki using Promtail](https://computingforgeeks.com/forward-logs-to-grafana-loki-using-promtail/) + +[Loki Installation](https://grafana.com/docs/loki/latest/installation/) + +[Loki installation in Ubuntu](https://levelup.gitconnected.com/loki-installation-in-ubuntu-2eb8407de291) + + +

+ + +

+ + +

diff --git a/docs/stake-pool-course/handbook/install-cardano-node-written.md b/docs/stake-pool-course/handbook/install-cardano-node-written.md index 6b25fed0ef..b9d7b5c998 100644 --- a/docs/stake-pool-course/handbook/install-cardano-node-written.md +++ b/docs/stake-pool-course/handbook/install-cardano-node-written.md @@ -3,7 +3,7 @@ id: install-cardano-node-written title: Install cardano-node sidebar_label: Install cardano-node description: "Stake pool course: Learn how to install cardano-node and all its dependencies." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ## Prerequisites diff --git a/docs/stake-pool-course/handbook/keys-addresses.md b/docs/stake-pool-course/handbook/keys-addresses.md index aabd009032..b8072e6f1f 100644 --- a/docs/stake-pool-course/handbook/keys-addresses.md +++ b/docs/stake-pool-course/handbook/keys-addresses.md @@ -3,7 +3,7 @@ id: keys-addresses title: Creating keys and addresses sidebar_label: Creating keys and addresses description: "Stake pool course: Creating keys and addresses." -image: ../img/og-developer-portal.png +image: /img/og-developer-portal.png --- In the Shelley era of Cardano, every stakeholder can have two sets of keys and addresses: diff --git a/docs/stake-pool-course/handbook/register-stake-keys.md b/docs/stake-pool-course/handbook/register-stake-keys.md index a8db758065..81ac1b8c40 100644 --- a/docs/stake-pool-course/handbook/register-stake-keys.md +++ b/docs/stake-pool-course/handbook/register-stake-keys.md @@ -3,7 +3,7 @@ id: register-stake-keys title: Register Stake Address on the Blockchain sidebar_label: Register stake pool keys description: "Stake pool course: Learn how to create stake pool keys." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- Stake address needs to be registered on the blockchain to be useful. Registering keys requires: diff --git a/docs/stake-pool-course/handbook/register-stake-pool-metadata.md b/docs/stake-pool-course/handbook/register-stake-pool-metadata.md index 5134a02d08..742fa5849f 100644 --- a/docs/stake-pool-course/handbook/register-stake-pool-metadata.md +++ b/docs/stake-pool-course/handbook/register-stake-pool-metadata.md @@ -3,7 +3,7 @@ id: register-stake-pool-metadata title: Register a Stake Pool with Metadata sidebar_label: Register a stake pool with metadata description: "Stake pool course: Register a stake pool with metadata." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- Make sure you have access to: @@ -33,7 +33,7 @@ Registering your stake pool requires: * Create a delegation certificate pledge * Submit the certificates to the blockchain -**WARNING:** Generating the **stake pool registration certificate** and the **delegation certificate** requires the **cold keys**. So, when doing this on mainnet you may want to generate these certificates in your local machine taking the proper security measures to avoid exposing your cold keys to the internet. +**WARNING:** Generating the **stake pool registration certificate** and the **delegation certificate** requires the **cold keys**. So, when doing this on Mainnet you may want to generate these certificates in your local machine taking the proper security measures to avoid exposing your cold keys to the internet. #### Create a JSON file with your pool's metadata diff --git a/docs/stake-pool-course/handbook/run-cardano-node-handbook.md b/docs/stake-pool-course/handbook/run-cardano-node-handbook.md index af34589884..9521799cbb 100644 --- a/docs/stake-pool-course/handbook/run-cardano-node-handbook.md +++ b/docs/stake-pool-course/handbook/run-cardano-node-handbook.md @@ -3,7 +3,7 @@ id: run-cardano-node-handbook title: Get configuration files sidebar_label: Run cardano-node description: "Stake pool course: Learn how to run cardano-node." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- In this course, we use the **Cardano TESTNET**, so let's get the configuration files for it. @@ -12,7 +12,7 @@ In this course, we use the **Cardano TESTNET**, so let's get the configuration f Do not use MAINNET during taking this course ::: -Starting the node and connecting it to the testnet requires 4 configuration files: +Starting the node and connecting it to a testnet requires 4 configuration files: * topology.json * BYRON genesis.json diff --git a/docs/stake-pool-course/handbook/setup-a-server-on-aws-written.md b/docs/stake-pool-course/handbook/setup-a-server-on-aws-written.md index b1984bce91..de88b4144a 100644 --- a/docs/stake-pool-course/handbook/setup-a-server-on-aws-written.md +++ b/docs/stake-pool-course/handbook/setup-a-server-on-aws-written.md @@ -3,7 +3,7 @@ id: setup-a-server-on-aws-written title: Setup a Linux server on AWS sidebar_label: Setup a Linux server on AWS description: "Stake pool course: Learn how to setup Linux server on AWS." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- If you do not have access to a computer running Linux \(or VirtualBox\), you can use Amazon Web Services \(AWS\) to create a cloud-based virtual machine running Linux for free. To do so, please follow the steps below: diff --git a/docs/stake-pool-course/handbook/setup-firewall.md b/docs/stake-pool-course/handbook/setup-firewall.md index b083eafd11..c5ce48ad7d 100644 --- a/docs/stake-pool-course/handbook/setup-firewall.md +++ b/docs/stake-pool-course/handbook/setup-firewall.md @@ -3,7 +3,7 @@ id: setup-firewall title: Setup Firewall sidebar_label: Setup Firewall description: "Stake pool course: Learn how to setup a basic firewall." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- Resources to help you setting up a basic firewall: @@ -14,6 +14,6 @@ Resources to help you setting up a basic firewall: :::danger Stake Pool Security -Before you run your pool on mainnet you should have a good understanding of stake pool security. Make sure to read a lot in the [Stake Pool Security Forum](https://forum.cardano.org/c/staking-delegation/stake-pool-security/157) and learn about best practises. +Before you run your pool on Mainnet you should have a good understanding of stake pool security. Make sure to read a lot in the [Stake Pool Security Forum](https://forum.cardano.org/c/staking-delegation/stake-pool-security/157) and learn about best practises. -::: \ No newline at end of file +::: diff --git a/docs/stake-pool-course/handbook/setup-virtual-box-written.md b/docs/stake-pool-course/handbook/setup-virtual-box-written.md index 26bb97f2eb..ab5a90d6cf 100644 --- a/docs/stake-pool-course/handbook/setup-virtual-box-written.md +++ b/docs/stake-pool-course/handbook/setup-virtual-box-written.md @@ -3,7 +3,7 @@ id: setup-virtual-box-written title: Installing VirtualBox sidebar_label: Installing VirtualBox description: "Stake pool course: Learn how to install and setup VirtualBox." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- In order to build a node from source, run it and connect it to the Cardano mainnet, you need a Linux system with at least 4GB RAM and 24GB hard drive space. The RAM is mostly needed for _building_ the node; for _running_ it, 1GB would be sufficient. The hard drive space is necessary if you want to connect to and download the Cardano blockchain. diff --git a/docs/stake-pool-course/handbook/use-cli.md b/docs/stake-pool-course/handbook/use-cli.md index c1a15f6acd..81f222a2ad 100644 --- a/docs/stake-pool-course/handbook/use-cli.md +++ b/docs/stake-pool-course/handbook/use-cli.md @@ -3,7 +3,7 @@ id: use-cli title: Command Line Interface sidebar_label: Command Line Interface description: "Stake pool course: Learn how to use command line interface (cli)." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- This command line interface provides a collection of tools for key generation, transaction construction, certificate creation and other important tasks. diff --git a/docs/stake-pool-course/handbook/utxo-model.md b/docs/stake-pool-course/handbook/utxo-model.md index a7f1a98fbe..c2c365a533 100644 --- a/docs/stake-pool-course/handbook/utxo-model.md +++ b/docs/stake-pool-course/handbook/utxo-model.md @@ -3,7 +3,7 @@ id: utxo-model title: Classic UTxO model sidebar_label: Classic UTxO model description: "Stake pool course: The classic UTxO model." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- In the classic UTxO model (Cardano SL in Byron and Shelley), a transaction output locked by a script carries two pieces of information: diff --git a/docs/stake-pool-course/introduction-to-cardano.md b/docs/stake-pool-course/introduction-to-cardano.md index 0ab01d92de..5d6bcf2328 100644 --- a/docs/stake-pool-course/introduction-to-cardano.md +++ b/docs/stake-pool-course/introduction-to-cardano.md @@ -3,7 +3,7 @@ id: introduction-to-cardano title: (Re)introduction into Cardano sidebar_label: (Re)introduction into Cardano description: "Stake pool course: (Re)introduction into Cardano." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- Developing Cardano is no small feat. There is no other project that has ever been built to these parameters, combining peer reviewed cryptographic research with an implementation in highly secure Haskell code. @@ -88,7 +88,7 @@ The underlying problem is that Bitcoin makes a clear distinction between the act ### Ouroboros, a Proof-of-stake consensus algorithm -In Ouroboros, there is no race between stakeholders to produce a block. Instead, a slot leader is randomly selected, proportionally to the amount of tokens he owns (the stake), to get the opportunity to produce a new block. +In Ouroboros, there is no race between stakeholders to produce a block. Instead, slot leaders are randomly selected, proportionally to the amount of tokens they own (the stake), to get the opportunity to produce a new block. So it is not hashing power what gives you the opportunity to produce a new block (and get rewarded for it), it is your stake what increases your chances to be elected. @@ -134,7 +134,7 @@ Finally, the Ouroboros incentives mechanism promotes the decentralization of the In one hand, a staking pool can only act as a delegate if it represents a certain number of stakeholders whose aggregate stake exceeds a given threshold, for example, 0.1% of all the stake in the blockchain. This prevents a fragmentation attack, where someone tries to affect the performance of the protocol by increasing the delegates population. -At the same time, when the aggregate stake of a stake pool grows beyond a certain threshold, rewards become constant. This makes that particular stake pool less attractive since stakeholders would not be maximizing their rewards. For example, if the threshold is set to 1%, a stake pool with a stake of 2% would gain the same rewards as other that has a stake of only 1%. +At the same time, when the aggregate stake of a stake pool grows beyond a certain threshold, rewards become constant. This makes that particular stake pool less attractive since stakeholders would not be maximizing their rewards. For example, if the threshold is set to 1%, a stake pool with a stake of 2% would gain the same rewards as another one that has a stake of only 1%. All these functionalities make Ouroboros the best proof of stake ledger protocol to date. And its only implementation is currently in the Cardano blockchain. @@ -149,14 +149,14 @@ All these functionalities make Ouroboros the best proof of stake ledger protocol 1. At the beginning of every epoch, the online stakeholders fetch \(from the blockchain\) the **stake distribution** from the last block of 2 epochs ago. For example, if the current epoch is epoch 100, the stake distribution used is the distribution as it was in the last block of epoch 98. 2. **Random Oracle**: Is a hashing function that takes the random values “v” \(included in each block by the slot leader for this purpose\) from the first ⅔ slots in previous epoch and hash them together and use it as the random seed to select the slot leaders. 3. Stakeholders evaluate with their **secret key** the **Verifiable Random Function \(VRF\)** at every slot. If the output value \(v\) is below a certain threshold, the party becomes slot leader for that block. - 1. **Certificate:** The **VRF** produces two outputs: **a random value \(v\)** and a **proof \(π\)** that the slot leader will include in the block he produces to certify that he is the legitimate slot leader for that particular slot. - 2. Slot leader performs the following duties - 3. Collects the transactions to be included in his block. - 4. Includes in his block the random value \(v\) and proof \(π\) obtained from the VRF output. - 5. Before broadcasting the block, the slot leader generates a new secret key **\(Key-evolving signature\)**. The public key remains the same, but the secret key is updated in every step and the old key is erased. - 6. It is impossible to forge old signatures with new keys. And it is also impossible to derive previous keys from new ones. - 7. Finally, the slot leader broadcast the new block to the network. - 8. The **rewards** obtained by the slot leaders are calculated at the end of the epoch. Rewards come from transaction fees and funds from the ada reserve. + 1. **Certificate:** The **VRF** produces two outputs: **a random value \(v\)** and a **proof \(π\)** that the slot leader will include in the block they produce to certify that they are the legitimate slot leader for that particular slot. + 1. Slot leader performs the following duties: + 1. Collects the transactions to be included in the block. + 1. Includes in the block the random value \(v\) and proof \(π\) obtained from the VRF output. + 1. Before broadcasting the block, the slot leader generates a new secret key **\(Key-evolving signature\)**. The public key remains the same, but the secret key is updated in every step and the old key is erased. + 1. It is impossible to forge old signatures with new keys. And it is also impossible to derive previous keys from new ones. + 1. Finally, the slot leader broadcast the new block to the network. + 1. The **rewards** obtained by the slot leaders are calculated at the end of the epoch. Rewards come from transaction fees and funds from the ada reserve. **What happens in the case of a fork in the chain?** @@ -178,4 +178,4 @@ This chain selection rule allows for a party that joins the network at any time ## Video: What’s an Ouroboros and how you cook it? - \ No newline at end of file + diff --git a/docs/stake-pool-course/lesson-1.md b/docs/stake-pool-course/lesson-1.md index 4f748e8057..9a8ed3008d 100644 --- a/docs/stake-pool-course/lesson-1.md +++ b/docs/stake-pool-course/lesson-1.md @@ -3,7 +3,7 @@ id: lesson-1 title: Lesson 1 sidebar_label: Lesson 1 description: "Stake pool course: Lesson 1." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ## Install VirtualBox diff --git a/docs/stake-pool-course/lesson-2.md b/docs/stake-pool-course/lesson-2.md index 1b51fc0555..66e259fb77 100644 --- a/docs/stake-pool-course/lesson-2.md +++ b/docs/stake-pool-course/lesson-2.md @@ -3,7 +3,7 @@ id: lesson-2 title: Lesson 2 sidebar_label: Lesson 2 description: "Stake pool course: Lesson 2." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ## Using the cardano-cli @@ -32,7 +32,7 @@ Learn how to generate your payment keys and addresses. This will allow you to re ## Request Funds from the Faucet -Learn how to get some test tokens to pay for the stake pool certificates, create transactions and more, as shown in the following video tutorial. Request tokens using the [testnet faucet](https://developers.cardano.org/en/testnets/cardano/tools/faucet/) +Learn how to get some test tokens to pay for the stake pool certificates, create transactions and more, as shown in the following video tutorial. Request tokens using the [Testnet Faucet](https://developers.cardano.org/en/testnets/cardano/tools/faucet/)

@@ -47,4 +47,4 @@ Learn how to create a simple transaction. To be able to follow the video better :::tip questions or suggestions? If you have any questions and suggestions while taking the lessons please feel free to [ask in the Cardano forum](https://forum.cardano.org/c/staking-delegation/setup-a-stake-pool/158) and we will respond as soon as possible. -::: \ No newline at end of file +::: diff --git a/docs/stake-pool-course/lesson-3.md b/docs/stake-pool-course/lesson-3.md index 3076ba70f5..cb71189893 100644 --- a/docs/stake-pool-course/lesson-3.md +++ b/docs/stake-pool-course/lesson-3.md @@ -3,7 +3,7 @@ id: lesson-3 title: Lesson 3 sidebar_label: Lesson 3 description: "Stake pool course: Lesson 3." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ## Create Stake Pool Keys and Addresses diff --git a/docs/stake-pool-course/lesson-4.md b/docs/stake-pool-course/lesson-4.md index b43fff625a..92c2c27b1e 100644 --- a/docs/stake-pool-course/lesson-4.md +++ b/docs/stake-pool-course/lesson-4.md @@ -3,7 +3,7 @@ id: lesson-4 title: Lesson 4 sidebar_label: Lesson 4 description: "Stake pool course: Lesson 4." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ## Key Evolving Signature @@ -45,11 +45,11 @@ Learn how to register your stake pool metadata. Things this will allow your pool ## Secure your Cryptographic Keys -Learn how to generate and store your cryptographic keys. If you plan to set up a stake pool on mainnet, it is a good idea having this mindset and process to generate and secure your cold keys and payment keys. +Learn how to generate and store your cryptographic keys. If you plan to set up a stake pool on Mainnet, it is a good idea having this mindset and process to generate and secure your cold keys and payment keys.

:::tip questions or suggestions? If you have any questions and suggestions while taking the lessons please feel free to [ask in the Cardano forum](https://forum.cardano.org/c/staking-delegation/setup-a-stake-pool/158) and we will respond as soon as possible. -::: \ No newline at end of file +::: diff --git a/docs/stake-pool-course/lesson-5.md b/docs/stake-pool-course/lesson-5.md index 20ef4e9277..11b16f53b5 100644 --- a/docs/stake-pool-course/lesson-5.md +++ b/docs/stake-pool-course/lesson-5.md @@ -3,7 +3,7 @@ id: lesson-5 title: Lesson 5 sidebar_label: Lesson 5 description: "Stake pool course: Lesson 5." -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ## Logging and Monitoring with Prometheus diff --git a/docs/stake-pool-course/overview.md b/docs/stake-pool-course/overview.md index 0acc0a996d..cdfa2cd78b 100644 --- a/docs/stake-pool-course/overview.md +++ b/docs/stake-pool-course/overview.md @@ -4,7 +4,7 @@ slug: /stake-pool-course/ title: Stake Pool Course sidebar_label: Overview description: This course is designed to (re)introduce you to Cardano, walk you through how to set up a stake pool, and provide guidance on managing and maintaining your stake pool to ensure optimal performance and profitability. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- **Welcome**, we are glad that you are interested in setting up a stake pool on Cardano. @@ -12,7 +12,7 @@ image: ../img/og-developer-portal.png This course is designed to (re)introduce you to Cardano, walk you through how to set up a stake pool, and provide guidance on managing and maintaining your stake pool to ensure optimal performance and profitability. :::danger Testnet only -The whole stake pool course is only on the testnet. Before you run your pool on the mainnet, you should have practised a lot on the testnet, know how to rotate your KES keys and have great understanding of stake pool security. +The whole stake pool course is only written for the original Testnet. Before you run your pool on Mainnet, you should have practised a lot on the testnet, know how to rotate your KES keys and have great understanding of stake pool security. ::: ## What you will learn diff --git a/docs/stake-pool-guide/grafana-dashboard.md b/docs/stake-pool-guide/grafana-dashboard-tutorial.md similarity index 95% rename from docs/stake-pool-guide/grafana-dashboard.md rename to docs/stake-pool-guide/grafana-dashboard-tutorial.md index 8a74a6ea68..b27252bef8 100644 --- a/docs/stake-pool-guide/grafana-dashboard.md +++ b/docs/stake-pool-guide/grafana-dashboard-tutorial.md @@ -1,9 +1,9 @@ --- -id: grafana-dashboard -title: Grafana Dashboard -sidebar_label: Monitoring with Grafana -description: "Monitoring the Node (Prometheus, Grafana)" -image: ../img/og/og-developer-portal.png +id: grafana-dashboard-tutorial +title: Grafana Dashboard Tutorial +sidebar_label: Grafana Dashboard Tutorial +description: "Stake pool course: Grafana Dashboard Tutorial" +image: /img/og/og-developer-portal.png --- ![Grafana Tutorial](../../static/img/stake-pool-guide/snsky_dashboard.jpg) @@ -214,7 +214,7 @@ To see a list of installed panels, click the Plugins item in the main menu. Both ## 5. Add Data from Cexplorer to the Dashboard -Cexplorer provides an API where we can collect data for our pool. Run the following commands to create directory for our pool statistics and script: +Cexplorer provides API where we can collect data for our pool. Run following commands to create directory for our pool statistic and script. Metric `adapools_pledged` is missing in cexplorer(a tool what will substitute adapools), so you might see relative data missing on dashboard from SNSKY, mentioned above. ```shell cd /$NODE_HOME @@ -261,11 +261,11 @@ $ sudo systemctl restart prometheus.service ``` -Now you should see in the Dashboard all Cexplorer statistics: +Now you should see in the Dashboard all Cexplorer statistics -Since the statistics will change, let's set a cron job to update data from Cexplorer every day: +Since the statistics will change, lets set cron job to update data from Cexplorer everyday ```shell diff --git a/docs/transaction-metadata/how-to-create-a-metadata-transaction-cli.md b/docs/transaction-metadata/how-to-create-a-metadata-transaction-cli.md index 55072e00e5..1ff1e29410 100644 --- a/docs/transaction-metadata/how-to-create-a-metadata-transaction-cli.md +++ b/docs/transaction-metadata/how-to-create-a-metadata-transaction-cli.md @@ -3,7 +3,7 @@ id: how-to-create-a-metadata-transaction-cli title: How to create a metadata transaction using cardano-cli sidebar_label: Create a metadata transaction (CLI) description: How to create a metadata transaction using `cardano-cli` -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -11,7 +11,7 @@ import TabItem from '@theme/TabItem'; :::note This guide assumes that you have a basic understanding of `cardano-wallet` and `cardano-cli`, how to use it and that you have installed it into your system. Otherwise, we recommend reading [Installing cardano-node](../get-started/installing-cardano-node), [Running cardano-node](../get-started/running-cardano), and [Exploring Cardano Wallets](../integrate-cardano/creating-wallet-faucet) guides first. -This guide also assumes that you have `cardano-node` and `cardano-wallet` running in the background and connected to the `testnet` network. +This guide also assumes that you have `cardano-node` and `cardano-wallet` running in the background and connected to one of the `testnet` networks. ::: ## Overview @@ -55,7 +55,7 @@ cardano-cli address build \ --testnet-magic 1097911063 ``` -Now that you have a **wallet address**, you can now request some `tAda` funds from the [testnet faucet](../../docs/integrate-cardano/testnet-faucet). +Now that you have a **wallet address**, you can now request some `tAda` funds from the [Testnet Faucet](../../docs/integrate-cardano/testnet-faucet). Once you have some funds, we can now create the sample metadata that we want to store into the blockchain. diff --git a/docs/transaction-metadata/how-to-create-a-metadata-transaction-wallet.md b/docs/transaction-metadata/how-to-create-a-metadata-transaction-wallet.md index 62b0b51cdd..11791a512e 100644 --- a/docs/transaction-metadata/how-to-create-a-metadata-transaction-wallet.md +++ b/docs/transaction-metadata/how-to-create-a-metadata-transaction-wallet.md @@ -3,7 +3,7 @@ id: how-to-create-a-metadata-transaction-wallet title: How to create a metadata transaction using cardano-wallet sidebar_label: Create a metadata transaction (Wallet) description: How to create a metadata transaction using `cardano-wallet` -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -11,7 +11,7 @@ import TabItem from '@theme/TabItem'; :::note This guide assumes that you have a basic understanding of `cardano-wallet` and `cardano-cli`, how to use it and that you have installed it into your system. Otherwise, we recommend reading [Installing cardano-node](../get-started/installing-cardano-node), [Running cardano-node](../get-started/running-cardano), and [Exploring Cardano Wallets](../integrate-cardano/creating-wallet-faucet) guides first. -This guide also assumes that you have `cardano-node` and `cardano-wallet` running in the background and connected to the `testnet` network. +This guide also assumes that you have `cardano-node` and `cardano-wallet` running in the background and connected to one of the `testnet` networks. ::: ## Overview diff --git a/docs/transaction-metadata/overview.md b/docs/transaction-metadata/overview.md index d4512bde14..a6c3fab91e 100644 --- a/docs/transaction-metadata/overview.md +++ b/docs/transaction-metadata/overview.md @@ -4,7 +4,7 @@ slug: /transaction-metadata/ title: Build with transaction metadata sidebar_label: Overview description: The Cardano Transaction Metadata is a feature that allows anyone to embed metadata into transactions and ultimately storing metadata into the blockchain. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ![Cardano Transaction Metadata](../../static/img/card-transaction-metadata-title.svg) diff --git a/docs/transaction-metadata/retrieving-metadata.md b/docs/transaction-metadata/retrieving-metadata.md index 5a0c746c35..845c8a1484 100644 --- a/docs/transaction-metadata/retrieving-metadata.md +++ b/docs/transaction-metadata/retrieving-metadata.md @@ -3,7 +3,7 @@ id: retrieving-metadata title: Retrieving your metadata sidebar_label: Retrieving your metadata description: We will discuss the many ways to retrieve your metadata from the Cardano blockchain. -image: ../img/og-developer-portal.png +image: /img/og/og-developer-portal.png --- ## Overview @@ -12,7 +12,7 @@ There are many ways to retrieve metadata stored in the **Cardano** blockchain. T ## Blockfrost -[Blockfrost](/docs/get-started/blockfrost) provides an **API** to access the **Cardano** blockchain fast and easily. +[Blockfrost](/docs/get-started/blockfrost/get-started) provides an **API** to access the **Cardano** blockchain fast and easily. To retrieve metadata using **Blockfrost**, we call a specific endpoint for **transaction metadata** that they provide. @@ -55,7 +55,7 @@ Please visit their official [documentation](https://docs.blockfrost.io) to know This Section assumes that you have basic understanding of `cardano-wallet`, how to use it and that you have installed it into your system. Otherwise we recommend reading [Installing cardano-node](/docs/get-started/installing-cardano-node), [Running cardano-node](/docs/get-started/running-cardano) and [Exploring Cardano Wallets](/docs/integrate-cardano/creating-wallet-faucet) guides first. -This guide also assumes that you have `cardano-node` and `cardano-wallet` running in the background and connected to the `testnet` network. +This guide also assumes that you have `cardano-node` and `cardano-wallet` running in the background and connected to one of the `testnet` networks. ::: diff --git a/docusaurus.config.js b/docusaurus.config.js index 966f2b69e5..8bc06261d4 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -43,7 +43,7 @@ module.exports = { // Meta Image that will be used for your meta tag, in particular og:image and twitter:image // Relative to your site's "static" directory, cannot be SVGs. - image: "img/og-developer-portal.png", + image: "img/og/og-developer-portal.png", metadata: [{ name: "twitter:card", content: "summary" }], // Algolia Search @@ -107,6 +107,10 @@ module.exports = { label: "Contributors", to: "docs/portal-contributors/", }, + { + label: "Changelog", + to: "/changelog", + }, { label: "How to Contribute", to: "docs/portal-contribute/", @@ -136,6 +140,14 @@ module.exports = { label: "Cardano Forum", href: "https://forum.cardano.org/c/developers/29", }, + { + label: "Developer Portal Discord", + href: "https://discord.com/invite/Exe6XmqKDx", + }, + { + label: "Developer Ecosystem Survey", + href: "https://cardano-foundation.github.io/state-of-the-developer-ecosystem/2022", + }, { label: "More", to: "docs/get-started/cardano-developer-community", @@ -210,7 +222,30 @@ module.exports = { ], }, ], + [ + require.resolve('./src/plugins/changelog/index.js'), + { + blogTitle: 'Developer Portal Changelog', + blogDescription: + 'Keep yourself up-to-date about new features in every release', + blogSidebarCount: 'ALL', + blogSidebarTitle: 'Changelog', + routeBasePath: '/changelog', + showReadingTime: false, + postsPerPage: 20, + archiveBasePath: null, + authorsMapPath: 'authors.json', + feedOptions: { + type: 'all', + title: 'Developer Portal Changelog', + description: + 'Keep yourself up-to-date about new features in every release', + language: 'en', + }, + }, + ], ], + presets: [ [ "@docusaurus/preset-classic", diff --git a/package.json b/package.json index 475cab682f..7ac0cfa1b5 100644 --- a/package.json +++ b/package.json @@ -13,12 +13,12 @@ "cip:refresh": "ts-node scripts/cip.ts" }, "dependencies": { - "@docusaurus/core": "^2.0.1", - "@docusaurus/plugin-client-redirects": "^2.0.1", - "@docusaurus/plugin-content-docs": "^2.0.1", - "@docusaurus/plugin-ideal-image": "^2.0.1", - "@docusaurus/preset-classic": "^2.0.1", - "@docusaurus/theme-search-algolia": "^2.0.1", + "@docusaurus/core": "^2.4.0", + "@docusaurus/plugin-client-redirects": "^2.4.0", + "@docusaurus/plugin-content-docs": "^2.4.0", + "@docusaurus/plugin-ideal-image": "^2.4.0", + "@docusaurus/preset-classic": "^2.4.0", + "@docusaurus/theme-search-algolia": "^2.4.0", "@mdx-js/react": "^1.6.22", "@popperjs/core": "^2.11.2", "clsx": "^1.1.1", @@ -43,5 +43,8 @@ }, "devDependencies": { "@types/node-fetch": "^2.5.12" - } + }, + "workspaces": [ + "packages/*" + ] } diff --git a/scripts/cip.ts b/scripts/cip.ts index 192a652c3b..c78d8ebae5 100644 --- a/scripts/cip.ts +++ b/scripts/cip.ts @@ -6,38 +6,38 @@ import { preventH1Headline, } from "./reusable"; import { - CIPRepoRawBaseUrl, - CIPReadmeUrl, - CIPPReadmeRegex, - CIPRegex, - CIPDocsPath, - CIPStaticResourcePath, - CIPSourceRepo, - CIPRepoBaseUrl, - customEditUrl + cip_repo_raw_base_url, + cip_readme_url, + cip_readme_regex, + cip_regex, + cip_docs_path, + cip_static_resource_path, + cip_source_repo, + cip_repo_base_url, + custom_edit_url } from "./constants"; // Current pathname -const pathName = path.basename(__filename); +const path_name = path.basename(__filename); // Download markdown resources -const processCIPContentAsync = async (cipName: string, content: string) => { - const cipResources = content.match(CIPRegex); - if (cipResources) { +const processCIPContentAsync = async (cip_name: string, content: string) => { + const cip_resource = content.match(cip_regex); + if (cip_resource) { await Promise.all( - cipResources.map(async (r) => { + cip_resource.map(async (r) => { if (r.indexOf("http://") < 0 && r.indexOf("https://") < 0) { // create filenames to download into static folder - const fileName = r + const file_name = r .replace("](", "") .replace(".png)", ".png") .replace(".jpg)", ".jpg") .replace(".jpeg)", ".jpeg") .replace(".json)", ".json"); - // Create modified filenames in case we want to store files + // Create modified file_names in case we want to store files // with a different ending, like JSON files - const modifiedFileName = r + const modified_file_name = r .replace("](", "") .replace(".png)", ".png") .replace(".jpg)", ".jpg") @@ -45,30 +45,30 @@ const processCIPContentAsync = async (cipName: string, content: string) => { .replace(".json)", ".txt"); const buffer = await getBufferContentAsync( - `${CIPRepoRawBaseUrl}${cipName}/${fileName}` + `${cip_repo_raw_base_url}${cip_name}/${file_name}` ); - if (fs.existsSync(`.${CIPStaticResourcePath}${cipName}`)) { - fs.rmSync(`.${CIPStaticResourcePath}${cipName}`, { + if (fs.existsSync(`.${cip_static_resource_path}${cip_name}`)) { + fs.rmSync(`.${cip_static_resource_path}${cip_name}`, { recursive: true, }); } - fs.mkdirSync(`.${CIPStaticResourcePath}${cipName}`, { + fs.mkdirSync(`.${cip_static_resource_path}${cip_name}`, { recursive: true, }); fs.writeFileSync( - `.${CIPStaticResourcePath}${cipName}/${modifiedFileName}`, + `.${cip_static_resource_path}${cip_name}/${modified_file_name}`, new Uint8Array(buffer) ); // Rewrite link to static folder content = content.replace( - fileName, - `../../..${CIPStaticResourcePath}${cipName}/${modifiedFileName}` + file_name, + `../../..${cip_static_resource_path}${cip_name}/${modified_file_name}` ); console.log( - `Processed CIP content downloaded to .${CIPStaticResourcePath}${cipName}/${fileName}` + `Processed CIP content downloaded to .${cip_static_resource_path}${cip_name}/${file_name}` ); } }) @@ -76,13 +76,13 @@ const processCIPContentAsync = async (cipName: string, content: string) => { } // Ensure compatibility - content = stringManipulation(content, cipName); + content = stringManipulation(content, cip_name); return content; }; // Clear up this is auto generated file from CIP repository -const injectAutogeneratedMessage = (content: string, fileName: string, path: string) => { +const injectAutogeneratedMessage = (content: string, file_name: string, path: string) => { const status = getDocTag(content, "Status"); const type = getDocTag(content, "Type"); @@ -94,17 +94,17 @@ const injectAutogeneratedMessage = (content: string, fileName: string, path: str "## CIP Information \nThis [" + type + "](CIP-0001#cip-format-and-structure) " + - fileName + + file_name + " created on **" + creationDate + "** has the status: [" + status + "](CIP-0001#cip-workflow). \nThis page was generated automatically from: [" + - CIPSourceRepo + + cip_source_repo + "](" + - CIPRepoBaseUrl + - fileName + - CIPReadmeUrl + + cip_repo_base_url + + file_name + + cip_readme_url + ")." ); } @@ -117,11 +117,11 @@ const injectDocusaurusDocTags = (content: string) => { // Parse information from markdown file const title = getDocTag(content, "Title"); - const cipNumber = getDocTag(content, "CIP"); + const cip_number = getDocTag(content, "CIP"); // Add "---" with doc tags for Docusaurus content = - "--- \nsidebar_label: " + "(" + cipNumber + ") " + title + customEditUrl + content; + "--- \nsidebar_label: " + "(" + cip_number + ") " + title + custom_edit_url + content; // Temporary solution! // CIP script needs to be rebuild, currently CIP 49 has useless information in header that will be removed in the future @@ -131,14 +131,14 @@ const injectDocusaurusDocTags = (content: string) => { } // String manipulations to ensure compatibility -const stringManipulation = (content: string, cipName: string) => { +const stringManipulation = (content: string, cip_name: string) => { // We expect markdown files, therefore strip HTML content = content.replace(/(<([^>]+)>)/gi, ""); // Rewrite relative links like [Byron](./Byron.md) to absolute links. content = content.replace( /\]\(\.\//gm, - "](" + CIPRepoRawBaseUrl + cipName + "/" + "](" + cip_repo_raw_base_url + cip_name + "/" ); // Fix parent links to CIPs @@ -158,11 +158,10 @@ const stringManipulation = (content: string, cipName: string) => { content = preventH1Headline(content, "Copyright"); // Inject Docusaurus doc tags for title and add a nice sidebar - content = injectDocusaurusDocTags(content); // Clear up this is auto generated file from CIP repository - content = injectAutogeneratedMessage(content, cipName, pathName); + content = injectAutogeneratedMessage(content, cip_name, path_name); // Temporary solution! // Fix for CIP 60 @@ -173,37 +172,37 @@ const stringManipulation = (content: string, cipName: string) => { }; // Get a specific doc tag -const getDocTag = (content: string, tagName: string) => { - return content.match(new RegExp(`(?<=${tagName}: ).*`, "")); +const getDocTag = (content: string, tag_name: string) => { + return content.match(new RegExp(`(?<=${tag_name}: ).*`, "")); }; const main = async () => { console.log("CIP Content Downloading..."); // Use https://raw.githubusercontent.com/cardano-foundation/CIPs/master/README.md as entry point to get URLs - const readmeContent = await getStringContentAsync( - `${CIPRepoRawBaseUrl}${CIPReadmeUrl}` + const readme_content = await getStringContentAsync( + `${cip_repo_raw_base_url}${cip_readme_url}` ); - const cipUrls = readmeContent.match(CIPPReadmeRegex); - const cipUrlsUnique = [...new Set(cipUrls)]; + const cip_urls = readme_content.match(cip_readme_regex); + const cip_urls_unique = [...new Set(cip_urls)]; - if (fs.existsSync(CIPDocsPath)) { - fs.rmSync(CIPDocsPath, { recursive: true }); + if (fs.existsSync(cip_docs_path)) { + fs.rmSync(cip_docs_path, { recursive: true }); } - fs.mkdirSync(CIPDocsPath, { recursive: true }); + fs.mkdirSync(cip_docs_path, { recursive: true }); // Save CIP Readme into docs await Promise.all( - cipUrlsUnique.map(async (cipUrl) => { - const fileName: string = "README.md"; - const cipName: string = cipUrl.slice(-2) === '/)' ? cipUrl.slice(0, -2) : cipUrl.slice(0, -1) + cip_urls_unique.map(async (cip_url) => { + const file_name: string = "README.md"; + const cip_name: string = cip_url.slice(-2) === '/)' ? cip_url.slice(0, -2) : cip_url.slice(0, -1) let content = await getStringContentAsync( - CIPRepoRawBaseUrl + '/' + cipName + '/' + fileName + cip_repo_raw_base_url + '/' + cip_name + '/' + file_name ); - content = await processCIPContentAsync(cipName, content); + content = await processCIPContentAsync(cip_name, content); - fs.writeFileSync(`${CIPDocsPath}/${cipName}.md`, content); - console.log(`Downloaded to ${CIPDocsPath}/${cipName}.md`); + fs.writeFileSync(`${cip_docs_path}/${cip_name}.md`, content); + console.log(`Downloaded to ${cip_docs_path}/${cip_name}.md`); }) ); diff --git a/scripts/constants.ts b/scripts/constants.ts index 2e0a7b3a03..79c469eba4 100644 --- a/scripts/constants.ts +++ b/scripts/constants.ts @@ -1,28 +1,28 @@ //CIP constants -const CIPReadmeUrl: string = "/README.md"; -const CIPPReadmeRegex: RegExp = /\.\/CIP.?\/|\.\/CIP-.*\)/gm -const CIPSourceRepo: string = "cardano-foundation/CIPs"; -const CIPStaticResourcePath: string = "/static/img/cip/"; -const CIPDocsPath: string = "./docs/governance/cardano-improvement-proposals"; -const CIPRegex: RegExp = /\]\(.*?.png\)|\]\(.*?.jpg\)|\]\(.*?.jpeg\)|\]\(.*?.json\)/gm; -const CIPRepoBaseUrl: string = "https://github.com/cardano-foundation/CIPs/tree/master/"; -const CIPRepoRawBaseUrl: string = "https://raw.githubusercontent.com/cardano-foundation/CIPs/master/"; +const cip_readme_url: string = "/README.md"; +const cip_readme_regex: RegExp = /\.\/CIP.?\/|\.\/CIP-.*\)/gm +const cip_source_repo: string = "cardano-foundation/CIPs"; +const cip_static_resource_path: string = "/static/img/cip/"; +const cip_docs_path: string = "./docs/governance/cardano-improvement-proposals"; +const cip_regex: RegExp = /\]\(.*?.png\)|\]\(.*?.jpg\)|\]\(.*?.jpeg\)|\]\(.*?.json\)/gm; +const cip_repo_base_url: string = "https://github.com/cardano-foundation/CIPs/tree/master/"; +const cip_repo_raw_base_url: string = "https://raw.githubusercontent.com/cardano-foundation/CIPs/master/"; // Rust Library constants -const RLStaticResourcePath: string = "/tree/master/doc/getting-started"; -const RLDocsPath: string = "./docs/get-started/cardano-serialization-lib"; -const RLRepoBaseUrl: string = "https://github.com/Emurgo/cardano-serialization-lib"; -const RLnamesRawBaseIndexUrl: string = "https://raw.githubusercontent.com/Emurgo/cardano-serialization-lib/master/doc/index.rst"; -const RLRepoRawBaseUrl: string = "https://raw.githubusercontent.com/Emurgo/cardano-serialization-lib/master/doc/getting-started/"; +const rl_static_resource_path: string = "/tree/master/doc/getting-started"; +const rl_docs_path: string = "./docs/get-started/cardano-serialization-lib"; +const rl_repo_base_url: string = "https://github.com/Emurgo/cardano-serialization-lib"; +const rl_raw_base_index_url: string = "https://raw.githubusercontent.com/Emurgo/cardano-serialization-lib/master/doc/index.rst"; +const rl_repo_raw_base_url: string = "https://raw.githubusercontent.com/Emurgo/cardano-serialization-lib/master/doc/getting-started/"; //Token Registry constants -const TRDocsPath: string = "./docs/native-tokens/token-registry"; -const TRWiki: string = "https://github.com/cardano-foundation/cardano-token-registry/wiki"; -const TRUrl: string = "https://github.com/cardano-foundation/cardano-token-registry/blob/master/"; -const TRrepoRawWikiHomeUrl: string = "https://raw.githubusercontent.com/wiki/cardano-foundation/cardano-token-registry/"; -const TROverviewUrl: string = "https://raw.githubusercontent.com/cardano-foundation/cardano-token-registry/master/README.md"; +const tr_docs_path: string = "./docs/native-tokens/token-registry"; +const tr_github_wiki: string = "https://github.com/cardano-foundation/cardano-token-registry/wiki"; +const tr_url: string = "https://github.com/cardano-foundation/cardano-token-registry/blob/master/"; +const tr_raw_wiki_url: string = "https://raw.githubusercontent.com/wiki/cardano-foundation/cardano-token-registry/"; +const tr_overview_url: string = "https://raw.githubusercontent.com/cardano-foundation/cardano-token-registry/master/README.md"; //General constants -const customEditUrl = "\ncustom_edit_url: null" +const custom_edit_url = "\ncustom_edit_url: null" -export {CIPReadmeUrl, CIPPReadmeRegex, CIPSourceRepo, CIPStaticResourcePath, CIPDocsPath, CIPRegex, CIPRepoBaseUrl, CIPRepoRawBaseUrl, RLStaticResourcePath, RLDocsPath, RLRepoBaseUrl, RLnamesRawBaseIndexUrl, RLRepoRawBaseUrl, TRDocsPath, TRWiki, TRUrl, TRrepoRawWikiHomeUrl, TROverviewUrl, customEditUrl}; \ No newline at end of file +export {cip_readme_url, cip_readme_regex, cip_source_repo, cip_static_resource_path, cip_docs_path, cip_regex, cip_repo_base_url, cip_repo_raw_base_url, rl_static_resource_path, rl_docs_path, rl_repo_base_url, rl_raw_base_index_url, rl_repo_raw_base_url, tr_docs_path, tr_github_wiki, tr_url, tr_raw_wiki_url, tr_overview_url, custom_edit_url}; diff --git a/scripts/reusable.ts b/scripts/reusable.ts index a5328db745..af0c8a949b 100644 --- a/scripts/reusable.ts +++ b/scripts/reusable.ts @@ -1,12 +1,4 @@ import fetch from "node-fetch"; -import { - RLRepoBaseUrl, - RLStaticResourcePath, - CIPSourceRepo, - CIPRepoBaseUrl, - CIPReadmeUrl, - TRWiki, -} from "./constants"; export const getStringContentAsync = async (url: string) => { return await fetch(url).then((res) => res.text()); @@ -24,148 +16,7 @@ export const preventH1Headline = (content: string, headline: string) => { : content; }; -// In case we want a specific sidebar_position for a certain filename (otherwise alphabetically) -// In the future it will be better to get this information from the index.rst file -export const sidebar_positionForFilename = (fileName: string) => { - // Token Registry sidebar positioning - if ( - fileName === "How to prepare an entry for the registry (NA policy script)" - ) - return "sidebar_position: 2\n"; - if (fileName === "How to prepare an entry for the registry (Plutus script)") - return "sidebar_position: 3\n"; - if (fileName === "How to submit an entry to the registry") - return "sidebar_position: 4\n"; - - //Rust Library sidebar positioning - if (fileName === "prerequisite-knowledge") return "sidebar_position: 2\n"; - if (fileName === "generating-keys") return "sidebar_position: 3\n"; - if (fileName === "generating-transactions") return "sidebar_position: 4\n"; - if (fileName === "transaction-metadata") return "sidebar_position: 5\n"; - - return ""; // Empty string means alphabetically within the sidebar -}; - -// Add addition Info -export const injectInformation = ( - content: string, - fileName: string, - path: string -) => { - // Add to the end - if (path === "token-registry.ts") { - return ( - content + - "\n" + - "## Token Registry Information \nThis page was generated automatically from: [" + - TRWiki + - "](" + - TRWiki + - "/" + - fileName + - ")." - ); - } else if (path === "rust-library.ts") { - return ( - content + - "\n" + - "## Serialization-Lib Information \nThis page was generated automatically from: [" + - RLRepoBaseUrl + - "](" + - RLRepoBaseUrl + - RLStaticResourcePath + - "/" + - fileName + - ".md" + - ")." - ); - } else if (path === "cip.ts") { - // Parse information from markdown file - const status = getDocTag(content, "Status"); - const type = getDocTag(content, "Type"); - const creationDate = getDocTag(content, "Created"); - - return ( - content + - "\n" + - "## CIP Information \nThis [" + - type + - "](CIP-0001#cip-format-and-structure) " + - fileName + - " created on **" + - creationDate + - "** has the status: [" + - status + - "](CIP-0001#cip-workflow). \nThis page was generated automatically from: [" + - CIPSourceRepo + - "](" + - CIPRepoBaseUrl + - fileName + - CIPReadmeUrl + - ")." - ); - } -}; - // Get a specific doc tag -export const getDocTag = (content: string, tagName: string) => { - return content.match(new RegExp(`(?<=${tagName}: ).*`, "")); -}; - -// Inject extra docusarus doc tags -export const injectDocusaurusDocTags = ( - content: string, - url: string, - fileName: string, - path: string -) => { - // Remove '---' from doc to add it later - content = content.substring(0, 3) === "---" ? content.slice(3) : content; - - if (path === "token-registry.ts") { - // Remove '\'' from url to avoid issues during project build - url = url.match(/\'/g) ? url.replace(/\'/g, "") : url; - - // Add '---' with doc tags for Docusaurus - content = - "--- \nsidebar_label: " + - url + - "\ntitle: " + - url + - "\n" + - sidebar_positionForFilename(url) + - "\n--- " + - "\n" + - content; - } else if (path === "rust-library.ts") { - // Replace '-' from url in order to create a clean sidebar label - const modifiedFileName = fileName.replace(/[-]/gm, " "); - - // Capitalize the first letter of each word - let sidebarLabel = modifiedFileName - .toLowerCase() - .replace(/(^\w{1})|(\s{1}\w{1})/g, (match) => match.toUpperCase()); - - // Add '---' with doc tags for Docusaurus - content = - "--- \nsidebar_label: " + - sidebarLabel + - "\ntitle: " + - fileName + - "\n" + - sidebar_positionForFilename(fileName) + - "--- " + - "\n" + - content; - } else if (path === "cip.ts") { - // Parse information from markdown file - const title = getDocTag(content, "Title"); - const cipNumber = getDocTag(content, "CIP"); - - // Add "---" with doc tags for Docusaurus - content = - "--- \nsidebar_label: " + "(" + cipNumber + ") " + title + content; - } - - return content; +export const getDocTag = (content: string, tag_name: string) => { + return content.match(new RegExp(`(?<=${tag_name}: ).*`, "")); }; diff --git a/scripts/rust-library.ts b/scripts/rust-library.ts index f1613e8347..fedafe9234 100644 --- a/scripts/rust-library.ts +++ b/scripts/rust-library.ts @@ -2,78 +2,133 @@ import * as fs from "fs"; import * as path from "path"; import { getStringContentAsync, - injectDocusaurusDocTags, - injectInformation, } from "./reusable"; import { - RLRepoRawBaseUrl, - RLDocsPath, - RLnamesRawBaseIndexUrl, + rl_repo_raw_base_url, + rl_docs_path, + rl_raw_base_index_url, + rl_repo_base_url, + rl_static_resource_path, + custom_edit_url } from "./constants"; // Current pathname -const pathName = path.basename(__filename); +const path_name = path.basename(__filename); + +// Clear up this is auto generated file from Rust Library repository +const injectAutogeneratedMessage = (content: string, file_name: string, path: string) => { + return ( + content + + "\n" + + "## Serialization-Lib Information \nThis page was generated automatically from: [" + + rl_repo_base_url + + "](" + + rl_repo_base_url + + rl_static_resource_path + + "/" + + file_name + + ".md)." + ); +} // String manipulations to ensure compatibility -const stringManipulation = (content: string, fileName: string) => { +const stringManipulation = (content: string, file_name: string) => { // Replace empty links content = content.replace(/\]\(\)/gm, "]"); - // Inject rust library additional info - content = injectInformation(content, fileName, pathName); + // Clear up this is auto generated file from Rust Library repository + content = injectAutogeneratedMessage(content, file_name, path_name); return content; }; // Filename manipulations to ensure compatibility -const fileNameManipulation = (fileName: string) => { - // Modify filename for 'metadata' with 'transaction-metadata' - fileName = fileName === "metadata" ? "transaction-metadata" : fileName; +const fileNameManipulation = (file_ane: string) => { + // Modify file_ane for 'metadata' with 'transaction-metadata' + file_ane = file_ane === "metadata" ? "transaction-metadata" : file_ane; + + return file_ane; +}; + +// In case we want a specific sidebar_position for a certain file_name (otherwise alphabetically) +// In the future it will be better to get this information from the index.rst file +export const sidebarPosition = (file_name: string) => { + + if (file_name === "prerequisite-knowledge") return "sidebar_position: 2\n"; + if (file_name === "generating-keys") return "sidebar_position: 3\n"; + if (file_name === "generating-transactions") return "sidebar_position: 4\n"; + if (file_name === "transaction-metadata") return "sidebar_position: 5\n"; - return fileName; + return ""; // Empty string means alphabetically within the sidebar }; +// Inject Docusaurus doc tags for title and add a nice sidebar +const injectDocusaurusDocTags = (content: string, file_name: string) => { + +// Remove '---' from doc to add it later +content = content.substring(0, 3) === "---" ? content.slice(3) : content; + + // Replace '-' from url in order to create a clean sidebar label + const modified_file_name = file_name.replace(/[-]/gm, " "); + + // Capitalize the first letter of each word + let sidebar_label = modified_file_name + .toLowerCase() + .replace(/(^\w{1})|(\s{1}\w{1})/g, (match) => match.toUpperCase()); + + // Add '---' with doc tags for Docusaurus + content = + "--- \nsidebar_label: " + + sidebar_label + + custom_edit_url + + "\ntitle: " + + file_name + + "\nimage: /img/og/og-getstarted-serialization-lib.png" + + "\n" + + sidebarPosition(file_name) + + "--- " + + "\n" + + content; + + return content; +} + const main = async () => { console.log("Rust Library Content Downloading..."); // Fetch markdown file names - const indexWithMarkDownNames = await getStringContentAsync( - `${RLnamesRawBaseIndexUrl}` + const index_with_markdown_names = await getStringContentAsync( + `${rl_raw_base_index_url}` ); // Create array of markdown names to fetch raw files - const markDownNames = indexWithMarkDownNames.match( + const markdown_names = index_with_markdown_names.match( /(?<=getting-started\/)(.*?)(?=[\r\n]+)/g ); - const rustLibraryUniqueUrls = [...new Set(markDownNames)]; + const rl_unique_urls = [...new Set(markdown_names)]; // Save rust library markdowns into docs folder await Promise.all( - rustLibraryUniqueUrls.map(async (fileName) => { + rl_unique_urls.map(async (file_name) => { // Download markdown files const result = await getStringContentAsync( - `${RLRepoRawBaseUrl}${fileName}.md` + `${rl_repo_raw_base_url}${file_name}.md` ); // Remove invalid links that are empty - const manipualtedContent = stringManipulation(result, fileName); - - // Finish manipulation with injecting docosautus doc tags - const contentWithDocosaurusDocTags = injectDocusaurusDocTags( - manipualtedContent, - "", - fileName, - pathName - ); + const manipulated_content = stringManipulation(result, file_name); + + // Inject Docusaurus doc tags + const manipulated_content_with_doc_tags = injectDocusaurusDocTags(manipulated_content, file_name) - const manipulatedFileName = fileNameManipulation(fileName); + const manipulated_file_name = fileNameManipulation(file_name); // Create markdown files locally with downloaded content fs.writeFileSync( - `${RLDocsPath}/${manipulatedFileName}.md`, - contentWithDocosaurusDocTags + `${rl_docs_path}/${manipulated_file_name}.md`, + manipulated_content_with_doc_tags ); - console.log(`Downloaded to ${RLDocsPath}/${fileName}.md`); + console.log(`Downloaded to ${rl_docs_path}/${file_name}.md`); }) ); diff --git a/scripts/token-registry.ts b/scripts/token-registry.ts index 2d961485af..a79f07c09e 100644 --- a/scripts/token-registry.ts +++ b/scripts/token-registry.ts @@ -2,28 +2,28 @@ import * as fs from "fs"; import * as path from "path"; import { getStringContentAsync, - injectDocusaurusDocTags, - injectInformation, } from "./reusable"; import { - TRDocsPath, - TRUrl, - TROverviewUrl, - TRrepoRawWikiHomeUrl, + tr_docs_path, + tr_url, + tr_overview_url, + tr_raw_wiki_url, + tr_github_wiki, + custom_edit_url } from "./constants"; // Current pathname -const pathName = path.basename(__filename); +const path_name = path.basename(__filename); // Fetch and manipulate overview markdown file const getOverviewMarkdown = async () => { // Fetch raw overview file - const content = await getStringContentAsync(TROverviewUrl); + const content = await getStringContentAsync(tr_overview_url); // Modify content to ensure compatibility - const modifiedContent = overviewStringManipulation(content); + const modified_content = overviewStringManipulation(content); - return modifiedContent; + return modified_content; }; // Manipulate URL string @@ -66,18 +66,34 @@ const markdownStringManipulation = (content: string) => { return content; }; +// Clear up this is auto generated file from Token Registry repository +const injectAutogeneratedMessage = (content: string, file_name: string, path: string) => { + return ( + content + + "\n" + + "## Token Registry Information \nThis page was generated automatically from: [" + + tr_github_wiki + + "](" + + tr_github_wiki + + "/" + + file_name + + ")." + ); +} + // String manipulations to ensure compatibility -const stringManipulation = (content: string, fileName: string) => { - // Remove `(` and `)` from relative links (temporariy not in use, using hardcoded solution for now) +const stringManipulation = (content: string, file_name: string) => { + // Remove `(` and `)` from relative links (temporary not in use, using hardcoded solution for now) // content = content.replace(/(?<=\]\()(.*)(?=\))/g, (x) => x.replace(/[()]/g, '')); - // Remove `(` and `)` from relative links (temporariy solution focusing on specific link, in the future needs to be changed to work through all of the links) + // Remove `(` and `)` from relative links (temporary solution focusing on specific link, in the future needs to be changed to work through all of the links) content = content.replace( "How-to-prepare-an-entry-for-the-registry-(NA-policy-script)", "How-to-prepare-an-entry-for-the-registry-NA-policy-script" ); - content = injectInformation(content, fileName, pathName); + // Clear up this is auto generated file from Token Registry repository + content = injectAutogeneratedMessage(content, file_name, path_name); return content; }; @@ -85,11 +101,11 @@ const stringManipulation = (content: string, fileName: string) => { // Inject extra docusaurus doc tags and manipulate overview markdown file content const overviewStringManipulation = (content: string) => { // Extra content - const extraContent = - "--- \nid: cardano-token-registry \ntitle: Cardano Token Registry \nsidebar_label: Overview \ndescription: The Cardano Token Registry provides a means to register off-chain token metadata that can map to on-chain identifiers. \nimage: ../img/og-developer-portal.png \nsidebar_position: 1 \n--- \nThe [Cardano Token Registry](https://github.com/cardano-foundation/cardano-token-registry) provides a means to register off-chain token metadata to map to on-chain identifiers (typically hashes representing asset IDs, output locking scripts, or token forging policies).\n\n"; + const extra_content = + "--- \nid: cardano-token-registry \ntitle: Cardano Token Registry \nsidebar_label: Overview \ndescription: The Cardano Token Registry provides a means to register off-chain token metadata that can map to on-chain identifiers. \nimage: /img/og/og-developer-portal.png \nsidebar_position: 1 \n--- \nThe [Cardano Token Registry](https://github.com/cardano-foundation/cardano-token-registry) provides a means to register off-chain token metadata to map to on-chain identifiers (typically hashes representing asset IDs, output locking scripts, or token forging policies).\n\n"; // Add extra content - content = extraContent + content; + content = extra_content + content; // Remove unused content content = content @@ -99,21 +115,21 @@ const overviewStringManipulation = (content: string) => { // Replace relative links to absolute links. content = content.replace( /\bRegistry_Terms_of_Use.md\b/g, - TRUrl + "Registry_Terms_of_Use.md" + tr_url + "Registry_Terms_of_Use.md" ); content = content.replace( /\bAPI_Terms_of_Use.md\b/g, - TRUrl + "API_Terms_of_Use.md" + tr_url + "API_Terms_of_Use.md" ); - content = content.replace(/\(\bmappings\b/g, "(" + TRUrl + "mappings"); + content = content.replace(/\(\bmappings\b/g, "(" + tr_url + "mappings"); // Inject token registry link info content = content + " \n## Token Registry Information \nThis page was generated automatically from: [" + - TRUrl + + tr_url + "](" + - TRUrl + + tr_url + "/" + "README.md" + ")."; @@ -121,64 +137,97 @@ const overviewStringManipulation = (content: string) => { return content; }; +// In case we want a specific sidebar_position for a certain filename (otherwise alphabetically) +// In the future it will be better to get this information from the index.rst file +export const sidebarPosition = (file_name: string) => { + if (file_name === "How to prepare an entry for the registry (NA policy script)") + return "sidebar_position: 2\n"; + if (file_name === "How to prepare an entry for the registry (Plutus script)") + return "sidebar_position: 3\n"; + if (file_name === "How to submit an entry to the registry") + return "sidebar_position: 4\n"; + + return ""; // Empty string means alphabetically within the sidebar +}; + +// Inject Docusaurus doc tags for title and add a nice sidebar +const injectDocusaurusDocTags = (content: string, file_name: string) => { + + // Remove '---' from doc to add it later + content = content.substring(0, 3) === "---" ? content.slice(3) : content; + + // Replace '-' from url in order to create a clean sidebar label + const modified_file_name = file_name.replace(/[-]/gm, " "); + + // Add '---' with doc tags for Docusaurus + content = + "--- \nsidebar_label: " + + modified_file_name + + custom_edit_url + + "\ntitle: " + + file_name + + "\n" + + sidebarPosition(file_name) + + "--- " + + "\n" + + content; + + return content; +} + const main = async () => { console.log("Token Registry Content Downloading..."); // Fetch raw wiki content for token registry - const wikiHomeContent = await getStringContentAsync( - `${TRrepoRawWikiHomeUrl}Home.md` + const wiki_home_content = await getStringContentAsync( + `${tr_raw_wiki_url}Home.md` ); // Fetch raw overview content for token registry - const overviewContent = await getOverviewMarkdown(); + const overview_content = await getOverviewMarkdown(); // Find wiki file names in order to fetch them individually - const contentUrls = wikiHomeContent.match(/(?<=\[\[)(.*?)(?=\]\])/g); - const tokeRegistryUniqueUrls = [...new Set(contentUrls)]; + const content_urls = wiki_home_content.match(/(?<=\[\[)(.*?)(?=\]\])/g); + const tr_unique_urls = [...new Set(content_urls)]; // Create token registry folder to store markdown files locally - if (fs.existsSync(TRDocsPath)) { - fs.rmSync(TRDocsPath, { recursive: true }); + if (fs.existsSync(tr_docs_path)) { + fs.rmSync(tr_docs_path, { recursive: true }); } - fs.mkdirSync(TRDocsPath, { recursive: true }); + fs.mkdirSync(tr_docs_path, { recursive: true }); // Create markdown overview file locally with downloaded content - fs.writeFileSync(`${TRDocsPath}/Overview.md`, overviewContent); + fs.writeFileSync(`${tr_docs_path}/Overview.md`, overview_content); // Save token registry markdown files into docs folder await Promise.all( - tokeRegistryUniqueUrls.map(async (trUrl) => { + tr_unique_urls.map(async (tr_url) => { // Get token registry url - const tokenRegistryUrl = await tokenRegistryStringManipulation(trUrl); + const tr_urls = await tokenRegistryStringManipulation(tr_url); // Get markdown file names - const markdownFileName = await markdownStringManipulation(trUrl); + const markdown_file_name = await markdownStringManipulation(tr_url); // Download markdown files const content = await getStringContentAsync( - `${TRrepoRawWikiHomeUrl}${tokenRegistryUrl}.md` + `${tr_raw_wiki_url}${tr_urls}.md` ); // Manipulate content to ensure compatibility - const manipulatedContent = await stringManipulation( + const manipulated_content = await stringManipulation( content, - tokenRegistryUrl + tr_urls ); - // Finish manipulation with injecting docosautus doc tags - const manipulatedContentWithDocTags = injectDocusaurusDocTags( - manipulatedContent, - trUrl, - "", - pathName - ); + // Inject Docusaurus doc tags + const manipulated_content_with_doc_tags = injectDocusaurusDocTags(manipulated_content, tr_url) // Create markdown files locally with downloaded content fs.writeFileSync( - `${TRDocsPath}/${markdownFileName}.md`, - manipulatedContentWithDocTags + `${tr_docs_path}/${markdown_file_name}.md`, + manipulated_content_with_doc_tags ); - console.log(`Downloaded to ${TRDocsPath}/${markdownFileName}.md`); + console.log(`Downloaded to ${tr_docs_path}/${markdown_file_name}.md`); }) ); diff --git a/sidebars.js b/sidebars.js index d828a48666..b4e5b6a47c 100644 --- a/sidebars.js +++ b/sidebars.js @@ -15,22 +15,40 @@ module.exports = { { type: "category", label: "Security Best Practices", - items: [ - "get-started/air-gap", - "get-started/secure-workflow", - ], + items: ["get-started/air-gap", "get-started/secure-workflow"], }, { type: "category", label: "Builder Tools", items: [ - "get-started/blockfrost", + "get-started/aiken", + { + type: "category", + label: "Blockfrost", + items: [ + { + type: "autogenerated", + dirName: "get-started/blockfrost", + }, + ], + }, "get-started/cardanocli-js", "get-started/cardano-wallet-js", "get-started/cscli", "get-started/dandelion-apis", "get-started/koios", + { + type: "category", + label: "Mesh (Web3 SDK)", + items: [ + { + type: "autogenerated", + dirName: "get-started/mesh", + }, + ], + }, "get-started/ogmios", + "get-started/plu-ts", "get-started/cardanosharp-wallet", { type: "category", @@ -38,8 +56,8 @@ module.exports = { items: [ { // Generate sidebar automatically from docs/get-started/cardano-serialization-lib - type: 'autogenerated', - dirName: 'get-started/cardano-serialization-lib', + type: "autogenerated", + dirName: "get-started/cardano-serialization-lib", }, ], }, @@ -56,7 +74,9 @@ module.exports = { "integrate-cardano/multi-witness-transactions-cli", "integrate-cardano/listening-for-payments-cli", "integrate-cardano/listening-for-payments-wallet", + "integrate-cardano/point-of-sale", "integrate-cardano/testnet-faucet", + "integrate-cardano/user-wallet-authentication", ], "Build with Transaction Metadata": [ "transaction-metadata/overview", @@ -68,38 +88,40 @@ module.exports = { "native-tokens/overview", "native-tokens/minting", "native-tokens/minting-nfts", - { - type: "category", - label: "Token Registry", - items: [ - { - // Generate sidebar automatically from docs/native-tokens/token-registry - type: 'autogenerated', - dirName: 'native-tokens/token-registry', - }, - ], - }, - + { + type: "category", + label: "Token Registry", + items: [ + { + // Generate sidebar automatically from docs/native-tokens/token-registry + type: "autogenerated", + dirName: "native-tokens/token-registry", + }, + ], + }, ], "Create Smart Contracts": [ "smart-contracts/overview", "smart-contracts/marlowe", "smart-contracts/plutus", + "smart-contracts/aiken", + "smart-contracts/opshin", + "smart-contracts/plu-ts", ], "Be Part of the Governance": [ "governance/overview", - { - type: "category", - label: "Cardano Improvement Proposals (CIPs)", - items: [ - { - // Generate sidebar automatically from docs/governance/cardano-improvement-proposals - type: 'autogenerated', - dirName: 'governance/cardano-improvement-proposals', - }, - ], - }, - "governance/project-catalyst", + { + type: "category", + label: "Cardano Improvement Proposals (CIPs)", + items: [ + { + // Generate sidebar automatically from docs/governance/cardano-improvement-proposals + type: "autogenerated", + dirName: "governance/cardano-improvement-proposals", + }, + ], + }, + "governance/project-catalyst", ], "Operate a Stake Pool": [ "operate-a-stake-pool/overview", @@ -119,7 +141,7 @@ module.exports = { type: "category", label: "Handbook", items: [ - // "stake-pool-course/handbook/grafana-dashboard-tutorial", + "stake-pool-course/handbook/grafana-loki", "stake-pool-course/handbook/setup-virtual-box-written", "stake-pool-course/handbook/setup-a-server-on-aws-written", "stake-pool-course/handbook/setup-firewall", @@ -149,64 +171,66 @@ module.exports = { ], }, { - type: "category", + type: "category", label: "Operator Tools", items: [ "operate-a-stake-pool/guild-ops-suite", "operate-a-stake-pool/ansible-cardano-node", + "operate-a-stake-pool/frankenwallet", ], }, "operate-a-stake-pool/marketing-stake-pool", ], "Stake Pool Guide": [ - { - type: "category", - label: "Overview", - items: [ - "stake-pool-guide/stake-pool-basics", - "stake-pool-guide/get-started", - "stake-pool-guide/prerequisites", - "stake-pool-guide/stake-pool-networking", - "stake-pool-guide/hardware-requirements", - ], - }, - { + { type: "category", - label: "Installation Guide (Node)", + label: "Overview", items: [ - "stake-pool-guide/node-installation-process", - ], - }, - { + "stake-pool-guide/stake-pool-basics", + "stake-pool-guide/get-started", + "stake-pool-guide/prerequisites", + "stake-pool-guide/stake-pool-networking", + "stake-pool-guide/hardware-requirements", + ], + }, + { + type: "category", + label: "Installation Guide (Node)", + items: ["stake-pool-guide/node-installation-process"], + }, + { type: "category", label: "Cardano Relay Configuration", items: [ - "stake-pool-guide/cardano-relay-configuration", - "stake-pool-guide/monitoring-gLiveView", - "stake-pool-guide/grafana-dashboard", - ], - }, - { + "stake-pool-guide/cardano-relay-configuration", + "stake-pool-guide/monitoring-gLiveView", + "stake-pool-guide/grafana-dashboard-tutorial", + ], + }, + { type: "category", label: "Cardano Block Producer Configuration", items: [ - "stake-pool-guide/generating-wallet-keys", - "stake-pool-guide/block-producer-keys", - "stake-pool-guide/register-stake-address.md", - ], - }, - { + "stake-pool-guide/generating-wallet-keys", + "stake-pool-guide/block-producer-keys", + "stake-pool-guide/register-stake-address", + ], + }, + { type: "category", label: "Deployment Scenarios", - items: [ - "stake-pool-guide/improve-grafana-security", - ], - }, + items: ["stake-pool-guide/improve-grafana-security"], + }, ], "Contribute to the Developer Portal": [ "portal-contributors", "portal-contribute", "portal-style-guide", + { + type: "link", + label: "Changelog", + href: "/changelog", + }, ], }, }; diff --git a/src/aiken.prism.lang.js b/src/aiken.prism.lang.js new file mode 100644 index 0000000000..2e2fcdff65 --- /dev/null +++ b/src/aiken.prism.lang.js @@ -0,0 +1,26 @@ +Prism.languages.aiken = { + 'string': /".*"/, + 'comment': /\/\/.*/, + 'number': /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i, + 'boolean': /\btrue|false\b/, + 'class-name': /\b[A-Z]\w*\b/, + 'punctuation': /\./, + 'function-definition': { + pattern: /\b(fn|test\s)[^(]*/, + alias: 'function', + lookbehind: true + }, + 'variable': { + pattern: /\b(let\s)[^=]*/, + lookbehind: true + }, + 'keyword': /\b(if|else|fn|let|when|is|use|pub|type|opaque|const|todo|assert|check|test)\b/, + 'operator': [ + /&&|\\|\|/, + /\+|\-|\/|\*|%/, + /<=|>=|==|!=|<|>/, + /\.\./, + /\|>/, + /->/ + ] +}; diff --git a/src/components/docs/HydraBuildList/README.txt b/src/components/docs/HydraBuildList/README.txt new file mode 100644 index 0000000000..5d0d550754 --- /dev/null +++ b/src/components/docs/HydraBuildList/README.txt @@ -0,0 +1,6 @@ +This code appears to be permanently deprecated by: +https://github.com/cardano-foundation/developer-portal/issues/871 +https://github.com/input-output-hk/cardano-node/issues/4688 + +and is now being removed from the one documentation file which references it: +/docs/get-started/installing-cardano-node.md diff --git a/src/components/showcase/ShowcaseCard/index.js b/src/components/showcase/ShowcaseCard/index.js index 0858a45975..6ccc6f2d8f 100644 --- a/src/components/showcase/ShowcaseCard/index.js +++ b/src/components/showcase/ShowcaseCard/index.js @@ -61,7 +61,7 @@ const ShowcaseCard = memo((card) => ( {card.showcase.title} {card.showcase.tags.includes("favorite") && ( - + )} {card.showcase.getstarted && ( { setOperator(readOperator(location.search) === "OR"); diff --git a/src/components/showcase/ShowcaseLatestToggle/index.js b/src/components/showcase/ShowcaseLatestToggle/index.js new file mode 100644 index 0000000000..1ec66547a9 --- /dev/null +++ b/src/components/showcase/ShowcaseLatestToggle/index.js @@ -0,0 +1,69 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React, { useState, useEffect, useCallback } from "react"; +import { useHistory, useLocation } from "@docusaurus/router"; + +import {prepareUserState} from '../../../pages/tools/index'; + +import styles from "./styles.module.css"; +import clsx from "clsx"; + +export const Operator = "ALL" | "LATEST"; + +export const OperatorQueryKey = "projects"; + +export function readLatestOperator(search) { + return new URLSearchParams(search).get(OperatorQueryKey) ?? "ALL"; +} + +export default function ShowcaseLatestToggle() { + const id = "showcase_filter_toggle_latest"; + const location = useLocation(); + const history = useHistory(); + const [operator, setOperator] = useState(false); + + useEffect(() => { + setOperator(readLatestOperator(location.search) === "LAST"); + }, [location]); + + const toggleOperator = useCallback(() => { + setOperator((o) => !o); + const searchParams = new URLSearchParams(location.search); + searchParams.delete(OperatorQueryKey); + if (!operator) { + searchParams.append(OperatorQueryKey, operator ? "ALL" : "LAST"); + } + history.push({ + ...location, + search: searchParams.toString(), + state: prepareUserState(), + }); + }, [operator, location, history]); + + return ( +
+ { + if (e.key === "Enter") { + toggleOperator(); + } + }} + checked={!operator} + /> + {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */} + +
+ ); +} diff --git a/src/components/showcase/ShowcaseLatestToggle/styles.module.css b/src/components/showcase/ShowcaseLatestToggle/styles.module.css new file mode 100644 index 0000000000..e147ae5b26 --- /dev/null +++ b/src/components/showcase/ShowcaseLatestToggle/styles.module.css @@ -0,0 +1,70 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + .screenReader { + border: 0; + clip: rect(0 0 0 0); + clip-path: polygon(0 0, 0 0, 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 10px; + white-space: nowrap; + } + + .checkboxLabel { + --height: 25px; + --width: 80px; + --border: 2px; + display: flex; + width: var(--width); + height: var(--height); + position: relative; + border-radius: var(--height); + border: var(--border) solid var(--ifm-color-primary-darkest); + cursor: pointer; + justify-content: space-around; + opacity: 0.75; + transition: opacity var(--ifm-transition-fast) + var(--ifm-transition-timing-default); + box-shadow: var(--ifm-global-shadow-md); + } + + .checkboxLabel:hover { + opacity: 1; + box-shadow: var(--ifm-global-shadow-md), + 0 0 2px 1px var(--ifm-color-primary-dark); + } + + .checkboxLabel::after { + position: absolute; + content: ''; + inset: 0; + width: calc(var(--width) / 2); + height: 100%; + border-radius: var(--height); + background-color: var(--ifm-color-primary-darkest); + transition: transform var(--ifm-transition-fast) + var(--ifm-transition-timing-default); + transform: translateX(calc(var(--width) / 2 - var(--border))); + } + + input:focus-visible ~ .checkboxLabel::after { + outline: 2px solid currentColor; + } + + .checkboxLabel > * { + font-size: 0.8rem; + color: inherit; + transition: opacity 150ms ease-in 50ms; + } + + input:checked ~ .checkboxLabel::after { + transform: translateX(calc(-1 * var(--border))); + } \ No newline at end of file diff --git a/src/data/builder-tools.js b/src/data/builder-tools.js index 819c11bd4b..83c99a70ea 100644 --- a/src/data/builder-tools.js +++ b/src/data/builder-tools.js @@ -2,13 +2,10 @@ * BUILDER TOOLS SECTION INFO * * Requirements for adding your builder tool: - * - It is an actual builder tool that adds value to Cardano developers. - * - It has a stable domain name (a random for example, Netlify/Vercel domain is not allowed) - * - The GitHub account that adds the builder tool must not be new. - * - The GitHub account must have a history/or already be known in the Cardano community. + * https://developers.cardano.org/docs/portal-contribute#add-tools-to-builder-tools * * Instructions: - * - Add your tool in the json array below, in alphabetical order of title + * - Add your tool in the json array at the end of the array. * - Add a local image preview. (decent screenshot or logo of your builder tool) * - The image must be added to the GitHub repository and use `require("image")`. * @@ -28,12 +25,12 @@ export const Tags = { color: '#e9669e', }, - // API - api: { - label: "API", - description: "Cardano API.", + // Aiken + aiken: { + label: "Aiken", + description: "Aiken and its development tools & libraries", icon: null, - color: '#39ca30', + color: '#65d2a1', }, // Chain Index @@ -50,20 +47,21 @@ export const Tags = { label: "CLI", description: "Command-line interface tools", icon: null, - color: '#fce300', + color: '#921f32', }, - // For builder tools with a get started tag, a link to the get started page is required. - getstarted: { - label: "Get Started", - description: "This builder tool has a get started page in the developer portal.", + // Crystal + crystal: { + label: "Crystal", + description: + "Crystal language", icon: null, - color: '#dfd545', + color: '#ddd', }, // Golang golang: { - label: "golang", + label: "Go", description: "Go language", icon: null, @@ -86,7 +84,7 @@ export const Tags = { "Java language", icon: null, color: '#d5232d', - }, + }, // JavaScript javascript: { @@ -94,16 +92,23 @@ export const Tags = { description: "JavaScript language", icon: null, - color: '#921f32', - }, + color: '#fce300', + }, - // Library - library: { - label: "Library", - description: - "Cardano library.", + // Koios + koios: { + label: "Koios", + description: "Koios and its integrations", + icon: null, + color: "#b84421" + }, + + // Kotlin + kotlin: { + label: "Kotlin", + description: "Kotlin language", icon: null, - color: '#a44fb7', + color: "#9c21b8" }, // Marlowe @@ -131,6 +136,14 @@ export const Tags = { color: '#fe6829', }, + // Ogmios + ogmios: { + label: "Ogmios", + description: "Ogmios and its integrations", + icon: null, + color: "#ff6d01" + }, + // Stake Pool Operator Tools operatortool: { label: "Operator Tool", @@ -175,18 +188,202 @@ export const Tags = { color: '#7e6a4c', }, + // Purescript + purescript: { + label: "Purescript", + description: + "PureScript language", + icon: null, + color: '#0F9D58', + }, + + // WebSocket + websocket: { + label: "WebSocket", + description: + "API w/ WebSocket", + icon: null, + color: "#1DB7ff" + }, + + // HTTP + http: { + label: "HTTP", + description: + "API w/ HTTP", + icon: null, + color: "#7F8C8D" + }, + + // JSON + json: { + label: "JSON", + description: + "JSON data format", + icon: null, + color: "#FCE300" + }, + + // Haskell + haskell: { + label: "Haskell", + description: + "Haskell language", + icon: null, + color: "#5F5287" + }, + + // TypeScript + typescript: { + label: "TypeScript", + description: + "TypeScript language", + icon: null, + color: "#2D79C7" + }, + + // Wallet + wallet: { + label: "Wallet", + description: + "Wallet integrations or implementations", + icon: null, + color: "#E1B12c" + }, + + // Serialization + serialization: { + label: "Serialization", + description: + "Binary serialization / deserialization", + icon: null, + color: "#D6A2E8" + }, + + // SDK + sdk: { + label: "SDK", + description: + "Software Development Kit", + icon: null, + color: "#B33771" + }, + + // Redis + redis: { + label: "Redis", + description: "Redis", + icon: null, + color: "#FD7272" + }, + + // SQL + sql: { + label: "SQL", + description: "SQL database (MySQL, PostgreSQL, SQLite...)", + icon: null, + color: "#FD7272" + }, + + // Low-Level + lowlevel: { + label: "Low-Level", + description: "Low-level utility", + icon: null, + color: "#2C3A47" + }, + + // Testing + testing: { + label: "Testing", + description: "Testing / Quality Assurance tool", + icon: null, + color: "#B8E994" + }, + + // Hosted + hosted: { + label: "Hosted Service", + description: "Hosted / 3rd-party service", + icon: null, + color: "#4a69BD" + }, }; // Add your builder tool to (THE END OF) this list. // Please don't add the "favorite"-tag yourself. -const Showcases = [ +export const Showcases = [ + { + title: "cardano-cli", + description: "The companion command-line to interact with a Cardano node, manipulate addresses or create transactions.", + preview: require("./builder-tools/cardano-cli.png"), + website: "https://github.com/input-output-hk/cardano-node/tree/master/cardano-cli#cardano-cli", + getstarted: null, + tags: ["favorite", "cli", "serialization"] + }, + { + title: "bech32", + description: "Convert to and from bech32 strings from the command-line. A simple and easy-to-use unix utility.", + preview: require("./builder-tools/bech32.png"), + website: "https://github.com/input-output-hk/bech32/#readme", + getstarted: null, + tags: ["cli", "serialization"] + }, + { + title: "cardano-wallet", + description: "An HTTP server and command-line for managing UTxOs and hierarchical deterministic wallets in Cardano.", + preview: require("./builder-tools/cardano-wallet.png"), + website: "https://github.com/input-output-hk/cardano-wallet/#overview", + getstarted: "https://input-output-hk.github.io/cardano-wallet/", + tags: ["http", "json", "wallet"] + }, + { + title: "cardano-graphql", + description: "A cross-platform, typed, and queryable API for Cardano.", + preview: require("./builder-tools/cardano-graphql.png"), + website: "https://github.com/input-output-hk/cardano-graphql/#overview", + getstarted: "https://github.com/input-output-hk/cardano-graphql#getting-started", + tags: ["chainindex", "http"] + }, + { + title: "cardano-rosetta", + description: "An implementation of Rosetta (an open-source specification and set of tools for blockchain integration) for Cardano. Rosetta’s goal is to make blockchain integration simpler, faster, and more reliable than using a native integration.", + preview: require("./builder-tools/cardano-rosetta.png"), + website: "https://github.com/input-output-hk/cardano-rosetta/#cardano-rosetta", + getstarted: "https://www.rosetta-api.org/docs/getting_started.html", + tags: ["http", "json"] + }, + { + title: "cardano-db-sync", + description: "A PostgreSQL database layer which stores all data from the Cardano blockchain in a structured and normalized way.", + preview: require("./builder-tools/cardano-db-sync.png"), + website: "https://github.com/input-output-hk/cardano-db-sync#cardano-db-sync", + getstarted: null, + tags: ["chainindex", "sql"] + }, + { + title: "cardano-addresses", + description: "A command-line utility and library for manipulating addresses, keys and recovery phrases on Cardano.", + preview: require("./builder-tools/cardano-addresses.png"), + website: "https://github.com/input-output-hk/cardano-addresses#overview", + getstarted: "https://github.com/input-output-hk/cardano-addresses#command-line", + tags: ["cli", "haskell", "serialization"] + }, { title: "Blockfrost", description: "Instant and scalable API to the Cardano blockchain.", preview: require("./builder-tools/blockfrost.png"), website: "https://blockfrost.io", getstarted: "/docs/get-started/blockfrost", - tags: ["favorite", "getstarted", "api"], + tags: ["favorite", "http", "json", "hosted"], + }, + { + title: "StakePool Operator Scripts", + description: "CLI scripts to manage your stake pool (online or offline), use and migrate to hardware wallets, send transactions with messages, register for Catalyst, mint/burn Tokens, generate the Token Registry, and more.", + preview: require("./builder-tools/spo-scripts-gitmachtl.png"), + website: "https://github.com/gitmachtl/scripts", + getstarted: null, + tags: ["operatortool", "cli", "serialization"], }, { title: "Cardano Serialization Library", @@ -195,7 +392,15 @@ const Showcases = [ preview: require("./builder-tools/cardano-serialization-lib.png"), website: "https://github.com/Emurgo/cardano-serialization-lib", getstarted: "/docs/get-started/cardano-serialization-lib/overview", - tags: ["getstarted", "library", "rust"], + tags: ["serialization", "rust"], + }, + { + title: "Cardano Transaction Library", + description: "A Purescript library for building smart contract transactions on Cardano (NodeJS & the browser)", + preview: require("./builder-tools/cardano-transaction-lib.png"), + website: "https://github.com/Plutonomicon/cardano-transaction-lib/", + getstarted: "https://github.com/Plutonomicon/cardano-transaction-lib/blob/develop/doc/getting-started.md", + tags: ["purescript", "sdk", "plutus"] }, { title: "cardanocli-js", @@ -203,7 +408,7 @@ const Showcases = [ preview: require("./builder-tools/cardanocli-js.png"), website: "https://github.com/Berry-Pool/cardanocli-js", getstarted: "/docs/get-started/cardanocli-js", - tags: ["getstarted", "library"], + tags: ["javascript", "sdk"], }, { title: "Dandelion APIs", @@ -212,7 +417,7 @@ const Showcases = [ preview: require("./builder-tools/dandelion-apis.png"), website: "https://gimbalabs.com/dandelion", getstarted: "/docs/get-started/dandelion-apis", - tags: ["getstarted", "api"], + tags: ["http", "websocket", "json", "hosted"], }, { title: "Ogmios", @@ -220,7 +425,7 @@ const Showcases = [ preview: require("./builder-tools/ogmios.png"), website: "https://ogmios.dev", getstarted: "/docs/get-started/ogmios", - tags: ["favorite", "getstarted", "library"], + tags: ["favorite", "ogmios", "websocket", "json", "lowlevel"], }, { title: "Cardano Client Library", @@ -229,7 +434,7 @@ const Showcases = [ preview: require("./builder-tools/cardano-client-lib.png"), website: "https://github.com/bloxbean/cardano-client-lib", getstarted: null, - tags: ["library", "java"], + tags: ["java", "sdk", "favorite"], }, { title: "Imperator - imperative, secure SC programming language", @@ -246,7 +451,7 @@ const Showcases = [ preview: require("./builder-tools/cardano-addresses-typescript-binding.png"), website: "https://www.npmjs.com/package/cardano-addresses", getstarted: null, - tags: ["api", "javascript"], + tags: ["typescript", "serialization"], }, { title: "Heidrun", @@ -255,15 +460,15 @@ const Showcases = [ preview: require("./builder-tools/heidrun.png"), website: "https://github.com/adosia/Heidrun", getstarted: null, - tags: ["api"], + tags: ["http", "json"], }, { title: "cardano-wallet-js", - description: "A javascript/typescript SDK for Cardano Wallet with a extra functionalities. You can use it as a client for the official cardano-wallet and also to create Native Tokens and NFTs.", + description: "A JavaScript SDK for Cardano Wallet with a extra functionalities. You can use it as a client for the official cardano-wallet and also to create Native Tokens and NFTs.", preview: require("./builder-tools/cardano-wallet-js.png"), website: "https://github.com/tango-crypto/cardano-wallet-js", getstarted: "/docs/get-started/cardano-wallet-js", - tags: ["getstarted", "library", "javascript"] + tags: ["javascript", "sdk", "wallet"] }, { title: "CardanoSharp Wallet", @@ -272,7 +477,7 @@ const Showcases = [ preview: require("./builder-tools/cardanosharp.png"), website: "https://www.cardanosharp.com", getstarted: "/docs/get-started/cardanosharp-wallet", - tags: ["favorite", "getstarted", "library", "net"], + tags: ["favorite", "sdk", "wallet", "net"], }, { title: "Cardano Metadata Oracle", @@ -280,7 +485,7 @@ const Showcases = [ preview: require("./builder-tools/cardano-metadata-oracle.png"), website: "https://github.com/fivebinaries/cardano-metadata-oracle", getstarted: null, - tags: ["oracle"], + tags: ["oracle", "cli"], }, { title: "Guild Operators Suite", @@ -288,7 +493,7 @@ const Showcases = [ preview: require("./builder-tools/guild-operators.png"), website: "https://cardano-community.github.io/guild-operators/", getstarted: "/docs/operate-a-stake-pool/guild-ops-suite", - tags: ["favorite", "getstarted", "operatortool"], + tags: ["favorite", "operatortool"], }, { title: "libada-go", @@ -296,7 +501,7 @@ const Showcases = [ preview: require("./builder-tools/libada-go.png"), website: "https://github.com/Bitrue-exchange/libada-go", getstarted: null, - tags: ["favorite", "library", "golang"], + tags: ["golang", "sdk"], }, { title: "go-cardano-serialization", @@ -304,7 +509,7 @@ const Showcases = [ preview: require("./builder-tools/go-cardano-serialisation.png"), website: "https://github.com/fivebinaries/go-cardano-serialization", getstarted: null, - tags: ["favorite", "library", "golang"], + tags: ["favorite", "golang", "serialization"], }, { title: "Pooldata API", @@ -312,7 +517,7 @@ const Showcases = [ preview: require("./builder-tools/pooldata-api.png"), website: "https://api.pooldata.live", getstarted: null, - tags: ["operatortool", "api"], + tags: ["operatortool", "http", "hosted"], }, { title: "Python Module", @@ -320,7 +525,7 @@ const Showcases = [ preview: require("./builder-tools/cardano-python.png"), website: "https://github.com/emesik/cardano-python", getstarted: null, - tags: ["library", "api", "python"], + tags: ["sdk", "python"], }, { title: "Plutus Playground", @@ -328,15 +533,15 @@ const Showcases = [ preview: require("./builder-tools/plutus-playground.png"), website: "https://playground.plutus.iohkdev.io", getstarted: "/docs/smart-contracts/plutus#plutus-playground", - tags: ["favorite", "getstarted", "plutus"], + tags: ["favorite", "plutus", "hosted"], }, { title: "Marlowe Playground", description: "In the browser-based Marlowe Playground you can write Marlowe contracts, in a variety of different ways.", preview: require("./builder-tools/marlowe-playground.png"), - website: "https://alpha.marlowe.iohkdev.io/#/", + website: "https://play.marlowe-finance.io", getstarted: "/docs/smart-contracts/marlowe#marlowe-playground", - tags: ["favorite", "getstarted", "marlowe"], + tags: ["favorite", "marlowe", "hosted"], }, { title: "Automint", @@ -345,7 +550,7 @@ const Showcases = [ preview: require("./builder-tools/automint.png"), website: "https://github.com/creativequotient/automint", getstarted: null, - tags: ["library"], + tags: ["python", "nft"], }, { title: "Ansible cardano-node", @@ -353,7 +558,7 @@ const Showcases = [ preview: require("./builder-tools/ansible-cardano-node.png"), website: "https://github.com/moaipool/ansible-cardano-node", getstarted: "/docs/operate-a-stake-pool/ansible-cardano-node", - tags: ["getstarted", "operatortool"], + tags: ["operatortool"], }, { title: "Fracada", @@ -375,11 +580,11 @@ const Showcases = [ }, { title: "cardano-wallet-interface", - description: "A Javascript/Typescript library to easily interact with the dApp connector of various wallets.", + description: "A Javascript library to easily interact with the dApp connector of various wallets.", preview: require("./builder-tools/cardano-wallet-interface.png"), website: "https://github.com/HarmonicPool/cardano-wallet-interface", getstarted: null, - tags: ["library", "javascript"], + tags: ["javascript", "wallet"], }, { title: "Plutus Fee Estimator", @@ -387,7 +592,7 @@ const Showcases = [ preview: require("./builder-tools/plutus-fee-estimator.png"), website: "https://testnets.cardano.org/en/testnets/cardano/tools/plutus-fee-estimator/", getstarted: null, - tags: ["plutus"], + tags: ["plutus", "hosted"], }, { title: "Plutus Extra", @@ -395,7 +600,7 @@ const Showcases = [ preview: require("./builder-tools/plutus-extra.png"), website: "https://github.com/Liqwid-Labs/plutus-extra", getstarted: null, - tags: ["library", "plutus"], + tags: ["plutus", "haskell"], }, { title: "PyCardano", @@ -404,7 +609,7 @@ const Showcases = [ preview: require("./builder-tools/pycardano.png"), website: "https://github.com/cffls/pycardano", getstarted: null, - tags: ["library", "api", "python"], + tags: ["python", "sdk"], }, { title: "Oura - the tail of Cardano", @@ -422,7 +627,7 @@ const Showcases = [ preview: require("./builder-tools/cardano-wallet-connector.png"), website: "https://github.com/dynamicstrategies/cardano-wallet-connector", getstarted: null, - tags: ["javascript","nft","plutus"], + tags: ["javascript", "wallet", "plutus"], }, { title: "Stricahq Typhonjs Wallet", @@ -431,7 +636,7 @@ const Showcases = [ preview: require("./builder-tools/typhonjs.png"), website: "https://github.com/StricaHQ/typhonjs", getstarted: null, - tags: ["javascript","library","plutus"], + tags: ["javascript", "wallet"], }, { title: "IntelliJ IDE", @@ -449,7 +654,7 @@ const Showcases = [ preview: require("./builder-tools/cardano-snapshots.png"), website: "https://cSnapshots.io", getstarted: null, - tags: ["operatortool"], + tags: ["operatortool", "chainindex", "hosted"], }, { title: "Koios", @@ -457,7 +662,7 @@ const Showcases = [ preview: require("./builder-tools/koios.png"), website: "https://koios.rest", getstarted: "/docs/get-started/koios", - tags: ["getstarted", "api"], + tags: ["koios", "http", "json", "hosted"], }, { title: "Pallas", @@ -465,7 +670,7 @@ const Showcases = [ preview: require("./builder-tools/pallas.png"), website: "https://github.com/txpipe/pallas#readme", getstarted: null, - tags: ["library", "rust"] + tags: ["rust", "lowlevel"] }, { title: "Scrolls", @@ -473,7 +678,7 @@ const Showcases = [ preview: require("./builder-tools/scrolls.png"), website: "https://github.com/txpipe/scrolls#readme", getstarted: null, - tags: ["chainindex", "api", "favorite"] + tags: ["chainindex", "redis", "favorite"] }, { title: "Kupo", @@ -481,7 +686,7 @@ const Showcases = [ preview: require("./builder-tools/kupo.png"), website: "https://github.com/CardanoSolutions/kupo#readme", getstarted: null, - tags: ["chainindex", "api", "favorite"] + tags: ["chainindex", "http", "json", "favorite"] }, { title: "cardano-multiplatform-lib", @@ -489,7 +694,7 @@ const Showcases = [ preview: require("./builder-tools/cardano-multiplatform-lib.png"), website: "https://github.com/dcSpark/cardano-multiplatform-lib#cardano-multiplatform-lib", getstarted: null, - tags: ["library", "rust", "favorite"] + tags: ["rust", "serialization", "favorite"] }, { title: "cardano-js-sdk", @@ -497,7 +702,7 @@ const Showcases = [ preview: require("./builder-tools/cardano-js-sdk.png"), website: "https://github.com/input-output-hk/cardano-js-sdk/#readme", getstarted: null, - tags: ["library", "javascript"] + tags: ["sdk", "javascript"] }, { title: "Lucid", @@ -505,7 +710,7 @@ const Showcases = [ preview: require("./builder-tools/lucid.png"), website: "https://github.com/Berry-Pool/lucid#readme", getstarted: null, - tags: ["library", "javascript", "plutus"] + tags: ["javascript", "sdk", "plutus"] }, { title: "Pirouette", @@ -513,7 +718,7 @@ const Showcases = [ preview: require("./builder-tools/pirouette.png"), website: "https://github.com/tweag/pirouette#readme", getstarted: null, - tags: ["library", "plutus"] + tags: ["haskell", "plutus", "testing"] }, { title: "Pluto", @@ -521,7 +726,7 @@ const Showcases = [ preview: require("./builder-tools/pluto.png"), website: "https://github.com/Plutonomicon/pluto#pluto", getstarted: null, - tags: ["library", "plutus"] + tags: ["plutus", "lowlevel"] }, { title: "Plutonomicon", @@ -537,7 +742,7 @@ const Showcases = [ preview: require("./builder-tools/plutarch.png"), website: "https://github.com/Plutonomicon/plutarch#plutarch", getstarted: null, - tags: ["plutus"] + tags: ["plutus", "haskell"] }, { title: "Tangocrypto", @@ -545,7 +750,7 @@ const Showcases = [ preview: require("./builder-tools/tangocrypto.png"), website: "https://tangocrypto.com", getstarted: "/docs/get-started/tangocrypto", - tags: ["getstarted", "api", "nft", "chainindex"], + tags: ["http", "json", "hosted"], }, { title: "go-ouroboros-network", @@ -553,7 +758,7 @@ const Showcases = [ preview: require("./builder-tools/go-ouroboros-network.png"), website: "https://github.com/cloudstruct/go-ouroboros-network", getstarted: null, - tags: ["library", "golang"] + tags: ["golang", "lowlevel"] }, { title: "cscli", @@ -561,11 +766,270 @@ const Showcases = [ preview: require("./builder-tools/cscli.png"), website: "https://github.com/CardanoSharp/cscli", getstarted: "/docs/get-started/cscli", - tags: ["getstarted", "cli"], + tags: ["cli", "serialization", "wallet"], + }, + { + title: "HeliosLang", + description: "A DSL for writing Cardano Smart Contracts. Reference compiler is a single Javascript file without dependencies.", + preview: require("./builder-tools/helioslang.png"), + website: "https://github.com/Hyperion-BT/Helios", + getstarted: null, + tags: ["javascript", "plutus"], + }, + { + title: "plu-ts", + description: "Typescript-embedded smart contract programming language and transaction creation library", + preview: require("./builder-tools/plu-ts.png"), + website: "https://pluts.harmoniclabs.tech/docs/intro", + getstarted: "/docs/get-started/plu-ts", + tags: ["plutus", "javascript", "typescript", "serialization"], + }, + { + title: "cardanocli-pluts", + description: "Wrapper of the cardano-cli tool based on the plu-ts offchain types", + preview: require("./builder-tools/plu-ts.png"), + website: "https://github.com/HarmonicLabs/cardanocli-pluts", + getstarted: null, + tags: ["javascript", "typescript", "serialization"], + }, + { + title: "koios-pluts", + description: "Wrapper of the koios tool based on the plu-ts offchain types", + preview: require("./builder-tools/plu-ts.png"), + website: "https://github.com/HarmonicLabs/koios-pluts", + getstarted: null, + tags: ["javascript", "typescript", "serialization", "koios"], + }, + { + title: "Aiken", + description: "A modern smart contract platform for Cardano.", + preview: require("./builder-tools/aiken.png"), + website: "https://aiken-lang.org", + getstarted: "/docs/get-started/aiken", + tags: ["favorite", "cli", "plutus", "aiken"], + }, + { + title: "Acca", + description: "Aiken's utility library (extending standard library). It takes it's inspiration from libraries like Guava (Java) or Lodash (JavaScript). You can find in this library many missing functions, new data types (e.g. Either) also collections (e.g. HashTree, HashList, Stack, Binomial Heap).", + preview: require("./builder-tools/acca.png"), + website: "https://github.com/Cardano-Fans/acca", + getstarted: null, + tags: ["plutus", "aiken"], + }, + { + title: "Pix", + description: "An NFT collection generator that is CIP-25 compliant", + preview: require("./builder-tools/pix.png"), + website: "https://github.com/txpipe/pix", + getstarted: null, + tags: ["cli", "nft"], + }, + { + title: "Cardano Signer", + description: "Tool to sign data with a Cardano-Secret-Key and verify data with a Cardano-Public-Key", + preview: require("./builder-tools/cardano-signer.png"), + website: "https://github.com/gitmachtl/cardano-signer", + getstarted: null, + tags: ["operatortool", "cli", "json"], + }, + { + title: "Mesh SDK", + description: "An Open-Source library by Martify Labs with the purpose of making building dApps on Cardano easier than ever. The Mesh library is engineered to simplify the development and implementation of blockchain technology, so you can focus on your project.", + preview: require("./builder-tools/mesh.png"), + website: "https://meshjs.dev/", + getstarted: "/docs/get-started/mesh/overview", + tags: ["javascript", "typescript", "serialization", "sdk", "plutus","favorite"] + }, + { + title: "Cexplorer", + description: "Rich featured blockchain explorer with support of all testnet instances and an API.", + preview: require("./builder-tools/cexplorer.png"), + website: "https://cexplorer.io", + getstarted: null, + tags: ["operatortool"], + }, + { + title: "Koios Python", + description: "Koios Python wrapper which allow interacting with all information and parameters stored on the Cardano blockchain.", + preview: require("./builder-tools/koios-python.png"), + website: "https://github.com/cardano-community/koios-python", + getstarted: null, + tags: ["koios", "python", "sdk"], + }, + { + title: "Cardano Leader Slot", + description: "Lightweight and Portable Scheduled Blocks Checker for Next, Current and Previous Epochs.", + preview: require("./builder-tools/leader-slot.png"), + website: "https://github.com/QuixoteSystems/cardano-leader-slot", + getstarted: null, + tags: ["python", "operatortool", "cli"], + }, + { + title: "Cardano connect with wallet", + description: "Useful hooks and React components to simplify the Cardano dApp integration e.g. to connect browser wallets, fetch addresses and provide signing.", + preview: require("./builder-tools/cardano-connect-with-wallet.png"), + website: "https://github.com/cardano-foundation/cardano-connect-with-wallet", + getstarted: null, + tags: ["typescript", "wallet"], + }, + { + title: "Frankenwallet", + description: "An encrypted, air-gapped Linux bootable USB drive for Cardano transaction signing, sandboxed access to files on your main computer, and storage & backup of secure assets & documents.", + preview: require("./builder-tools/frankenwallet.png"), + website: "https://cosd.com/frankenwallet", + getstarted: "/docs/operate-a-stake-pool/frankenwallet", + tags: ["operatortool"], + }, + { + title: "cnft", + description: "A library for validating metadata for the 721 metadatum property. Complies with community standards", + preview: require("./builder-tools/cnft9000.png"), + website: "https://github.com/ada9000/cnft#readme", + getstarted: null, + tags: ["javascript", "typescript", "nft"] + }, + { + title: "Bakrypt.io", + description: "Bakrypt offers backend tools and Cloud storage services for brands, companies, and creators to help them build their NFTs.", + preview: require("./builder-tools/bakrypt-io.png"), + website: "https://bakrypt.io", + getstarted: "https://bakrypt.readme.io", + tags: ["nft", "http", "hosted"], + }, + { + title: "CARP (Cardano Postgres Indexer)", + description: "A modular indexer for Cardano with an SQL Postgres backend.", + preview: require("./builder-tools/carp.png"), + website: "https://github.com/dcSpark/carp", + getstarted: "https://dcspark.github.io/carp/docs/intro", + tags: ["chainindex", "sql", "typescript"], + }, + { + title: "Pooldata.live", + description: + "Pooldata.live API provides a public Grafana datasource for pool operators with several operational metrics related to a stake pool.", + preview: require("./builder-tools/pooldata-live.png"), + website: "https://api.pooldata.live", + getstarted: null, + tags: ["operatortool", "http"], + }, + { + title: "Plutip", + description: "Cardano tool that aims to help dApp developers with integration testing and contracts debugging using disposable private network", + preview: require("./builder-tools/plutip.png"), + website: "https://github.com/mlabs-haskell/plutip", + getstarted: null, + tags: ["haskell", "testing"], + }, + { + title: "Demeter.run", + description: "A cloud environment with all the tools for building your dApp.", + preview: require("./builder-tools/demeter.png"), + website: "https://demeter.run/", + getstarted: null, + tags: ["favorite", "IDE", "hosted"], + }, + { + title: "Kogmios", + description: "A Kotlin API library for interacting with Ogmios.", + preview: require("./builder-tools/kogmios.png"), + website: "https://github.com/projectNEWM/kogmios", + getstarted: null, + tags: ["ogmios", "sdk", "kotlin", "lowlevel"], + }, + { + title: "Cardano Verify Datasignature", + description: "A lightweight typescript library to verify a cip30 datasignature.", + preview: require("./builder-tools/cardano-verify-datasignature.png"), + website: "https://github.com/cardano-foundation/cardano-verify-datasignature", + getstarted: null, + tags: ["typescript"], + }, + { + title: "Koios Api Python package", + description: "The Koios Api python package allows interrogating the Cardano blockchain using https://api.koios.rest/. It has pagination and retry in case of errors.", + preview: require("./builder-tools/koios-api-python.png"), + website: "https://github.com/cardano-apexpool/koios-api-python", + getstarted: null, + tags: ["koios", "python", "sdk"], + }, + { + title: "Cardano Token Registry Python API", + description: "A simple Python API for the Cardano Token Registry.", + preview: require("./builder-tools/token-registry-api.png"), + website: "https://github.com/cardano-apexpool/token-registry-api", + getstarted: null, + tags: ["python"], + }, + { + title: "Periodic DNS resolver", + description: "System service to configure a DDNS address firewall rule on a BP and send a message via Telegram Bot if your relay IP address has changed. Keeps Cardano nodes connected and secure on residential ISPs with rolling public IPs.", + preview: require("./builder-tools/pdr_bot.png"), + website: "https://github.com/Fuma419/periodic-dns-resolver", + getstarted: null, + tags: ["operatortool", "cli"], + }, + { + title: "opshin", + description: + "A simple pythonic programming language for Smart Contracts on Cardano.", + preview: require("./builder-tools/opshin.png"), + website: "https://github.com/OpShin/opshin", + getstarted: null, + tags: ["python", "cli", "plutus"], + }, + { + title: "Koios Java Client", + description: "A Java API library for interacting with Koios Server instances.", + preview: require("./builder-tools/koios-java-client.png"), + website: "https://github.com/cardano-community/koios-java-client", + getstarted: null, + tags: ["koios", "java", "sdk"], + }, + { + title: "Ogmios Java Client", + description: "A Java API library for interacting with Ogmios.", + preview: require("./builder-tools/ogmios-java-client.png"), + website: "https://github.com/adabox-aio/ogmios-java-client", + getstarted: null, + tags: ["ogmios", "websocket", "java", "sdk"], + }, + { + title: "@dotare/cardano-delegation", + description: "A delegation button that uses cip30 to improve the quality of life for developers and delegators.", + preview: require("./builder-tools/dotare-cardano-delegation.png"), + website: "https://www.npmjs.com/package/@dotare/cardano-delegation", + getstarted: null, + tags: ["http", "typescript", "javascript", "wallet", "serialization", "operatortool"], + }, + { + title: "DCOne Crypto Webhook API", + description:"API for developers to receive information on changing stake balance.", + preview: require("./builder-tools/dconecrypto-webhook.png"), + website: "https://github.com/DCOneCrypto/StakeAddress-Tracking-Webhook-API", + getstarted: null, + tags: ["http"], + }, + { + title: "blockfrost-crystal", + description: "A Crystal SDK for the Blockfrost.io API.", + preview: require("./builder-tools/blockfrost-crystal.png"), + website: "https://github.com/blockfrost/blockfrost-crystal", + getstarted: null, + tags: ["crystal", "sdk", "json"], + }, + { + title: "cardano-kit-crystal", + description: "At toolkit for Crystal to ease development for the Cardano blockchain.", + preview: require("./builder-tools/cardano-kit-crystal.png"), + website: "https://github.com/wout/cardano-kit", + getstarted: null, + tags: ["crystal", "serialization"] }, ]; export const TagList = Object.keys(Tags); + function sortShowcases() { let result = Showcases; // Sort by site name @@ -575,6 +1039,33 @@ function sortShowcases() { return result; } +export const LanguagesOrTechnologiesTags = [ + "cli", + "crystal", + "golang", + "haskell", + "http", + "java", + "javascript", + "json", + "koios", + "kotlin", + "net", + "ogmios", + "purescript", + "python", + "redis", + "rust", + "sql", + "typescript", + "websocket", +]; + +export const DomainsTags = TagList.filter((tag) => { + const others = LanguagesOrTechnologiesTags.concat("favorite"); + return !others.includes(tag); +}); + export const SortedShowcases = sortShowcases(); // Fail-fast on common errors @@ -659,26 +1150,14 @@ function ensureShowcaseValid(showcase) { throw new Error( "The getstarted attribute is required.\nIf your builder tool has no get started page, please make it explicit with 'getstarted: null'" ); - } else { - const hasGetStartedTag = showcase.tags.includes("getstarted"); - if (showcase.getstarted === null && hasGetStartedTag) { - throw new Error( - "You can't add the getstarted tag to a site that does not have a link to a get started page." - ); - } else if (showcase.getstarted && !hasGetStartedTag) { - throw new Error( - "For builder tools with started sites, please add the 'getstarted' tag." - ); - } } } function checkOperatorTool() { - - const hasGetStartedTag = showcase.tags.includes("getstarted"); + const hasGetStarted = showcase.getstarted != null; const isOperatorTool = showcase.tags.includes("operatortool"); - if ((hasGetStartedTag && isOperatorTool) && !(typeof showcase.getstarted === "string" && + if ((hasGetStarted && isOperatorTool) && !(typeof showcase.getstarted === "string" && (showcase.getstarted.startsWith("/docs/operate-a-stake-pool/"))) ) { throw new Error( diff --git a/src/data/builder-tools/acca.png b/src/data/builder-tools/acca.png new file mode 100644 index 0000000000..90df00a0bb Binary files /dev/null and b/src/data/builder-tools/acca.png differ diff --git a/src/data/builder-tools/aiken.png b/src/data/builder-tools/aiken.png new file mode 100644 index 0000000000..201460c99e Binary files /dev/null and b/src/data/builder-tools/aiken.png differ diff --git a/src/data/builder-tools/bakrypt-io.png b/src/data/builder-tools/bakrypt-io.png new file mode 100644 index 0000000000..0eb1bf58e1 Binary files /dev/null and b/src/data/builder-tools/bakrypt-io.png differ diff --git a/src/data/builder-tools/bech32.png b/src/data/builder-tools/bech32.png new file mode 100644 index 0000000000..44ab7b5054 Binary files /dev/null and b/src/data/builder-tools/bech32.png differ diff --git a/src/data/builder-tools/blockfrost-crystal.png b/src/data/builder-tools/blockfrost-crystal.png new file mode 100644 index 0000000000..133a62b31c Binary files /dev/null and b/src/data/builder-tools/blockfrost-crystal.png differ diff --git a/src/data/builder-tools/cardano-addresses.png b/src/data/builder-tools/cardano-addresses.png new file mode 100644 index 0000000000..bb86895a6d Binary files /dev/null and b/src/data/builder-tools/cardano-addresses.png differ diff --git a/src/data/builder-tools/cardano-cli.png b/src/data/builder-tools/cardano-cli.png new file mode 100644 index 0000000000..68329e3dac Binary files /dev/null and b/src/data/builder-tools/cardano-cli.png differ diff --git a/src/data/builder-tools/cardano-connect-with-wallet.png b/src/data/builder-tools/cardano-connect-with-wallet.png new file mode 100644 index 0000000000..e04d46fa9a Binary files /dev/null and b/src/data/builder-tools/cardano-connect-with-wallet.png differ diff --git a/src/data/builder-tools/cardano-db-sync.png b/src/data/builder-tools/cardano-db-sync.png new file mode 100644 index 0000000000..710f3fcef5 Binary files /dev/null and b/src/data/builder-tools/cardano-db-sync.png differ diff --git a/src/data/builder-tools/cardano-graphql.png b/src/data/builder-tools/cardano-graphql.png new file mode 100644 index 0000000000..35c1872fee Binary files /dev/null and b/src/data/builder-tools/cardano-graphql.png differ diff --git a/src/data/builder-tools/cardano-kit-crystal.png b/src/data/builder-tools/cardano-kit-crystal.png new file mode 100644 index 0000000000..4b78c63b36 Binary files /dev/null and b/src/data/builder-tools/cardano-kit-crystal.png differ diff --git a/src/data/builder-tools/cardano-rosetta.png b/src/data/builder-tools/cardano-rosetta.png new file mode 100644 index 0000000000..98f32a0aa7 Binary files /dev/null and b/src/data/builder-tools/cardano-rosetta.png differ diff --git a/src/data/builder-tools/cardano-signer.png b/src/data/builder-tools/cardano-signer.png new file mode 100644 index 0000000000..0739e87038 Binary files /dev/null and b/src/data/builder-tools/cardano-signer.png differ diff --git a/src/data/builder-tools/cardano-transaction-lib.png b/src/data/builder-tools/cardano-transaction-lib.png new file mode 100644 index 0000000000..40b5f98a2d Binary files /dev/null and b/src/data/builder-tools/cardano-transaction-lib.png differ diff --git a/src/data/builder-tools/cardano-verify-datasignature.png b/src/data/builder-tools/cardano-verify-datasignature.png new file mode 100644 index 0000000000..eb4c3a32c6 Binary files /dev/null and b/src/data/builder-tools/cardano-verify-datasignature.png differ diff --git a/src/data/builder-tools/cardano-wallet.png b/src/data/builder-tools/cardano-wallet.png new file mode 100644 index 0000000000..06d7913b9f Binary files /dev/null and b/src/data/builder-tools/cardano-wallet.png differ diff --git a/src/data/builder-tools/carp.png b/src/data/builder-tools/carp.png new file mode 100644 index 0000000000..98d0600578 Binary files /dev/null and b/src/data/builder-tools/carp.png differ diff --git a/src/data/builder-tools/cexplorer.png b/src/data/builder-tools/cexplorer.png new file mode 100644 index 0000000000..749507cdaf Binary files /dev/null and b/src/data/builder-tools/cexplorer.png differ diff --git a/src/data/builder-tools/cnft9000.png b/src/data/builder-tools/cnft9000.png new file mode 100755 index 0000000000..78023ac661 Binary files /dev/null and b/src/data/builder-tools/cnft9000.png differ diff --git a/src/data/builder-tools/dconecrypto-webhook.png b/src/data/builder-tools/dconecrypto-webhook.png new file mode 100644 index 0000000000..c223636449 Binary files /dev/null and b/src/data/builder-tools/dconecrypto-webhook.png differ diff --git a/src/data/builder-tools/demeter.png b/src/data/builder-tools/demeter.png new file mode 100644 index 0000000000..4be12ddf00 Binary files /dev/null and b/src/data/builder-tools/demeter.png differ diff --git a/src/data/builder-tools/dotare-cardano-delegation.png b/src/data/builder-tools/dotare-cardano-delegation.png new file mode 100644 index 0000000000..73f034bd0b Binary files /dev/null and b/src/data/builder-tools/dotare-cardano-delegation.png differ diff --git a/src/data/builder-tools/frankenwallet.png b/src/data/builder-tools/frankenwallet.png new file mode 100644 index 0000000000..f52afaa35f Binary files /dev/null and b/src/data/builder-tools/frankenwallet.png differ diff --git a/src/data/builder-tools/helioslang.png b/src/data/builder-tools/helioslang.png new file mode 100644 index 0000000000..29b9183b4d Binary files /dev/null and b/src/data/builder-tools/helioslang.png differ diff --git a/src/data/builder-tools/kogmios.png b/src/data/builder-tools/kogmios.png new file mode 100644 index 0000000000..9462cbe116 Binary files /dev/null and b/src/data/builder-tools/kogmios.png differ diff --git a/src/data/builder-tools/koios-api-python.png b/src/data/builder-tools/koios-api-python.png new file mode 100644 index 0000000000..317fe6bb27 Binary files /dev/null and b/src/data/builder-tools/koios-api-python.png differ diff --git a/src/data/builder-tools/koios-java-client.png b/src/data/builder-tools/koios-java-client.png new file mode 100644 index 0000000000..b3721d89e1 Binary files /dev/null and b/src/data/builder-tools/koios-java-client.png differ diff --git a/src/data/builder-tools/koios-python.png b/src/data/builder-tools/koios-python.png new file mode 100644 index 0000000000..af5311dd98 Binary files /dev/null and b/src/data/builder-tools/koios-python.png differ diff --git a/src/data/builder-tools/leader-slot.png b/src/data/builder-tools/leader-slot.png new file mode 100644 index 0000000000..fe4868085d Binary files /dev/null and b/src/data/builder-tools/leader-slot.png differ diff --git a/src/data/builder-tools/mesh.png b/src/data/builder-tools/mesh.png new file mode 100644 index 0000000000..b3874ceae3 Binary files /dev/null and b/src/data/builder-tools/mesh.png differ diff --git a/src/data/builder-tools/ogmios-java-client.png b/src/data/builder-tools/ogmios-java-client.png new file mode 100644 index 0000000000..0539035b1b Binary files /dev/null and b/src/data/builder-tools/ogmios-java-client.png differ diff --git a/src/data/builder-tools/opshin.png b/src/data/builder-tools/opshin.png new file mode 100644 index 0000000000..50693050c5 Binary files /dev/null and b/src/data/builder-tools/opshin.png differ diff --git a/src/data/builder-tools/pdr_bot.png b/src/data/builder-tools/pdr_bot.png new file mode 100644 index 0000000000..b66c56898e Binary files /dev/null and b/src/data/builder-tools/pdr_bot.png differ diff --git a/src/data/builder-tools/pix.png b/src/data/builder-tools/pix.png new file mode 100644 index 0000000000..1e41b8a7aa Binary files /dev/null and b/src/data/builder-tools/pix.png differ diff --git a/src/data/builder-tools/plu-ts.png b/src/data/builder-tools/plu-ts.png new file mode 100644 index 0000000000..d0951aa68c Binary files /dev/null and b/src/data/builder-tools/plu-ts.png differ diff --git a/src/data/builder-tools/plu-ts.svg b/src/data/builder-tools/plu-ts.svg new file mode 100644 index 0000000000..e3a192d694 --- /dev/null +++ b/src/data/builder-tools/plu-ts.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/builder-tools/plutip.png b/src/data/builder-tools/plutip.png new file mode 100755 index 0000000000..20b8d38b0f Binary files /dev/null and b/src/data/builder-tools/plutip.png differ diff --git a/src/data/builder-tools/pooldata-live.png b/src/data/builder-tools/pooldata-live.png new file mode 100644 index 0000000000..568789bf31 Binary files /dev/null and b/src/data/builder-tools/pooldata-live.png differ diff --git a/src/data/builder-tools/spo-scripts-gitmachtl.png b/src/data/builder-tools/spo-scripts-gitmachtl.png new file mode 100644 index 0000000000..7a0ecdbd76 Binary files /dev/null and b/src/data/builder-tools/spo-scripts-gitmachtl.png differ diff --git a/src/data/builder-tools/token-registry-api.png b/src/data/builder-tools/token-registry-api.png new file mode 100644 index 0000000000..aef039e0e5 Binary files /dev/null and b/src/data/builder-tools/token-registry-api.png differ diff --git a/src/data/showcase/aada-finance.png b/src/data/showcase/aada-finance.png new file mode 100644 index 0000000000..15ccf7e94a Binary files /dev/null and b/src/data/showcase/aada-finance.png differ diff --git a/src/data/showcase/ada-dolls.png b/src/data/showcase/ada-dolls.png deleted file mode 100644 index c557fed408..0000000000 Binary files a/src/data/showcase/ada-dolls.png and /dev/null differ diff --git a/src/data/showcase/ada-monsterz.png b/src/data/showcase/ada-monsterz.png deleted file mode 100644 index 9ea2daaa5e..0000000000 Binary files a/src/data/showcase/ada-monsterz.png and /dev/null differ diff --git a/src/data/showcase/adaex.png b/src/data/showcase/adaex.png deleted file mode 100644 index 23e3a20271..0000000000 Binary files a/src/data/showcase/adaex.png and /dev/null differ diff --git a/src/data/showcase/adahandle.png b/src/data/showcase/adahandle.png new file mode 100644 index 0000000000..8e63d14050 Binary files /dev/null and b/src/data/showcase/adahandle.png differ diff --git a/src/data/showcase/adapools.png b/src/data/showcase/adapools.png deleted file mode 100644 index 9c83a8f0a6..0000000000 Binary files a/src/data/showcase/adapools.png and /dev/null differ diff --git a/src/data/showcase/aeoniumsky.png b/src/data/showcase/aeoniumsky.png new file mode 100644 index 0000000000..d5e3b6374c Binary files /dev/null and b/src/data/showcase/aeoniumsky.png differ diff --git a/src/data/showcase/balance-analytics.png b/src/data/showcase/balance-analytics.png new file mode 100644 index 0000000000..9dc3e4a037 Binary files /dev/null and b/src/data/showcase/balance-analytics.png differ diff --git a/src/data/showcase/book-token.png b/src/data/showcase/book-token.png new file mode 100644 index 0000000000..09b8fab2b0 Binary files /dev/null and b/src/data/showcase/book-token.png differ diff --git a/src/data/showcase/canuckz.png b/src/data/showcase/canuckz.png deleted file mode 100644 index 9d8452197a..0000000000 Binary files a/src/data/showcase/canuckz.png and /dev/null differ diff --git a/src/data/showcase/cardacity.png b/src/data/showcase/cardacity.png deleted file mode 100644 index c78901edc3..0000000000 Binary files a/src/data/showcase/cardacity.png and /dev/null differ diff --git a/src/data/showcase/cardano-gods.png b/src/data/showcase/cardano-gods.png deleted file mode 100644 index 516593c460..0000000000 Binary files a/src/data/showcase/cardano-gods.png and /dev/null differ diff --git a/src/data/showcase/cardano-studio.png b/src/data/showcase/cardano-studio.png new file mode 100644 index 0000000000..eb04663b3a Binary files /dev/null and b/src/data/showcase/cardano-studio.png differ diff --git a/src/data/showcase/cardanobits.png b/src/data/showcase/cardanobits.png deleted file mode 100644 index 5adab24267..0000000000 Binary files a/src/data/showcase/cardanobits.png and /dev/null differ diff --git a/src/data/showcase/cardanocubes.png b/src/data/showcase/cardanocubes.png deleted file mode 100644 index a2d5f4b24f..0000000000 Binary files a/src/data/showcase/cardanocubes.png and /dev/null differ diff --git a/src/data/showcase/cardastation.png b/src/data/showcase/cardastation.png new file mode 100644 index 0000000000..25589bf1ce Binary files /dev/null and b/src/data/showcase/cardastation.png differ diff --git a/src/data/showcase/cardinos.png b/src/data/showcase/cardinos.png deleted file mode 100644 index 850a1438c8..0000000000 Binary files a/src/data/showcase/cardinos.png and /dev/null differ diff --git a/src/data/showcase/chainport.png b/src/data/showcase/chainport.png new file mode 100644 index 0000000000..680f8b5e1c Binary files /dev/null and b/src/data/showcase/chainport.png differ diff --git a/src/data/showcase/cicadatactics.png b/src/data/showcase/cicadatactics.png deleted file mode 100644 index 39040e5f7c..0000000000 Binary files a/src/data/showcase/cicadatactics.png and /dev/null differ diff --git a/src/data/showcase/cnftlab-party.png b/src/data/showcase/cnftlab-party.png new file mode 100644 index 0000000000..04527b1030 Binary files /dev/null and b/src/data/showcase/cnftlab-party.png differ diff --git a/src/data/showcase/crypto-doggies.png b/src/data/showcase/crypto-doggies.png deleted file mode 100644 index 84db5245e6..0000000000 Binary files a/src/data/showcase/crypto-doggies.png and /dev/null differ diff --git a/src/data/showcase/cryptoheroez.png b/src/data/showcase/cryptoheroez.png deleted file mode 100644 index f60228e691..0000000000 Binary files a/src/data/showcase/cryptoheroez.png and /dev/null differ diff --git a/src/data/showcase/cryptoknitties.png b/src/data/showcase/cryptoknitties.png deleted file mode 100644 index fd15826954..0000000000 Binary files a/src/data/showcase/cryptoknitties.png and /dev/null differ diff --git a/src/data/showcase/cryptomage.png b/src/data/showcase/cryptomage.png deleted file mode 100644 index d1400aca79..0000000000 Binary files a/src/data/showcase/cryptomage.png and /dev/null differ diff --git a/src/data/showcase/finitum-bridge.png b/src/data/showcase/finitum-bridge.png new file mode 100644 index 0000000000..d814c26d2f Binary files /dev/null and b/src/data/showcase/finitum-bridge.png differ diff --git a/src/data/showcase/flipr.png b/src/data/showcase/flipr.png new file mode 100644 index 0000000000..9af5a1836d Binary files /dev/null and b/src/data/showcase/flipr.png differ diff --git a/src/data/showcase/gift-card-creator.png b/src/data/showcase/gift-card-creator.png new file mode 100644 index 0000000000..5d103b32c8 Binary files /dev/null and b/src/data/showcase/gift-card-creator.png differ diff --git a/src/data/showcase/hosky.png b/src/data/showcase/hosky.png new file mode 100644 index 0000000000..6dc82d72a4 Binary files /dev/null and b/src/data/showcase/hosky.png differ diff --git a/src/data/showcase/hypeskulls.png b/src/data/showcase/hypeskulls.png deleted file mode 100644 index 9e3424ed9a..0000000000 Binary files a/src/data/showcase/hypeskulls.png and /dev/null differ diff --git a/src/data/showcase/jetchicken.png b/src/data/showcase/jetchicken.png deleted file mode 100644 index 57ac92a674..0000000000 Binary files a/src/data/showcase/jetchicken.png and /dev/null differ diff --git a/src/data/showcase/kryptoids.png b/src/data/showcase/kryptoids.png deleted file mode 100644 index 9779574a62..0000000000 Binary files a/src/data/showcase/kryptoids.png and /dev/null differ diff --git a/src/data/showcase/lace.png b/src/data/showcase/lace.png new file mode 100644 index 0000000000..c2b027c40d Binary files /dev/null and b/src/data/showcase/lace.png differ diff --git a/src/data/showcase/lending-pond.png b/src/data/showcase/lending-pond.png new file mode 100644 index 0000000000..2953d7baa6 Binary files /dev/null and b/src/data/showcase/lending-pond.png differ diff --git a/src/data/showcase/milkomeda.png b/src/data/showcase/milkomeda.png new file mode 100644 index 0000000000..47ad5ff5d2 Binary files /dev/null and b/src/data/showcase/milkomeda.png differ diff --git a/src/data/showcase/monadpool-relay-map.png b/src/data/showcase/monadpool-relay-map.png new file mode 100644 index 0000000000..269e30fc70 Binary files /dev/null and b/src/data/showcase/monadpool-relay-map.png differ diff --git a/src/data/showcase/nft-creator.png b/src/data/showcase/nft-creator.png new file mode 100644 index 0000000000..75fc4294a8 Binary files /dev/null and b/src/data/showcase/nft-creator.png differ diff --git a/src/data/showcase/nftada.png b/src/data/showcase/nftada.png new file mode 100644 index 0000000000..035c154f64 Binary files /dev/null and b/src/data/showcase/nftada.png differ diff --git a/src/data/showcase/nftea.png b/src/data/showcase/nftea.png deleted file mode 100644 index fc38b10a1d..0000000000 Binary files a/src/data/showcase/nftea.png and /dev/null differ diff --git a/src/data/showcase/nmkr.png b/src/data/showcase/nmkr.png new file mode 100644 index 0000000000..a2a6781b90 Binary files /dev/null and b/src/data/showcase/nmkr.png differ diff --git a/src/data/showcase/nufiwallet.png b/src/data/showcase/nufiwallet.png new file mode 100644 index 0000000000..bd5495abd1 Binary files /dev/null and b/src/data/showcase/nufiwallet.png differ diff --git a/src/data/showcase/paradiso.png b/src/data/showcase/paradiso.png deleted file mode 100644 index f9afeb54ac..0000000000 Binary files a/src/data/showcase/paradiso.png and /dev/null differ diff --git a/src/data/showcase/peerreview.money.png b/src/data/showcase/peerreview.money.png new file mode 100644 index 0000000000..fbf7a77b53 Binary files /dev/null and b/src/data/showcase/peerreview.money.png differ diff --git a/src/data/showcase/petregistry.png b/src/data/showcase/petregistry.png new file mode 100644 index 0000000000..157e6fa178 Binary files /dev/null and b/src/data/showcase/petregistry.png differ diff --git a/src/data/showcase/politikoz.png b/src/data/showcase/politikoz.png deleted file mode 100644 index 57c718a626..0000000000 Binary files a/src/data/showcase/politikoz.png and /dev/null differ diff --git a/src/data/showcase/profiler.png b/src/data/showcase/profiler.png new file mode 100644 index 0000000000..a102d5fea2 Binary files /dev/null and b/src/data/showcase/profiler.png differ diff --git a/src/data/showcase/raw-cardano.png b/src/data/showcase/raw-cardano.png new file mode 100644 index 0000000000..4e87c0189f Binary files /dev/null and b/src/data/showcase/raw-cardano.png differ diff --git a/src/data/showcase/rewardscalendar.png b/src/data/showcase/rewardscalendar.png deleted file mode 100644 index 1d9b4b1bd4..0000000000 Binary files a/src/data/showcase/rewardscalendar.png and /dev/null differ diff --git a/src/data/showcase/shareslake.png b/src/data/showcase/shareslake.png new file mode 100644 index 0000000000..e776b0905d Binary files /dev/null and b/src/data/showcase/shareslake.png differ diff --git a/src/data/showcase/stampd.png b/src/data/showcase/stampd.png new file mode 100644 index 0000000000..46d599ba24 Binary files /dev/null and b/src/data/showcase/stampd.png differ diff --git a/src/data/showcase/taptools.png b/src/data/showcase/taptools.png new file mode 100644 index 0000000000..a5f6d4e900 Binary files /dev/null and b/src/data/showcase/taptools.png differ diff --git a/src/data/showcase/the-galgos.png b/src/data/showcase/the-galgos.png deleted file mode 100644 index 7e0d7a70f5..0000000000 Binary files a/src/data/showcase/the-galgos.png and /dev/null differ diff --git a/src/data/showcase/the-hoskinsons.png b/src/data/showcase/the-hoskinsons.png deleted file mode 100644 index 19c7f27416..0000000000 Binary files a/src/data/showcase/the-hoskinsons.png and /dev/null differ diff --git a/src/data/showcase/universe25.png b/src/data/showcase/universe25.png new file mode 100644 index 0000000000..2b8ccfca03 Binary files /dev/null and b/src/data/showcase/universe25.png differ diff --git a/src/data/showcase/unsigs.png b/src/data/showcase/unsigs.png new file mode 100644 index 0000000000..352dd30bc7 Binary files /dev/null and b/src/data/showcase/unsigs.png differ diff --git a/src/data/showcase/voteaire.png b/src/data/showcase/voteaire.png new file mode 100644 index 0000000000..3c256b8861 Binary files /dev/null and b/src/data/showcase/voteaire.png differ diff --git a/src/data/showcase/vyfinance.png b/src/data/showcase/vyfinance.png new file mode 100644 index 0000000000..de74dc2186 Binary files /dev/null and b/src/data/showcase/vyfinance.png differ diff --git a/src/data/showcases.js b/src/data/showcases.js index 98e1357576..6c967eca59 100644 --- a/src/data/showcases.js +++ b/src/data/showcases.js @@ -6,20 +6,7 @@ * every project is promoted. * * REQUIREMENTS FOR ADDING YOUR PROJECT TO THE SHOWCASE SECTION: - * - It must be built on Cardano and have a real use case. For example, a forum where - * people can talk about Cardano is great, but nothing for this showcase section. - * - It has to run on Cardano mainnet. - * - It has to have a running product. (no presale, no protected pages, no coming soon messages) - * - It has to have enough community reputation. - * - It has to provide a unique value from existing showcase items. (we can't list - * thousands of NFT or native tokens with the current UI) - * - It has to have a stable domain name. (a random Netlify/Vercel domain is not allowed, no - * URL shortener, no app store links, or similar) - * - The GitHub account that adds the project must not be new. - * - The GitHub account must have a history/or already be known in the Cardano community. - * - Describe what makes your project special, avoid phrases like "the first this and that". Granular - * details like which project was first is tribal attribute known to cause rift and conflicts. - * - IF YOU ADD A PROJECT WHICH MAIN COMPONENT IS NFT, PLEASE SELECT "NFTPROJECT" AS TAG. (NOT "NFTSUPPORT") + * https://developers.cardano.org/docs/portal-contribute#add-a-project-to-showcase * * INSTRUCTIONS: * - Add your project in the JSON array below. @@ -37,7 +24,7 @@ export const Tags = { label: "Favorite", description: "Our favorite Cardano projects that you must absolutely check-out.", - color: '#e9669e', + color: '#e9669e', }, // Analytics @@ -68,7 +55,7 @@ export const Tags = { ecosystem: { label: "Ecosystem", description: - "The Cardano ecosystem projects", + "The Cardano ecosystem projects.", icon: null, color: '#800080' }, @@ -90,7 +77,7 @@ export const Tags = { icon: null, color: '#293133', }, - + // Game game: { label: "Game", @@ -110,7 +97,7 @@ export const Tags = { // Identity identity: { label: "Identity", - description: "Decentralized identifiers (DIDs)", + description: "Decentralized identifiers (DIDs).", icon: null, color: '#000' }, @@ -122,11 +109,11 @@ export const Tags = { icon: null, color: '#f44f25', }, - + // Meta data projects metadata: { label: "Metadata", - description: "Transaction metadata", + description: "Transaction metadata.", icon: null, color: '#14cfc3', }, @@ -134,7 +121,7 @@ export const Tags = { // Minting minting: { label: "Minting", - description: "Minting Tool", + description: "Minting Tool.", icon: null, color: '#23a5da', }, @@ -169,7 +156,7 @@ export const Tags = { description: "Pool tools provide delegates with the necessary tools to find a good pool.", icon: null, - color: '#4267b2', + color: '#4267b2', }, // Native token projects @@ -189,28 +176,44 @@ export const Tags = { color: '#7BC8A6' }, - // Ecosystem - ecosystem: { + // Ecosystem + ecosystem: { label: "Ecosystem", description: - "The Cardano ecosystem projects", + "The Cardano ecosystem projects.", icon: null, color: '#800080' }, - // Catalyst - catalyst: { + // Catalyst + catalyst: { label: "Catalyst", - description: "Projects that aid to Cardano's interim governance programme (Catalyst)", + description: "Projects that aid to Cardano's interim governance programme (Catalyst).", icon: null, color: '#308446' }, + + // Lending + lending: { + label: "Lending", + description: "Projects that provide lending and borrowing of ada.", + icon: null, + color: '#7E0000' + }, + + // Bridge + bridge: { + label: "Bridge", + description: "Projects that provide cross-chain bridge support.", + icon: null, + color: '#EDFF21' + } }; // Add your project to (THE END OF) this list. // Please don't add the "favorite"-tag yourself. // Provide pure NFT projects only get the tag NFT, not "tokens" -const Showcases = [ +export const Showcases = [ { title: "Cardano Kidz", description: @@ -230,42 +233,23 @@ const Showcases = [ tags: ["favorite", "metadata"], }, { - title: "Crypto Heroez", - description: - "Cardano NFT pixelart collectibles. Tribute to heroes of the cryptospace. Including interactive NFTs and a game in progress where you use NFTs from your wallet.", - preview: require("./showcase/cryptoheroez.png"), - website: "https://cryptoheroez.io", - source: null, - tags: ["nftproject", "game"], - }, - - { - title: "NFT Maker", + title: "NMKR", description: - "Create your own NFT by uploading an image and paying some ada.", - preview: require("./showcase/nft-maker.png"), - website: "https://www.nft-maker.io", + "NFT Minting, FIAT & Crypto Sales, Token Launches, Secondary Markets - all available at the press of a button.", + preview: require("./showcase/nmkr.png"), + website: "https://www.nmkr.io/", source: null, tags: ["favorite", "minting", "nftsupport"], }, { title: "SpaceBudz", description: - "A collection of 10,000 unique little astronauts represented as NFTs on the Cardano blockchain. SpaceBudz offers a market place with contract based trades.", + "A collection of 10,000 unique little astronauts represented as NFTs on the Cardano blockchain. SpaceBudz offers a market place with contract based trades. CNFT of the year 2021.", preview: require("./showcase/spacebudz.png"), website: "https://spacebudz.io", source: "https://github.com/Berry-Pool/spacebudz", tags: ["favorite", "nftproject", "opensource"], }, - { - title: "ADAex", - description: - "A classic block explorer that also offers a Cardano rich list.", - preview: require("./showcase/adaex.png"), - website: "https://adaex.org", - source: null, - tags: ["explorer"], - }, { title: "AdaStat", description: @@ -311,15 +295,6 @@ const Showcases = [ source: null, tags: ["favorite", "pooltool"], }, - { - title: "Adapools", - description: - "Well established stake pool explorer in Cardano. Yoroi is using our data to list stake pools in the wallet.", - preview: require("./showcase/adapools.png"), - website: "https://adapools.org/", - source: null, - tags: ["pooltool", "analytics"], - }, { title: "PoolTool", description: @@ -374,14 +349,6 @@ const Showcases = [ source: "https://github.com/Emurgo/yoroi-frontend", tags: ["wallet", "opensource"], }, - { - title: "Crypto Mage", - description: "This game centered around incredible wizards who create magic, increase their skills, find totems, learn craft, complete quests, and much more.", - preview: require("./showcase/cryptomage.png"), - website: "https://cryptomage.net", - source: null, - tags: ["nftproject", "game"], - }, { title: "Cardano Warriors", description: "The retro RPG NFT Collection minted in Cardano Blockchain.", @@ -398,14 +365,6 @@ const Showcases = [ source: null, tags: ["token", "analytics"], }, - { - title: "Cardano Cubes & Blockemon", - description: "Play Blockemon and have your moves quickly verified by, and forever stored on Cardano.", - preview: require("./showcase/cardanocubes.png"), - website: "https://cardanocubes.com", - source: null, - tags: ["nftproject", "game"], - }, { title: "Cardano Assets", description: "Overview of native tokens on Cardano.", @@ -414,31 +373,6 @@ const Showcases = [ source: null, tags: ["favorite", "analytics"], }, - { - title: "NFTea", - description: "Sometimes all you need is a good cup of NFTea.", - preview: require("./showcase/nftea.png"), - website: "https://cardanonftea.com", - source: null, - tags: ["nftproject"], - }, - { - title: "Cardano Bits", - description: "A collection of 10,000 unique pieces, minted with a time-locked policy, before the smart contracts were launched. Each collectible was generated with a mix of art pieces and computer algorithms.", - preview: require("./showcase/cardanobits.png"), - website: "https://cardanobits.art", - source: null, - tags: ["nftproject"], - }, - { - title: "Crypto Knitties", - description: - "Adorable, cuddly and unique, CryptoKnitties are collectable knitted NFT companions for your Cardano wallet.", - preview: require("./showcase/cryptoknitties.png"), - website: "https://knitties.io", - source: null, - tags: ["nftproject"], - }, { title: "Cardano Updates", description: @@ -501,15 +435,6 @@ const Showcases = [ source: null, tags: ["favorite", "pooltool", "analytics"], }, - { - title: "Rewards Calendar", - description: - "Shows the epochs and rewards in a calendar.", - preview: require("./showcase/rewardscalendar.png"), - website: "https://dbooster.io/calendar", - source: null, - tags: ["favorite", "analytics"], - }, { title: "NOWPayments", description: @@ -547,58 +472,12 @@ const Showcases = [ tags: ["favorite", "wallet", "nftsupport"], }, { - title: "Jetchicken", - description: - "From the guys who brought you spacecoins, comes jetchickens. A collectible trading card game on the Cardano.", - preview: require("./showcase/jetchicken.png"), - website: "https://jetchicken.io", + title: "Milkomeda", + description: "Cross-blockchain Level 2 solutions including EVM support on Cardano and wrapped native assets.", + preview: require("./showcase/milkomeda.png"), + website: "https://milkomeda.com", source: null, - tags: ["nftproject"], - }, - { - title: "ADA Dolls", - description: - "There are 10,000 unique dolls. These will be randomly generated from a possible outcome of 1,000,000 doll combinations.", - preview: require("./showcase/ada-dolls.png"), - website: "https://adadolls.com", - source: null, - tags: ["nftproject"], - }, - { - title: "ADA Monsterz", - description: - "Collect. Trade. Share. Have Fun!", - preview: require("./showcase/ada-monsterz.png"), - website: "https://adamonsterz.com", - source: null, - tags: ["nftproject"], - }, - { - title: "Canuckz NFTs", - description: - "Limited Edition Collectibles on the Cardano Blockchain.", - preview: require("./showcase/canuckz.png"), - website: "https://canuckz-nft.io", - source: null, - tags: ["nftproject"], - }, - { - title: "Cardacity", - description: - "Your city is coming to Cardano.", - preview: require("./showcase/cardacity.png"), - website: "https://carda.city", - source: null, - tags: ["nftproject"], - }, - { - title: "Cardano Gods", - description: - "Behold the mighty Cardano Gods. A full on-chain NFT art project on Cardano network.", - preview: require("./showcase/cardano-gods.png"), - website: "https://cardanogods.com", - source: null, - tags: ["nftproject"], + tags: ["bridge"] }, { title: "Cardano Idols", @@ -609,51 +488,15 @@ const Showcases = [ source: null, tags: ["nftproject"], }, - { - title: "Cardinos", - description: - "Cardinos were born from a late night conversation about how simply awesome Dinosaurs and NFTs are.", - preview: require("./showcase/cardinos.png"), - website: "https://cardinos.io", - source: null, - tags: ["nftproject"], - }, { title: "Clay Mates", description: - "Of clay - duh! Collectibles brought to life and re-homed on the Cardano blockchain.", + "Collectibles brought to life and re-homed on the Cardano blockchain. Winner of the CNFT Awards 2022 in the category \"best generative art\".", preview: require("./showcase/clay-mates.png"), website: "https://www.claymates.org", source: null, tags: ["nftproject"], }, - { - title: "Crypto Doggies", - description: - "Collect, trade, have fun, save real dogs!", - preview: require("./showcase/crypto-doggies.png"), - website: "https://cryptodoggies.org", - source: null, - tags: ["nftproject"], - }, - { - title: "The Galgos", - description: - "The Galgos is a set of limited edition hand drawn NFT collectibles with functionality. Collect, trade, discover.", - preview: require("./showcase/the-galgos.png"), - website: "https://thegalgos.io", - source: null, - tags: ["nftproject"], - }, - { - title: "The Hoskinsons", - description: - "The Hoskinsons is an original NFT collection commemorating the founders, developers, and personalities of the Cardano platform.", - preview: require("./showcase/the-hoskinsons.png"), - website: "https://thehoskinsons.com", - source: null, - tags: ["nftproject"], - }, { title: "DEADPXLZ", description: @@ -663,15 +506,6 @@ const Showcases = [ source: null, tags: ["nftproject"], }, - { - title: "Kryptoids", - description: - "Legendary creatures on the Cardano blockchain!", - preview: require("./showcase/kryptoids.png"), - website: "https://kryptoids.monster", - source: null, - tags: ["nftproject"], - }, { title: "JES-Art", description: @@ -699,14 +533,6 @@ const Showcases = [ source: "https://github.com/Berry-Pool/nami-wallet", tags: ["favorite", "wallet", "opensource", "nftsupport"], }, - { - title: "Politikoz | NFTs on Cardano!", - description: "The Cardano On-Chain Lottery Game.", - preview: require("./showcase/politikoz.png"), - website: "https://www.politikoz.io", - source: null, - tags: ["nftproject", "game"], - }, { title: "Cardano Token and NFT Builder", description: @@ -719,20 +545,11 @@ const Showcases = [ { title: "Tokhun.io", description: - "Powerful yet easy to use NFT & FT Minting and Marketplace on Cardano.", + "Powerful yet easy to use NFT & FT Minting and Marketplace on Cardano.", preview: require("./showcase/tokhun.png"), website: "https://tokhun.io", source: null, - tags: ["favorite", "marketplace", "nftsupport"], - }, - { - title: "H.Y.P.E. Skulls", - description: - "A new level of collectible NFT is hitting the Cardano Network! 1,500 unique 3D-animated cards featuring the HYPE Skull. No two are alike. Always handcrafted. Never automated.", - preview: require("./showcase/hypeskulls.png"), - website: "https://seehype.com/", - source: null, - tags: ["nftproject"], + tags: ["favorite", "minting", "marketplace", "nftsupport"], }, { title: "cardano-tools.io", @@ -752,15 +569,6 @@ const Showcases = [ source: null, tags: ["token", "nftproject"], }, - { - title: "Cicada Tactics", - description: - "Cicada Tactics is a Multiplayer Tactical RPG. 1) Buy Cicada from smart contract Store. 2) Browser login with Cicada + Wallet. 3) Create multiplayer room to play together.", - preview: require("./showcase/cicadatactics.png"), - website: "https://cicadatactics.com", - source: null, - tags: ["game", "nftproject"], - }, { title: "Typhon Wallet", description: @@ -777,7 +585,7 @@ const Showcases = [ preview: require("./showcase/dsio-reward-calculator.png"), website: "https://dynamicstrategies.io/crewardcalculator", source: null, - tags: ["pooltool","analytics","educational"], + tags: ["pooltool", "analytics", "educational"], }, { title: "Cardahub - A services hub on Cardano", @@ -877,7 +685,7 @@ const Showcases = [ source: null, tags: ["nftproject", "game"], }, - { + { title: "Adax.pro", description: "Adax.pro is a Decentralized Digital Assets Exchange built on the Cardano blockchain.", @@ -893,7 +701,7 @@ const Showcases = [ preview: require("./showcase/minswap.png"), website: "https://app.minswap.org", source: null, - tags: [ "dex", "token"], + tags: ["dex", "token"], }, { title: "CWallet", @@ -911,7 +719,7 @@ const Showcases = [ preview: require("./showcase/gamechanger.png"), website: "https://gamechanger.finance", source: null, - tags: [ "wallet"], + tags: ["wallet"], }, { title: "GeroWallet", @@ -920,7 +728,7 @@ const Showcases = [ preview: require("./showcase/gerowallet.png"), website: "https://gerowallet.io", source: null, - tags: [ "wallet"], + tags: ["wallet"], }, { title: "Built on Cardano", @@ -929,7 +737,7 @@ const Showcases = [ preview: require("./showcase/buildoncardano.png"), website: "https://builtoncardano.com", source: null, - tags: [ "ecosystem"], + tags: ["ecosystem"], }, { title: "CardanoCube", @@ -947,7 +755,7 @@ const Showcases = [ preview: require("./showcase/cnftjungle.png"), website: "https://www.cnftjungle.io", source: null, - tags: [ "analytics", "nftsupport"], + tags: ["analytics", "nftsupport"], }, { title: "Explorer Png", @@ -956,7 +764,7 @@ const Showcases = [ preview: require("./showcase/explorerxyz.png"), website: "https://ex.plorer.xyz", source: null, - tags: [ "nftsupport"], + tags: ["nftsupport"], }, { title: "Galaxy Of Art", @@ -965,16 +773,16 @@ const Showcases = [ preview: require("./showcase/galaxyofart.png"), website: "https://galaxyof.art", source: null, - tags: [ "marketplace", "nftsupport"], - }, - { + tags: ["marketplace", "nftsupport"], + }, + { title: "JPG Store", description: "Discover artwork, explore communities, and support artists on Cardano.", preview: require("./showcase/jpg.png"), website: "https://www.jpg.store", source: null, - tags: [ "marketplace", "nftsupport"], + tags: ["marketplace", "nftsupport"], }, { title: "Atala Scan", @@ -992,7 +800,7 @@ const Showcases = [ preview: require("./showcase/pavia.png"), website: "https://www.pavia.io", source: null, - tags: [ "game", "nftproject"], + tags: ["game", "nftproject"], }, { title: "Turf", @@ -1010,7 +818,7 @@ const Showcases = [ preview: require("./showcase/wingriders.png"), website: "https://www.wingriders.com", source: null, - tags: [ "dex", "token"], + tags: ["dex", "token"], }, { title: "Building On Cardano", @@ -1019,7 +827,7 @@ const Showcases = [ preview: require("./showcase/buildingoncardano.png"), website: "https://buildingoncardano.com", source: null, - tags: [ "ecosystem"], + tags: ["ecosystem"], }, { title: "Pool Peek", @@ -1028,7 +836,7 @@ const Showcases = [ preview: require("./showcase/poolpeek.png"), website: "https://poolpeek.com", source: null, - tags: [ "pooltool", "analytics"], + tags: ["pooltool", "analytics"], }, { title: "Cardano NFT Explorer", @@ -1037,7 +845,7 @@ const Showcases = [ preview: require("./showcase/cnftme.png"), website: "https://cnft.me", source: null, - tags: [ "explorer", "nftsupport"], + tags: ["explorer", "nftsupport"], }, { title: "Lido Nation", @@ -1046,16 +854,7 @@ const Showcases = [ preview: require("./showcase/lidonation.png"), website: "https://www.lidonation.com/en/project-catalyst/projects", source: null, - tags: [ "catalyst", "analytics"], - }, - { - title: "Paradiso", - description: - "A Shangri-La for Cardano NFTs. Decentralized platform to mint, distribute, buy, and sell digital assets.", - preview: require("./showcase/paradiso.png"), - website: "https://paradiso.app", - source: null, - tags: ["marketplace", "minting", "nftsupport"], + tags: ["catalyst", "analytics"], }, { title: "RoundTable", @@ -1064,7 +863,7 @@ const Showcases = [ preview: require("./showcase/roundtable.png"), website: "https://roundtable.theadao.io/", source: "https://github.com/ADAOcommunity/round-table", - tags: [ "opensource", "daotool"], + tags: ["opensource", "daotool"], }, { title: "eUTxO", @@ -1073,7 +872,7 @@ const Showcases = [ preview: require("./showcase/eutxo.png"), website: "https://eutxo.org", source: null, - tags: [ "analytics", "explorer"], + tags: ["analytics", "explorer"], }, { title: "HAZELnet", @@ -1082,24 +881,296 @@ const Showcases = [ preview: require("./showcase/hazelnet.png"), website: "https://www.hazelnet.io", source: "https://github.com/nilscodes/hazelnet", - tags: [ "nftsupport", "opensource", "token"], + tags: ["nftsupport", "opensource", "token"], + }, + { + title: "Profiler", + description: + "Cardano explorer tailored to boost security and decision-making. Users can thoroughly examine their wallets, receiving a detailed overview of their transactions, tokens, and NFTs, complemented by interactive visualizations.", + preview: require("./showcase/profiler.png"), + website: "https://profiler.biz/", + source: null, + tags: ["analytics", "explorer"], }, { title: "Dapps on Cardano", description: "Provides insights in decentralized applications on Cardano. See total transactions, total scripts locked and script invocations.", - preview: require("./showcase/hazelnet.png"), + preview: require("./showcase/dapps-on-cardano.png"), website: "https://dappsoncardano.com", source: null, tags: [ "analytics", "ecosystem", "nftsupport"], }, + { + title: "Lending Pond", + description: + "Provide or Receive ada through a smart contract driven P2P lending marketplace using Cardano NFTs as collateral.", + preview: require("./showcase/lending-pond.png"), + website: "https://lendingpond.app", + source: null, + tags: [ "marketplace", "nftsupport", "lending"], + }, + { + title: "Gift Card Creator", + description: + "Customize NFT Gift Cards on the Cardano Blockchain", + preview: require("./showcase/gift-card-creator.png"), + website: "https://card-creator.shop", + source: null, + tags: ["minting", "nftsupport"], + }, + { + title: "Book Token", + description: + "An NFT marketplace for buying, reading, and selling eBooks and Audiobooks.", + preview: require("./showcase/book-token.png"), + website: "https://www.booktoken.io", + source: null, + tags: [ "marketplace", "nftsupport", "token"], + }, + { + title: "NuFi Wallet", + description: + "Non-custodial, multi-chain wallet with in-app DEX.", + preview: require("./showcase/nufiwallet.png"), + website: "https://nu.fi", + source: null, + tags: [ "wallet", "dex", "nftsupport"], + }, + { + title: "NFT Creator", + description: + "Design Cardano NFTs with this image editor", + preview: require("./showcase/nft-creator.png"), + website: "https://nft-creator.pics", + source: null, + tags: ["minting", "nftsupport"], + }, + { + title: "Voteaire", + description: + "Voteaire allows everyone in the ecosystem to create a poll. All results are weighted. All proposals and votes are stored publicly on-chain.", + preview: require("./showcase/voteaire.png"), + website: "https://voteaire.io/", + source: null, + tags: [ "daotool"], + }, + { + title: "Carda Station", + description: + "Explore this virtual world on the moon with an in game avatar, and interact with other players through hangouts, games or events.", + preview: require("./showcase/cardastation.png"), + website: "https://cardastation.com/", + source: null, + tags: ["nftproject", "game"], + }, + { + title: "STAMPD", + description: + "Use the public blockchains to timestamp your files with indelible proof and mint with linked NFC physical tags for embedment in physical objects.", + preview: require("./showcase/stampd.png"), + website: "https://stampd.io/", + source: null, + tags: ["minting", "metadata"], + }, + { + title: "CNFTLab Party", + description: + "Tool for minting CNFTs, manage your policyID, create royalties and start minting in few seconds.", + preview: require("./showcase/cnftlab-party.png"), + website: "https://www.cnftlab.party/", + source: null, + tags: ["minting", "nftsupport"], + }, + { + title: "TapTools", + description: + "All-in-one platform that offers free token distribution, comprehensive charts, NFT generation, and mint facilitation.", + preview: require("./showcase/taptools.png"), + website: "https://www.taptools.io", + source: null, + tags: [ "analytics", "token", "minting"], + }, + { + title: "Shareslake", + description: + "The stable branch of Cardano. A fiat-backed stablecoin for Cardano mainnet and a whole Cardano network running as a sidechain by the fiat-backed stablecoin instead of ADA. Deploy dApps out of the box and use Cardano technology like if you were using US dollars.", + preview: require("./showcase/shareslake.png"), + website: "https://www.shareslake.com/", + source: null, + tags: ["gateway", "token"], + }, + { + title: "Chainport", + description: + "ChainPort is a next-gen hard-security blockchain bridge that lets you hop across EVM chains to Cardano at a click.", + preview: require("./showcase/chainport.png"), + website: "https://www.chainport.io/", + source: null, + tags: ["bridge"], + }, + { + title: "Cardano Pet Registry", + description: + "A virtually free, non profit, global pet registry system built on the Cardano blockchain, facilitates peer to peer pet rescue and historical proof of pet ownership.", + preview: require("./showcase/petregistry.png"), + website: "https://www.petregistry.io", + source: null, + tags: ["metadata", "identity"], + }, + { + title: "Cardano Studio", + description: + "Create and mint NFTs on Cardano all in your browser - without trusting a third party for minting.", + preview: require("./showcase/cardano-studio.png"), + website: "https://cardano-studio.app", + source: null, + tags: ["minting", "nftsupport"], + }, + { + title: "Raw Cardano Explorer", + description: + "Cardano Blockchain Explorer to show data in a simple and fast way.", + preview: require("./showcase/raw-cardano.png"), + website: "https://www.rawcardano.app", + source: null, + tags: ["explorer"], + }, + { + title: "NFTada.io", + description: + "Simple web interface and sophisticated API for automated printing and distribution.", + preview: require("./showcase/nftada.png"), + website: "https://nftada.io/", + source: null, + tags: ["minting", "nftsupport"], + }, + { + title: "Cardano Relay Map", + description: + "Shows geographical distribution of Cardano stake pool relay nodes with flexible map features.", + preview: require("./showcase/monadpool-relay-map.png"), + website: "https://monadpool.com/cardano.html", + source: null, + tags: ["analytics"], + }, + { + title: "Finitum Bridge", + description: + "Move supported tokens cross-chain, from BSC to Cardano and vice versa.", + preview: require("./showcase/finitum-bridge.png"), + website: "https://finitum.io/bridge", + source: null, + tags: ["bridge"], + }, + { + title: "BALANCE - Balance Analytics", + description: + "A Blockchain Intelligence app dedicated to supporting the Cardano Blockchain Ecosystem.", + preview: require("./showcase/balance-analytics.png"), + website: "https://balanceanalytics.io/", + source: null, + tags: ["analytics", "pooltool"], + }, + { + title: "Peer Review Money", + description: + "Pretty straight forward site about the economics of ada, the native currency of the Cardano blockchain.", + preview: require("./showcase/peerreview.money.png"), + website: "https://peerreview.money", + source: null, + tags: ["analytics"], + }, + { + title: "Aeoniumsky", + description: + "Winner of the CNFT Awards 2022 in the category \"best digital art\".", + preview: require("./showcase/aeoniumsky.png"), + website: "https://www.aeoniumsky.io", + source: null, + tags: ["nftproject"], + }, + { + title: "VyFinance", + description: + "Winner of the CNFT Awards 2022 in the category \"best longterm utility\".", + preview: require("./showcase/vyfinance.png"), + website: "https://vyfi.io", + source: null, + tags: ["nftproject"], + }, + { + title: "Universe 25", + description: + "Winner of the CNFT Awards 2022 in the category \"Zeitgeist\".", + preview: require("./showcase/universe25.png"), + website: "https://www.universe25.io", + source: null, + tags: ["nftproject"], + }, + { + title: "Unsigned Algorithms", + description: + "Winner of the CNFT Awards 2022 in the category \"most innovative\".", + preview: require("./showcase/unsigs.png"), + website: "https://www.unsigs.com", + source: null, + tags: ["nftproject"], + }, + { + title: "Hosky", + description: + "Meme coin. Winner of the CNFT Awards 2022 in the category \"most impactful\".", + preview: require("./showcase/hosky.png"), + website: "https://hosky.io", + source: null, + tags: ["nftproject", "token"], + }, + { + title: "adahandle", + description: + "A standardized NFT that developers and users can use to associate an address with a custom and human-readable address.", + preview: require("./showcase/adahandle.png"), + website: "https://adahandle.com", + source: null, + tags: ["nftproject"], + }, + { + title: "Lace", + description: + "A new light wallet platform from IOG, one of the creators of Cardano. Manually verified by an independent auditor, Lace lets you quickly, easily, and securely manage your digital assets and enjoy Web3.", + preview: require("./showcase/lace.png"), + website: "https://www.lace.io/", + source: null, + tags: ["nftsupport", "wallet"], + }, + { + title: "flipr.io", + description: + "flipr.io is a Web3 application that aspires to serve many purposes within the world of Cardano NFTs.", + preview: require("./showcase/flipr.png"), + website: "https://www.flipr.io/", + source: null, + tags: ["marketplace", "nftsupport", "minting"], + }, + { + title: "Aada.finance", + description: + "Aada is a peer-to-peer lending and borrowing protocol on the Cardano blockchain.", + preview: require("./showcase/aada-finance.png"), + website: "https://app.aada.finance", + source: null, + tags: ["lending", "marketplace", "nftsupport"], + }, ]; export const TagList = Object.keys(Tags); function sortShowcases() { let result = Showcases; + // Sort by site name result = sortBy(result, (showcase) => showcase.title.toLowerCase()); + // Sort by favorite tag, favorite first result = sortBy(result, (showcase) => !showcase.tags.includes("favorite")); return result; diff --git a/src/pages/showcase/index.js b/src/pages/showcase/index.js index 949d8f1060..2fd5456f02 100644 --- a/src/pages/showcase/index.js +++ b/src/pages/showcase/index.js @@ -1,5 +1,5 @@ import React, { useState, useMemo, useCallback, useEffect } from "react"; - +import Head from '@docusaurus/Head'; import Layout from "@theme/Layout"; import ShowcaseTooltip from "@site/src/components/showcase/ShowcaseTooltip"; import ShowcaseTagSelect from "@site/src/components/showcase/ShowcaseTagSelect"; @@ -10,14 +10,18 @@ import ShowcaseFilterToggle, { } from "@site/src/components/showcase/ShowcaseFilterToggle"; import clsx from "clsx"; +import ShowcaseLatestToggle, { + readLatestOperator, +} from "@site/src/components/showcase/ShowcaseLatestToggle"; + import PortalHero from "../portalhero"; import { toggleListItem } from "../../utils/jsUtils"; -import { SortedShowcases, Tags, TagList } from "../../data/showcases"; +import { SortedShowcases, Tags, TagList, Showcases } from "../../data/showcases"; import { useHistory, useLocation } from "@docusaurus/router"; import styles from "./styles.module.css"; import ExecutionEnvironment from "@docusaurus/ExecutionEnvironment"; -import Fav from "../../svg/fav.svg" +import Fav from "../../svg/fav.svg"; const TITLE = "Showcase"; const DESCRIPTION = "See the awesome projects people are building with Cardano"; @@ -36,10 +40,10 @@ export function prepareUserState() { } const favoriteShowcases = SortedShowcases.filter((showcase) => - showcase.tags.includes('favorite'), + showcase.tags.includes("favorite") ); const otherShowcases = SortedShowcases.filter( - (showcase) => !showcase.tags.includes('favorite'), + (showcase) => !showcase.tags.includes("favorite") ); function restoreUserState(userState) { @@ -66,7 +70,12 @@ function replaceSearchTags(search, newTags) { } // Filter projects based on chosen project tags, toggle operator or searchbar value -function filterProjects(projects, selectedTags, operator, searchName) { +function filterProjects(projects, selectedTags, latest, operator, searchName, unfilteredProjects) { + // Check if "LAST" filter is applied to decide if to filter through all projects or only last ones + if (latest === "LAST") { + var projects = unfilteredProjects.slice(-10); + } + if (searchName) { projects = projects.filter((project) => project.title.toLowerCase().includes(searchName.toLowerCase()) @@ -75,11 +84,11 @@ function filterProjects(projects, selectedTags, operator, searchName) { if (selectedTags.length === 0) { return projects; } + return projects.filter((project) => { if (project.tags.length === 0) { return false; - } - if (operator === "AND") { + } else if (operator === "AND") { return selectedTags.every((tag) => project.tags.includes(tag)); } else { return selectedTags.some((tag) => project.tags.includes(tag)); @@ -90,6 +99,7 @@ function filterProjects(projects, selectedTags, operator, searchName) { function useFilteredProjects() { const location = useLocation(); const [operator, setOperator] = useState("OR"); + const [latest, setLatest] = useState("LAST"); // On SSR / first mount (hydration) no tag is selected const [selectedTags, setSelectedTags] = useState([]); @@ -99,13 +109,22 @@ function useFilteredProjects() { useEffect(() => { setSelectedTags(readSearchTags(location.search)); setOperator(readOperator(location.search)); + setLatest(readLatestOperator(location.search)); setSearchName(readSearchName(location.search)); restoreUserState(location.state); }, [location]); return useMemo( - () => filterProjects(SortedShowcases, selectedTags, operator, searchName), - [selectedTags, operator, searchName] + () => + filterProjects( + SortedShowcases, + selectedTags, + latest, + operator, + searchName, + Showcases + ), + [selectedTags, latest, operator, searchName] ); } @@ -143,7 +162,6 @@ function ShowcaseHeader() { } function ShowcaseFilters() { - const filteredProjects = useFilteredProjects(); return ( @@ -152,18 +170,18 @@ function ShowcaseFilters() {

Filters

{`${filteredProjects.length} project${ - filteredProjects.length === 1 ? '' : 's' + filteredProjects.length === 1 ? "" : "s" }`}
+
- {TagList.map((tag) => { + {TagList.map((tag, i) => { const { label, description, color } = Tags[tag]; const id = `showcase_checkbox_id_${tag}`; return ( - <> -
+
- + ) : (
- ); })}
@@ -227,14 +248,15 @@ function ShowcaseCards() {
+ "margin-bottom--md", + styles.showcaseFavoriteHeader + )} + >

Our favorites

- +
-
    +
      {favoriteShowcases.map((showcase) => ( ))} @@ -253,10 +275,8 @@ function ShowcaseCards() { ) : (
      + className={clsx("margin-bottom--md", styles.showcaseFavoriteHeader)} + >
        @@ -300,26 +320,38 @@ function SearchBar() { history.push({ ...location, search: newSearch.toString(), + state: prepareUserState(), }); setTimeout(() => { document.getElementById("searchbar")?.focus(); - }, 1); + }, 0); }} />
      ); } +// Add open graph image to showcase page +function MetaData() { + return ( + + + + + ) +} + function Showcase() { const { selectedTags, toggleTag } = useSelectedTags(); const filteredProjects = useFilteredProjects(); return ( + - + ); } diff --git a/src/pages/showcase/styles.module.css b/src/pages/showcase/styles.module.css index 8c8b5b6f84..27a8cc5ce3 100644 --- a/src/pages/showcase/styles.module.css +++ b/src/pages/showcase/styles.module.css @@ -129,10 +129,6 @@ font-size: 1rem; } -.svgIconFavorite { - margin-left: 1rem; -} - .ourFavorites { margin-right: 0.7rem; } \ No newline at end of file diff --git a/src/pages/tools/index.js b/src/pages/tools/index.js index 8ecf525538..3afbf12855 100644 --- a/src/pages/tools/index.js +++ b/src/pages/tools/index.js @@ -1,5 +1,5 @@ import React, { useState, useMemo, useCallback, useEffect } from "react"; - +import Head from '@docusaurus/Head'; import Layout from "@theme/Layout"; import ShowcaseTooltip from "@site/src/components/showcase/ShowcaseTooltip"; import ShowcaseTagSelect from "@site/src/components/showcase/ShowcaseTagSelect"; @@ -10,9 +10,19 @@ import ShowcaseFilterToggle, { } from "@site/src/components/showcase/ShowcaseFilterToggle"; import clsx from "clsx"; +import ShowcaseLatestToggle, { + readLatestOperator, +} from "@site/src/components/showcase/ShowcaseLatestToggle"; + import PortalHero from "../portalhero"; import { toggleListItem } from "../../utils/jsUtils"; -import { SortedShowcases, Tags, TagList } from "../../data/builder-tools"; +import { + DomainsTags, + LanguagesOrTechnologiesTags, + SortedShowcases, + Tags, + Showcases +} from "../../data/builder-tools"; import { useHistory, useLocation } from "@docusaurus/router"; import styles from "./styles.module.css"; @@ -47,7 +57,7 @@ function restoreUserState(userState) { scrollTopPosition: 0, focusedElementId: undefined, }; - + document.getElementById(focusedElementId)?.focus(); window.scrollTo({ top: scrollTopPosition }); } @@ -67,7 +77,12 @@ function replaceSearchTags(search, newTags) { } // Filter projects based on chosen project tags, toggle operator or searchbar value -function filterProjects(projects, selectedTags, operator, searchName) { +function filterProjects(projects, selectedTags, latest, operator, searchName, unfilteredProjects) { + // Check if "LAST" filter is applied to decide if to filter through all projects or only last ones + if (latest === "LAST") { + var projects = unfilteredProjects.slice(-10); + } + if (searchName) { projects = projects.filter((project) => project.title.toLowerCase().includes(searchName.toLowerCase()) @@ -91,6 +106,7 @@ function filterProjects(projects, selectedTags, operator, searchName) { function useFilteredProjects() { const location = useLocation(); const [operator, setOperator] = useState("OR"); + const [latest, setLatest] = useState("LAST"); // On SSR / first mount (hydration) no tag is selected const [selectedTags, setSelectedTags] = useState([]); @@ -100,13 +116,22 @@ function useFilteredProjects() { useEffect(() => { setSelectedTags(readSearchTags(location.search)); setOperator(readOperator(location.search)); + setLatest(readLatestOperator(location.search)); setSearchName(readSearchName(location.search)); restoreUserState(location.state); }, [location]); return useMemo( - () => filterProjects(SortedShowcases, selectedTags, operator, searchName), - [selectedTags, operator, searchName] + () => + filterProjects( + SortedShowcases, + selectedTags, + latest, + operator, + searchName, + Showcases + ), + [selectedTags, latest, operator, searchName] ); } @@ -144,7 +169,6 @@ function ShowcaseHeader() { } function ShowcaseFilters() { - const filteredProjects = useFilteredProjects(); return ( @@ -153,63 +177,54 @@ function ShowcaseFilters() {

      Filters

      {`${filteredProjects.length} builder tool${ - filteredProjects.length === 1 ? '' : 's' + filteredProjects.length === 1 ? "" : "s" }`}
      +
-
- {TagList.map((tag) => { - const { label, description, color } = Tags[tag]; - const id = `showcase_checkbox_id_${tag}`; - return ( - <> -
- - - - - ) : ( - - ) - } - /> - -
- - ); - })} -
+

By language / technology

+ {filterBy(LanguagesOrTechnologiesTags)} +
+

By domain

+ {filterBy(DomainsTags)}
); } +function filterBy(tags) { + return (
+ {tags.map((tag, i) => { + const { label, description, color } = Tags[tag]; + const id = `showcase_checkbox_id_${tag}`; + return ( +
+ + + )} + /> + +
+ ); + })} +
); +} + function ShowcaseCards() { const filteredProjects = useFilteredProjects(); @@ -237,7 +252,7 @@ function ShowcaseCards() { )} >

Our favorites

- +
    @@ -304,26 +319,38 @@ function SearchBar() { history.push({ ...location, search: newSearch.toString(), + state: prepareUserState(), }); setTimeout(() => { document.getElementById("searchbar")?.focus(); - }, 1); + }, 0); }} /> ); } +// Add open graph image to builder tool page +function MetaData() { + return ( + + + + + ) +} + function Showcase() { const { selectedTags, toggleTag } = useSelectedTags(); const filteredProjects = useFilteredProjects(); return ( + - + ); } diff --git a/src/pages/tools/styles.module.css b/src/pages/tools/styles.module.css index 8c8b5b6f84..27a8cc5ce3 100644 --- a/src/pages/tools/styles.module.css +++ b/src/pages/tools/styles.module.css @@ -129,10 +129,6 @@ font-size: 1rem; } -.svgIconFavorite { - margin-left: 1rem; -} - .ourFavorites { margin-right: 0.7rem; } \ No newline at end of file diff --git a/src/plugins/changelog/index.js b/src/plugins/changelog/index.js new file mode 100644 index 0000000000..5eb47ac44b --- /dev/null +++ b/src/plugins/changelog/index.js @@ -0,0 +1,153 @@ +const path = require('path'); +const fs = require('fs-extra'); +const pluginContentBlog = require('@docusaurus/plugin-content-blog'); +const {aliasedSitePath, docuHash, normalizeUrl} = require('@docusaurus/utils'); + +/** + * Multiple versions may be published on the same day, causing the order to be + * the reverse. Therefore, our publish time has a "fake hour" to order them. + */ +const publishTimes = new Set(); +/** + * @type {Record} + */ +const authorsMap = {}; + +/** + * @param {string} section + */ +function processSection(section) { + + const title = section + .match(/\n## .*/)?.[0] + .trim() + .replace('## ', ''); + if (!title) { + return null; + } + const content = section + .replace(/\n## .*/, '') + .trim() + .replace('running_woman', 'running'); + + let authors = content.match(/## Contributors: \d.*/s); + if (authors) { + authors = authors[0] + .match(/- .*/g) + .map( + (line) => + line.match( + /- (?:(?.*?) \()?\[@(?.*)\]\((?.*?)\)\)?/, + ).groups, + ) + .map((author) => ({ + ...author, + name: author.name ?? author.alias, + imageURL: `https://github.com/${author.alias}.png`, + })) + .sort((a, b) => a.url.localeCompare(b.url)); + + authors.forEach((author) => { + authorsMap[author.alias] = author; + }); + } + let hour = 20; + const date = title.match(/ \((?.*)\)/)?.groups.date; + while (publishTimes.has(`${date}T${hour}:00`)) { + hour -= 1; + } + publishTimes.add(`${date}T${hour}:00`); + + return { + title: title.replace(/ \(.*\)/, ''), + content: `--- +date: ${`${date}T${hour}:00`}${ + authors + ? ` +authors: +${authors.map((author) => ` - '${author.alias}'`).join('\n')}` + : '' + } +--- + +# ${title.replace(/ \(.*\)/, '')} + + + +${content.replace(/####/g, '##')}`, + }; +} + +/** + * @param {import('@docusaurus/types').LoadContext} context + * @returns {import('@docusaurus/types').Plugin} + */ +async function ChangelogPlugin(context, options) { + const generateDir = path.join(context.siteDir, 'changelog/source'); + const blogPlugin = await pluginContentBlog.default(context, { + ...options, + path: generateDir, + id: 'changelog', + blogListComponent: '@theme/ChangelogList', + blogPostComponent: '@theme/ChangelogPage', + }); + const changelogPath = path.join(__dirname, '../../../CHANGELOG.md'); + return { + ...blogPlugin, + name: 'changelog-plugin', + async loadContent() { + const fileContent = await fs.readFile(changelogPath, 'utf-8'); + const sections = fileContent + .split(/(?=\n## )/) + .map(processSection) + .filter(Boolean); + await Promise.all( + sections.map((section) => + fs.outputFile( + path.join(generateDir, `${section.title}.md`), + section.content, + ), + ), + ); + const authorsPath = path.join(generateDir, 'authors.json'); + await fs.outputFile(authorsPath, JSON.stringify(authorsMap, null, 2)); + const content = await blogPlugin.loadContent(); + content.blogPosts.forEach((post, index) => { + const pageIndex = Math.floor(index / options.postsPerPage); + post.metadata.listPageLink = normalizeUrl([ + context.baseUrl, + options.routeBasePath, + pageIndex === 0 ? '/' : `/page/${pageIndex + 1}`, + ]); + }); + return content; + }, + configureWebpack(...args) { + const config = blogPlugin.configureWebpack(...args); + const pluginDataDirRoot = path.join( + context.generatedFilesDir, + 'changelog-plugin', + 'default', + ); + // Redirect the metadata path to our folder + config.module.rules[0].use[1].options.metadataPath = (mdxPath) => { + // Note that metadataPath must be the same/in-sync as + // the path from createData for each MDX. + const aliasedPath = aliasedSitePath(mdxPath, context.siteDir); + return path.join(pluginDataDirRoot, `${docuHash(aliasedPath)}.json`); + }; + return config; + }, + getThemePath() { + return './theme'; + }, + getPathsToWatch() { + // Don't watch the generated dir + return [changelogPath]; + }, + }; +} + +ChangelogPlugin.validateOptions = pluginContentBlog.validateOptions; + +module.exports = ChangelogPlugin; diff --git a/src/plugins/changelog/theme/ChangelogItem/Header/Author/index.tsx b/src/plugins/changelog/theme/ChangelogItem/Header/Author/index.tsx new file mode 100644 index 0000000000..484b75cea9 --- /dev/null +++ b/src/plugins/changelog/theme/ChangelogItem/Header/Author/index.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import clsx from 'clsx'; +import Link from '@docusaurus/Link'; +import type {Props} from '@theme/BlogPostItem/Header/Author'; + +import styles from './styles.module.css'; + +export default function ChangelogAuthor({ + author, + className, +}: Props): JSX.Element { + const {name, url, imageURL} = author; + return ( +
    + {imageURL && ( + + {name} { + // Image returns 404 if the user's handle changes. We display a + // fallback instead. + e.currentTarget.src = + 'data:image/svg+xml,'; + }} + /> + + )} +
    + ); +} diff --git a/src/plugins/changelog/theme/ChangelogItem/Header/Author/styles.module.css b/src/plugins/changelog/theme/ChangelogItem/Header/Author/styles.module.css new file mode 100644 index 0000000000..5f4fcb4295 --- /dev/null +++ b/src/plugins/changelog/theme/ChangelogItem/Header/Author/styles.module.css @@ -0,0 +1,5 @@ +.image { + width: 100%; + height: 100%; + object-fit: cover; +} diff --git a/src/plugins/changelog/theme/ChangelogItem/Header/Authors/index.tsx b/src/plugins/changelog/theme/ChangelogItem/Header/Authors/index.tsx new file mode 100644 index 0000000000..002c123033 --- /dev/null +++ b/src/plugins/changelog/theme/ChangelogItem/Header/Authors/index.tsx @@ -0,0 +1,53 @@ +import React, { useState } from 'react'; +import clsx from 'clsx'; +import { useBlogPost } from '@docusaurus/theme-common/internal'; +import ChangelogItemHeaderAuthor from '@theme/ChangelogItem/Header/Author'; +import IconExpand from '@theme/Icon/Expand'; +import type { Props } from '@theme/BlogPostItem/Header/Authors'; + +import styles from './styles.module.css'; + +// Component responsible for the authors layout +export default function BlogPostAuthors({ + className, +}: Props): JSX.Element | null { + const { + metadata: { authors }, + assets, + } = useBlogPost(); + const [expanded, setExpanded] = useState(false); + const authorsCount = authors.length; + if (authorsCount === 0) { + return null; + } + const filteredAuthors = authors.slice(0, expanded ? authors.length : 20); + return ( +
    + {filteredAuthors.map((author, idx) => ( +
    + +
    + ))} + {authors.length > 20 && ( + + )} +
    + ); +} diff --git a/src/plugins/changelog/theme/ChangelogItem/Header/Authors/styles.module.css b/src/plugins/changelog/theme/ChangelogItem/Header/Authors/styles.module.css new file mode 100644 index 0000000000..d5dcafcdf8 --- /dev/null +++ b/src/plugins/changelog/theme/ChangelogItem/Header/Authors/styles.module.css @@ -0,0 +1,31 @@ +.authorCol { + max-width: inherit !important; + flex-grow: 1 !important; +} + +.imageOnlyAuthorRow { + display: flex; + flex-flow: row wrap; +} + +.imageOnlyAuthorCol { + margin-left: 0.3rem; + margin-right: 0.3rem; +} + +.imageOnlyAuthorCol [class^='image'] { + background-color: var(--ifm-color-emphasis-100); +} + +.toggleButton { + margin-left: 0.3rem; + margin-right: 0.3rem; + border-radius: 50%; + width: var(--ifm-avatar-photo-size); + height: var(--ifm-avatar-photo-size); + background-color: var(--ifm-color-emphasis-100); +} + +.toggleButtonIconExpanded { + transform: rotate(180deg); +} diff --git a/src/plugins/changelog/theme/ChangelogItem/Header/index.tsx b/src/plugins/changelog/theme/ChangelogItem/Header/index.tsx new file mode 100644 index 0000000000..0f6ec4ac60 --- /dev/null +++ b/src/plugins/changelog/theme/ChangelogItem/Header/index.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import {useBlogPost} from '@docusaurus/theme-common/internal'; +import BlogPostItemHeaderTitle from '@theme/BlogPostItem/Header/Title'; +import BlogPostItemHeaderInfo from '@theme/BlogPostItem/Header/Info'; +import ChangelogItemHeaderAuthors from '@theme/ChangelogItem/Header/Authors'; +import styles from './styles.module.css'; + +// Reduce changelog title size, but only on list view +function ChangelogTitle() { + const {isBlogPostPage} = useBlogPost(); + return ( + + ); +} + +export default function ChangelogItemHeader(): JSX.Element { + return ( +
    + + + +
    + ); +} diff --git a/src/plugins/changelog/theme/ChangelogItem/Header/styles.module.css b/src/plugins/changelog/theme/ChangelogItem/Header/styles.module.css new file mode 100644 index 0000000000..234e3bea75 --- /dev/null +++ b/src/plugins/changelog/theme/ChangelogItem/Header/styles.module.css @@ -0,0 +1,3 @@ +.changelogItemTitleList { + font-size: 2rem; +} diff --git a/src/plugins/changelog/theme/ChangelogItem/index.tsx b/src/plugins/changelog/theme/ChangelogItem/index.tsx new file mode 100644 index 0000000000..83487ddb71 --- /dev/null +++ b/src/plugins/changelog/theme/ChangelogItem/index.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import ChangelogItemHeader from '@theme/ChangelogItem/Header'; +import type { Props } from '@theme/BlogPostItem'; +import BlogPostItemContainer from '@theme/BlogPostItem/Container'; +import BlogPostItemContent from '@theme/BlogPostItem/Content'; + +import styles from './styles.module.css'; + +export default function ChangelogItem({ children }: Props): JSX.Element { + return ( + + + {children} + + ); +} diff --git a/src/plugins/changelog/theme/ChangelogItem/styles.module.css b/src/plugins/changelog/theme/ChangelogItem/styles.module.css new file mode 100644 index 0000000000..a12626fc53 --- /dev/null +++ b/src/plugins/changelog/theme/ChangelogItem/styles.module.css @@ -0,0 +1,3 @@ +.changelogItemContainer { + margin-bottom: 1rem; +} diff --git a/src/plugins/changelog/theme/ChangelogList/index.tsx b/src/plugins/changelog/theme/ChangelogList/index.tsx new file mode 100644 index 0000000000..300b1f2f03 --- /dev/null +++ b/src/plugins/changelog/theme/ChangelogList/index.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import clsx from 'clsx'; +import { + PageMetadata, + HtmlClassNameProvider, + ThemeClassNames, +} from '@docusaurus/theme-common'; +import BlogLayout from '@theme/BlogLayout'; +import BlogListPaginator from '@theme/BlogListPaginator'; +import BlogPostItems from '@theme/BlogPostItems'; +import SearchMetadata from '@theme/SearchMetadata'; +import ChangelogItem from '@theme/ChangelogItem'; +import type {Props} from '@theme/BlogListPage'; + +function ChangelogListMetadata(props: Props): JSX.Element { + const {metadata} = props; + const {blogTitle, blogDescription} = metadata; + return ( + <> + + + + ); +} + +function ChangelogListContent(props: Props): JSX.Element { + const {metadata, items, sidebar} = props; + + return ( + +

    Developer Portal Changelog

    + + +
    + ); +} + +export default function ChangelogList(props: Props): JSX.Element { + return ( + + + + + ); +} diff --git a/src/plugins/changelog/theme/ChangelogPage/index.tsx b/src/plugins/changelog/theme/ChangelogPage/index.tsx new file mode 100644 index 0000000000..57c3a18f9a --- /dev/null +++ b/src/plugins/changelog/theme/ChangelogPage/index.tsx @@ -0,0 +1,79 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import Translate from '@docusaurus/Translate'; +import Link from '@docusaurus/Link'; +import {HtmlClassNameProvider, ThemeClassNames} from '@docusaurus/theme-common'; +import {BlogPostProvider, useBlogPost} from '@docusaurus/theme-common/internal'; +import BlogPostPageMetadata from '@theme/BlogPostPage/Metadata'; +import BlogLayout from '@theme/BlogLayout'; +import ChangelogItem from '@theme/ChangelogItem'; +import ChangelogPaginator from '@theme/ChangelogPaginator'; +import TOC from '@theme/TOC'; +import type {Props} from '@theme/BlogPostPage'; +import type {BlogSidebar} from '@docusaurus/plugin-content-blog'; + +function BackToIndexLink() { + const {metadata} = useBlogPost(); + // @ts-expect-error: we injected this + const {listPageLink} = metadata; + return ( + + ← Back to index page + + ); +} + +function ChangelogPageContent({ + sidebar, + children, +}: { + sidebar: BlogSidebar; + children: ReactNode; +}): JSX.Element { + const {metadata, toc} = useBlogPost(); + const {nextItem, prevItem, frontMatter} = metadata; + const { + hide_table_of_contents: hideTableOfContents, + toc_min_heading_level: tocMinHeadingLevel, + toc_max_heading_level: tocMaxHeadingLevel, + } = frontMatter; + return ( + 0 ? ( + + ) : undefined + }> + + + {children} + + {(nextItem || prevItem) && ( + + )} + + ); +} + +export default function ChangelogPage(props: Props): JSX.Element { + const ChangelogContent = props.content; + return ( + + + + + + + + + ); +} diff --git a/src/plugins/changelog/theme/ChangelogPaginator/index.tsx b/src/plugins/changelog/theme/ChangelogPaginator/index.tsx new file mode 100644 index 0000000000..a2718e35e6 --- /dev/null +++ b/src/plugins/changelog/theme/ChangelogPaginator/index.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import Translate, {translate} from '@docusaurus/Translate'; +import PaginatorNavLink from '@theme/PaginatorNavLink'; +import type {Props} from '@theme/BlogPostPaginator'; + +export default function ChangelogPaginator(props: Props): JSX.Element { + const {nextItem, prevItem} = props; + + return ( + + ); +} diff --git a/src/plugins/changelog/theme/Icon/Expand/index.tsx b/src/plugins/changelog/theme/Icon/Expand/index.tsx new file mode 100644 index 0000000000..59be830e59 --- /dev/null +++ b/src/plugins/changelog/theme/Icon/Expand/index.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import type {Props} from '@theme/Icon/Expand'; + +export default function IconExpand({expanded, ...props}: Props): JSX.Element { + if (expanded) { + return ( + + + + ); + } + return ( + + + + ); +} diff --git a/src/plugins/changelog/theme/types.d.ts b/src/plugins/changelog/theme/types.d.ts new file mode 100644 index 0000000000..73d303fdf6 --- /dev/null +++ b/src/plugins/changelog/theme/types.d.ts @@ -0,0 +1,16 @@ +declare module '@theme/ChangelogPaginator'; +declare module '@theme/ChangelogItem'; +declare module '@theme/ChangelogItem/Header'; +declare module '@theme/ChangelogItem/Header/Author'; +declare module '@theme/ChangelogItem/Header/Authors'; +declare module '@theme/ChangelogList'; + +declare module '@theme/Icon/Expand' { + import type {ComponentProps} from 'react'; + + export interface Props extends ComponentProps<'svg'> { + expanded?: boolean; + } + + export default function IconExpand(props: Props): JSX.Element; +} diff --git a/src/theme/prism-include-languages.js b/src/theme/prism-include-languages.js new file mode 100644 index 0000000000..0cd326f7b0 --- /dev/null +++ b/src/theme/prism-include-languages.js @@ -0,0 +1,18 @@ +import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; +import siteConfig from '@generated/docusaurus.config'; +const prismIncludeLanguages = (PrismObject) => { + if (ExecutionEnvironment.canUseDOM) { + const { + themeConfig: {prism = {}}, + } = siteConfig; + const {additionalLanguages = []} = prism; + window.Prism = PrismObject; + additionalLanguages.forEach((lang) => + require(`prismjs/components/prism-${lang}`) + ); + window.x = require('../aiken.prism.lang.js'); + delete window.Prism; + } +}; + +export default prismIncludeLanguages; diff --git a/static/img/aiken-logo.png b/static/img/aiken-logo.png new file mode 100644 index 0000000000..ee588e12da Binary files /dev/null and b/static/img/aiken-logo.png differ diff --git a/static/img/devblog/adao-light.svg b/static/img/devblog/adao-light.svg new file mode 100644 index 0000000000..2bbc8045c6 --- /dev/null +++ b/static/img/devblog/adao-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/devblog/gmbl-dark.png b/static/img/devblog/gmbl-dark.png new file mode 100644 index 0000000000..cbdebfba36 Binary files /dev/null and b/static/img/devblog/gmbl-dark.png differ diff --git a/static/img/devblog/gmbl-light.png b/static/img/devblog/gmbl-light.png new file mode 100644 index 0000000000..d46d844e80 Binary files /dev/null and b/static/img/devblog/gmbl-light.png differ diff --git a/static/img/devblog/mesh-dark.png b/static/img/devblog/mesh-dark.png new file mode 100644 index 0000000000..afd4f78e84 Binary files /dev/null and b/static/img/devblog/mesh-dark.png differ diff --git a/static/img/devblog/mesh-light.png b/static/img/devblog/mesh-light.png new file mode 100644 index 0000000000..e21fa228fd Binary files /dev/null and b/static/img/devblog/mesh-light.png differ diff --git a/static/img/devblog/newm.png b/static/img/devblog/newm.png new file mode 100644 index 0000000000..9a8910eb1c Binary files /dev/null and b/static/img/devblog/newm.png differ diff --git a/static/img/devblog/strica-light.png b/static/img/devblog/strica-light.png new file mode 100644 index 0000000000..1272c95e94 Binary files /dev/null and b/static/img/devblog/strica-light.png differ diff --git a/static/img/get-started/blockfrost/1-add-project.png b/static/img/get-started/blockfrost/1-add-project.png deleted file mode 100644 index ede0c80433..0000000000 Binary files a/static/img/get-started/blockfrost/1-add-project.png and /dev/null differ diff --git a/static/img/get-started/blockfrost/2-get-api-key.png b/static/img/get-started/blockfrost/2-get-api-key.png deleted file mode 100644 index 8e149b4e2f..0000000000 Binary files a/static/img/get-started/blockfrost/2-get-api-key.png and /dev/null differ diff --git a/static/img/get-started/blockfrost/getting-started-1_frontend_landing.png b/static/img/get-started/blockfrost/getting-started-1_frontend_landing.png new file mode 100644 index 0000000000..8dd7ae4709 Binary files /dev/null and b/static/img/get-started/blockfrost/getting-started-1_frontend_landing.png differ diff --git a/static/img/get-started/blockfrost/getting-started-2_add_project.png b/static/img/get-started/blockfrost/getting-started-2_add_project.png new file mode 100644 index 0000000000..432c23cfeb Binary files /dev/null and b/static/img/get-started/blockfrost/getting-started-2_add_project.png differ diff --git a/static/img/get-started/blockfrost/getting-started-3_get_api_key.png b/static/img/get-started/blockfrost/getting-started-3_get_api_key.png new file mode 100644 index 0000000000..f2967975fd Binary files /dev/null and b/static/img/get-started/blockfrost/getting-started-3_get_api_key.png differ diff --git a/static/img/get-started/blockfrost/secure-webhooks-1_webhooks_jsonpath.png b/static/img/get-started/blockfrost/secure-webhooks-1_webhooks_jsonpath.png new file mode 100644 index 0000000000..57da6f0c9a Binary files /dev/null and b/static/img/get-started/blockfrost/secure-webhooks-1_webhooks_jsonpath.png differ diff --git a/static/img/integrate-cardano/point-of-sale-example.png b/static/img/integrate-cardano/point-of-sale-example.png new file mode 100644 index 0000000000..c04ba87965 Binary files /dev/null and b/static/img/integrate-cardano/point-of-sale-example.png differ diff --git a/static/img/logo-eopsin.png b/static/img/logo-eopsin.png new file mode 100644 index 0000000000..50693050c5 Binary files /dev/null and b/static/img/logo-eopsin.png differ diff --git a/static/img/nfts/poolpm_nft_testnet.png b/static/img/nfts/poolpm_nft_testnet.png new file mode 100644 index 0000000000..3b06962de8 Binary files /dev/null and b/static/img/nfts/poolpm_nft_testnet.png differ diff --git a/static/img/og-developer-portal.png b/static/img/og-developer-portal.png deleted file mode 100644 index 36bdebd7ce..0000000000 Binary files a/static/img/og-developer-portal.png and /dev/null differ diff --git a/static/img/og/og-blog-ada-makerspace.png b/static/img/og/og-blog-ada-makerspace.png new file mode 100644 index 0000000000..4a00cc4d30 Binary files /dev/null and b/static/img/og/og-blog-ada-makerspace.png differ diff --git a/static/img/og/og-blog-adao.png b/static/img/og/og-blog-adao.png new file mode 100644 index 0000000000..43eed912b4 Binary files /dev/null and b/static/img/og/og-blog-adao.png differ diff --git a/static/img/og/og-blog-adapools.png b/static/img/og/og-blog-adapools.png new file mode 100644 index 0000000000..896851fa32 Binary files /dev/null and b/static/img/og/og-blog-adapools.png differ diff --git a/static/img/og/og-blog-adatools.png b/static/img/og/og-blog-adatools.png new file mode 100644 index 0000000000..b3e826cf22 Binary files /dev/null and b/static/img/og/og-blog-adatools.png differ diff --git a/static/img/og/og-blog-cardanoscan.png b/static/img/og/og-blog-cardanoscan.png new file mode 100644 index 0000000000..92c66f2c94 Binary files /dev/null and b/static/img/og/og-blog-cardanoscan.png differ diff --git a/static/img/og/og-blog-charlie.png b/static/img/og/og-blog-charlie.png new file mode 100644 index 0000000000..1485ec1132 Binary files /dev/null and b/static/img/og/og-blog-charlie.png differ diff --git a/static/img/og/og-blog-coti.png b/static/img/og/og-blog-coti.png new file mode 100644 index 0000000000..35ad89db61 Binary files /dev/null and b/static/img/og/og-blog-coti.png differ diff --git a/static/img/og/og-blog-gimbalabs.png b/static/img/og/og-blog-gimbalabs.png new file mode 100644 index 0000000000..258b0ecd17 Binary files /dev/null and b/static/img/og/og-blog-gimbalabs.png differ diff --git a/static/img/og/og-blog-koios.png b/static/img/og/og-blog-koios.png new file mode 100644 index 0000000000..09cfc6511e Binary files /dev/null and b/static/img/og/og-blog-koios.png differ diff --git a/static/img/og/og-blog-launch.png b/static/img/og/og-blog-launch.png new file mode 100644 index 0000000000..cac4fb0dbc Binary files /dev/null and b/static/img/og/og-blog-launch.png differ diff --git a/static/img/og/og-blog-lovelace-academy.png b/static/img/og/og-blog-lovelace-academy.png new file mode 100644 index 0000000000..d2a7e06ea2 Binary files /dev/null and b/static/img/og/og-blog-lovelace-academy.png differ diff --git a/static/img/og/og-blog-mercury.png b/static/img/og/og-blog-mercury.png new file mode 100644 index 0000000000..a10683d4ef Binary files /dev/null and b/static/img/og/og-blog-mercury.png differ diff --git a/static/img/og/og-blog-mesh.png b/static/img/og/og-blog-mesh.png new file mode 100644 index 0000000000..2531c93713 Binary files /dev/null and b/static/img/og/og-blog-mesh.png differ diff --git a/static/img/og/og-blog-milkomeda.png b/static/img/og/og-blog-milkomeda.png new file mode 100644 index 0000000000..bc32c41ef2 Binary files /dev/null and b/static/img/og/og-blog-milkomeda.png differ diff --git a/static/img/og/og-blog-minswap.png b/static/img/og/og-blog-minswap.png new file mode 100644 index 0000000000..61ea53cb00 Binary files /dev/null and b/static/img/og/og-blog-minswap.png differ diff --git a/static/img/og/og-blog-nami.png b/static/img/og/og-blog-nami.png new file mode 100644 index 0000000000..85ff3e4f23 Binary files /dev/null and b/static/img/og/og-blog-nami.png differ diff --git a/static/img/og/og-blog-newm.png b/static/img/og/og-blog-newm.png new file mode 100644 index 0000000000..2a25916df6 Binary files /dev/null and b/static/img/og/og-blog-newm.png differ diff --git a/static/img/og/og-blog-nftas.png b/static/img/og/og-blog-nftas.png new file mode 100644 index 0000000000..deb90e16dd Binary files /dev/null and b/static/img/og/og-blog-nftas.png differ diff --git a/static/img/og/og-blog-nftmaker.png b/static/img/og/og-blog-nftmaker.png new file mode 100644 index 0000000000..1f89be8950 Binary files /dev/null and b/static/img/og/og-blog-nftmaker.png differ diff --git a/static/img/og/og-blog-nowpayments.png b/static/img/og/og-blog-nowpayments.png new file mode 100644 index 0000000000..3d45255a49 Binary files /dev/null and b/static/img/og/og-blog-nowpayments.png differ diff --git a/static/img/og/og-blog-on-the-rocks.png b/static/img/og/og-blog-on-the-rocks.png new file mode 100644 index 0000000000..2c9b17230d Binary files /dev/null and b/static/img/og/og-blog-on-the-rocks.png differ diff --git a/static/img/og/og-blog-strica.png b/static/img/og/og-blog-strica.png new file mode 100644 index 0000000000..0dc125fa63 Binary files /dev/null and b/static/img/og/og-blog-strica.png differ diff --git a/static/img/og/og-blog-tokhun.png b/static/img/og/og-blog-tokhun.png new file mode 100644 index 0000000000..35ad002aa7 Binary files /dev/null and b/static/img/og/og-blog-tokhun.png differ diff --git a/static/img/og/og-builder-tools.png b/static/img/og/og-builder-tools.png new file mode 100644 index 0000000000..9b9ee1fe99 Binary files /dev/null and b/static/img/og/og-builder-tools.png differ diff --git a/static/img/og/og-changelog.png b/static/img/og/og-changelog.png new file mode 100644 index 0000000000..40bb51c040 Binary files /dev/null and b/static/img/og/og-changelog.png differ diff --git a/static/img/og/og-developer-blog.png b/static/img/og/og-developer-blog.png new file mode 100644 index 0000000000..5d909f52c7 Binary files /dev/null and b/static/img/og/og-developer-blog.png differ diff --git a/static/img/og/og-developer-portal.png b/static/img/og/og-developer-portal.png new file mode 100644 index 0000000000..c7b2d32710 Binary files /dev/null and b/static/img/og/og-developer-portal.png differ diff --git a/static/img/og/og-getstarted-aiken.png b/static/img/og/og-getstarted-aiken.png new file mode 100644 index 0000000000..201460c99e Binary files /dev/null and b/static/img/og/og-getstarted-aiken.png differ diff --git a/static/img/og/og-getstarted-blockfrost.png b/static/img/og/og-getstarted-blockfrost.png new file mode 100644 index 0000000000..178aad719b Binary files /dev/null and b/static/img/og/og-getstarted-blockfrost.png differ diff --git a/static/img/og/og-getstarted-cardano-components.png b/static/img/og/og-getstarted-cardano-components.png new file mode 100644 index 0000000000..77319999f8 Binary files /dev/null and b/static/img/og/og-getstarted-cardano-components.png differ diff --git a/static/img/og/og-getstarted-cardano-wallet-js.png b/static/img/og/og-getstarted-cardano-wallet-js.png new file mode 100644 index 0000000000..2e5c22b412 Binary files /dev/null and b/static/img/og/og-getstarted-cardano-wallet-js.png differ diff --git a/static/img/og/og-getstarted-cardanocli-js.png b/static/img/og/og-getstarted-cardanocli-js.png new file mode 100644 index 0000000000..267788237f Binary files /dev/null and b/static/img/og/og-getstarted-cardanocli-js.png differ diff --git a/static/img/og/og-getstarted-cardanosharp-wallet.png b/static/img/og/og-getstarted-cardanosharp-wallet.png new file mode 100644 index 0000000000..03d3ee0fd9 Binary files /dev/null and b/static/img/og/og-getstarted-cardanosharp-wallet.png differ diff --git a/static/img/og/og-getstarted-cscli.png b/static/img/og/og-getstarted-cscli.png new file mode 100644 index 0000000000..89e130dc69 Binary files /dev/null and b/static/img/og/og-getstarted-cscli.png differ diff --git a/static/img/og/og-getstarted-dandelion-apis.png b/static/img/og/og-getstarted-dandelion-apis.png new file mode 100644 index 0000000000..d3b614fd79 Binary files /dev/null and b/static/img/og/og-getstarted-dandelion-apis.png differ diff --git a/static/img/og/og-getstarted-developer-community.png b/static/img/og/og-getstarted-developer-community.png new file mode 100644 index 0000000000..af81c0065f Binary files /dev/null and b/static/img/og/og-getstarted-developer-community.png differ diff --git a/static/img/og/og-getstarted-installing-cardano-node.png b/static/img/og/og-getstarted-installing-cardano-node.png new file mode 100644 index 0000000000..95cfb90b94 Binary files /dev/null and b/static/img/og/og-getstarted-installing-cardano-node.png differ diff --git a/static/img/og/og-getstarted-installing-cardano-wallet.png b/static/img/og/og-getstarted-installing-cardano-wallet.png new file mode 100644 index 0000000000..1d554c435b Binary files /dev/null and b/static/img/og/og-getstarted-installing-cardano-wallet.png differ diff --git a/static/img/og/og-getstarted-koios.png b/static/img/og/og-getstarted-koios.png new file mode 100644 index 0000000000..3ec5985fc6 Binary files /dev/null and b/static/img/og/og-getstarted-koios.png differ diff --git a/static/img/og/og-getstarted-mesh.png b/static/img/og/og-getstarted-mesh.png new file mode 100644 index 0000000000..b3874ceae3 Binary files /dev/null and b/static/img/og/og-getstarted-mesh.png differ diff --git a/static/img/og/og-getstarted-ogmios.png b/static/img/og/og-getstarted-ogmios.png new file mode 100644 index 0000000000..59481f38c6 Binary files /dev/null and b/static/img/og/og-getstarted-ogmios.png differ diff --git a/static/img/og/og-getstarted-overview.png b/static/img/og/og-getstarted-overview.png new file mode 100644 index 0000000000..69fee5b02c Binary files /dev/null and b/static/img/og/og-getstarted-overview.png differ diff --git a/static/img/og/og-getstarted-running-cardano-node.png b/static/img/og/og-getstarted-running-cardano-node.png new file mode 100644 index 0000000000..70cf4750fa Binary files /dev/null and b/static/img/og/og-getstarted-running-cardano-node.png differ diff --git a/static/img/og/og-getstarted-serialization-lib.png b/static/img/og/og-getstarted-serialization-lib.png new file mode 100644 index 0000000000..188f55c179 Binary files /dev/null and b/static/img/og/og-getstarted-serialization-lib.png differ diff --git a/static/img/og/og-getstarted-tangocrypto.png b/static/img/og/og-getstarted-tangocrypto.png new file mode 100644 index 0000000000..0145238cdc Binary files /dev/null and b/static/img/og/og-getstarted-tangocrypto.png differ diff --git a/static/img/og/og-getstarted-technical-concepts.png b/static/img/og/og-getstarted-technical-concepts.png new file mode 100644 index 0000000000..36f45ec727 Binary files /dev/null and b/static/img/og/og-getstarted-technical-concepts.png differ diff --git a/static/img/og/og-getstarted-testnets.png b/static/img/og/og-getstarted-testnets.png new file mode 100644 index 0000000000..b143a070f6 Binary files /dev/null and b/static/img/og/og-getstarted-testnets.png differ diff --git a/static/img/og/og-security-air-gap-environment.png b/static/img/og/og-security-air-gap-environment.png new file mode 100644 index 0000000000..0906ecbb00 Binary files /dev/null and b/static/img/og/og-security-air-gap-environment.png differ diff --git a/static/img/og/og-security-secure-transaction-workflow.png b/static/img/og/og-security-secure-transaction-workflow.png new file mode 100644 index 0000000000..fa5ede311f Binary files /dev/null and b/static/img/og/og-security-secure-transaction-workflow.png differ diff --git a/static/img/og/og-showcase.png b/static/img/og/og-showcase.png new file mode 100644 index 0000000000..63188610d5 Binary files /dev/null and b/static/img/og/og-showcase.png differ diff --git a/static/img/plu_ts-logo.svg b/static/img/plu_ts-logo.svg new file mode 100644 index 0000000000..e3a192d694 --- /dev/null +++ b/static/img/plu_ts-logo.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/stake-pool-course/loki-4-panels.png b/static/img/stake-pool-course/loki-4-panels.png new file mode 100644 index 0000000000..96a2f0aff1 Binary files /dev/null and b/static/img/stake-pool-course/loki-4-panels.png differ diff --git a/static/img/stake-pool-course/loki-add-dashboard.png b/static/img/stake-pool-course/loki-add-dashboard.png new file mode 100644 index 0000000000..de8335f420 Binary files /dev/null and b/static/img/stake-pool-course/loki-add-dashboard.png differ diff --git a/static/img/stake-pool-course/loki-explore-labels.png b/static/img/stake-pool-course/loki-explore-labels.png new file mode 100644 index 0000000000..a79eb0670e Binary files /dev/null and b/static/img/stake-pool-course/loki-explore-labels.png differ diff --git a/static/img/stake-pool-course/loki-explore-loki.png b/static/img/stake-pool-course/loki-explore-loki.png new file mode 100644 index 0000000000..5a54187476 Binary files /dev/null and b/static/img/stake-pool-course/loki-explore-loki.png differ diff --git a/static/img/stake-pool-course/loki-final-dashboard.png b/static/img/stake-pool-course/loki-final-dashboard.png new file mode 100644 index 0000000000..1be588ecfe Binary files /dev/null and b/static/img/stake-pool-course/loki-final-dashboard.png differ diff --git a/static/img/stake-pool-course/loki-grafana-configure-ip.png b/static/img/stake-pool-course/loki-grafana-configure-ip.png new file mode 100644 index 0000000000..4335f2bf43 Binary files /dev/null and b/static/img/stake-pool-course/loki-grafana-configure-ip.png differ diff --git a/static/img/stake-pool-course/loki-grafana-data-source-loki.png b/static/img/stake-pool-course/loki-grafana-data-source-loki.png new file mode 100644 index 0000000000..8634d9b07c Binary files /dev/null and b/static/img/stake-pool-course/loki-grafana-data-source-loki.png differ diff --git a/static/img/stake-pool-course/loki-grafana-datasource.png b/static/img/stake-pool-course/loki-grafana-datasource.png new file mode 100644 index 0000000000..fa4ffa8de2 Binary files /dev/null and b/static/img/stake-pool-course/loki-grafana-datasource.png differ diff --git a/static/img/stake-pool-course/loki-grafana-select-loki.png b/static/img/stake-pool-course/loki-grafana-select-loki.png new file mode 100644 index 0000000000..19a35c846e Binary files /dev/null and b/static/img/stake-pool-course/loki-grafana-select-loki.png differ diff --git a/static/img/stake-pool-course/loki-hot2cold.png b/static/img/stake-pool-course/loki-hot2cold.png new file mode 100644 index 0000000000..f3a6f2afa4 Binary files /dev/null and b/static/img/stake-pool-course/loki-hot2cold.png differ diff --git a/static/img/stake-pool-course/loki-labels.png b/static/img/stake-pool-course/loki-labels.png new file mode 100644 index 0000000000..2f21eb9fd1 Binary files /dev/null and b/static/img/stake-pool-course/loki-labels.png differ diff --git a/static/img/stake-pool-course/loki-select-loki.png b/static/img/stake-pool-course/loki-select-loki.png new file mode 100644 index 0000000000..3f15b12ff1 Binary files /dev/null and b/static/img/stake-pool-course/loki-select-loki.png differ diff --git a/static/img/stake-pool-course/loki-show-logs.png b/static/img/stake-pool-course/loki-show-logs.png new file mode 100644 index 0000000000..9c58d826ab Binary files /dev/null and b/static/img/stake-pool-course/loki-show-logs.png differ diff --git a/static/img/stake-pool-course/loki-test-relay1-explore.png b/static/img/stake-pool-course/loki-test-relay1-explore.png new file mode 100644 index 0000000000..a1af533c5d Binary files /dev/null and b/static/img/stake-pool-course/loki-test-relay1-explore.png differ diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..ee724a8e67 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,11402 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@algolia/autocomplete-core@npm:1.7.2": + version: 1.7.2 + resolution: "@algolia/autocomplete-core@npm:1.7.2" + dependencies: + "@algolia/autocomplete-shared": 1.7.2 + checksum: 7d3e879ac74f2d3fd6f80a01d6c05bd22264c428030396234112be7628a80d3a7c250613b2d4102f8ef63115be7b96d8d0231bdf8a02aa9b58873500aa61ffcc + languageName: node + linkType: hard + +"@algolia/autocomplete-preset-algolia@npm:1.7.2": + version: 1.7.2 + resolution: "@algolia/autocomplete-preset-algolia@npm:1.7.2" + dependencies: + "@algolia/autocomplete-shared": 1.7.2 + peerDependencies: + "@algolia/client-search": ">= 4.9.1 < 6" + algoliasearch: ">= 4.9.1 < 6" + checksum: 7120ce1d312dbe6d898a0cecd9b28e45f9162a2fd9208a4c4e2efa77027455ee083c11cb782196374da717e990d6ca362c286ace475db97916e52bd277061d77 + languageName: node + linkType: hard + +"@algolia/autocomplete-shared@npm:1.7.2": + version: 1.7.2 + resolution: "@algolia/autocomplete-shared@npm:1.7.2" + checksum: 8336cd1e79e56e3901196862ae17896c6e9542e269a05860ab72d869e35f17ab0f40ecbe35d1e34617cc70749d3f8323d09b347c443a7b7b2b126dddb44779aa + languageName: node + linkType: hard + +"@algolia/cache-browser-local-storage@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/cache-browser-local-storage@npm:4.14.2" + dependencies: + "@algolia/cache-common": 4.14.2 + checksum: e7d5f43ff01df5f21a2b5304b5d8f8ae25f2c6093e83e79556cb78ae07f342111ba77eba633b837b5b74a17293ea6a208acb1ade71782baafa9c2da7d58ee45c + languageName: node + linkType: hard + +"@algolia/cache-common@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/cache-common@npm:4.14.2" + checksum: 4fd04c714aee19f6eaaac4ae7e00e914a44473af9a84cf3c4260e436c6ea20f5590e05e9006d963372d84ce57268776811fcb929d79e0415b59d74779bd31ee7 + languageName: node + linkType: hard + +"@algolia/cache-in-memory@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/cache-in-memory@npm:4.14.2" + dependencies: + "@algolia/cache-common": 4.14.2 + checksum: d6981f812a368a38db21e52c98ec81a5c0eda5d896377f7bdcc04a0be1673ac9e184836d7973065fab84dc947a63fe959586468fc14b9a87e32f916959df6222 + languageName: node + linkType: hard + +"@algolia/client-account@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/client-account@npm:4.14.2" + dependencies: + "@algolia/client-common": 4.14.2 + "@algolia/client-search": 4.14.2 + "@algolia/transporter": 4.14.2 + checksum: 2e9eed5a4b8434775af87899bda8140d51eb2dd0cf08fc49370a4dc9541c220db9b241976dad14ae5d07a25f7ddafd9759a2eb462788f21a20f14e04968f98a4 + languageName: node + linkType: hard + +"@algolia/client-analytics@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/client-analytics@npm:4.14.2" + dependencies: + "@algolia/client-common": 4.14.2 + "@algolia/client-search": 4.14.2 + "@algolia/requester-common": 4.14.2 + "@algolia/transporter": 4.14.2 + checksum: 61874e026c9d08dd628da443b5b34d1a3bb707a0283e727d94ee6d61057631039c5cf6303e6234cc6fbe84ff71c2758f952b664277715ca5761819aec73e7aad + languageName: node + linkType: hard + +"@algolia/client-common@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/client-common@npm:4.14.2" + dependencies: + "@algolia/requester-common": 4.14.2 + "@algolia/transporter": 4.14.2 + checksum: da2be279ac51e1b43c02c6d2bbf0d9cc8b1cb3250ad10a803fca609bcfb8164a8adc21281b599fd8aa322c04deea77d2f07adcae1a363952559472e781e26c71 + languageName: node + linkType: hard + +"@algolia/client-personalization@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/client-personalization@npm:4.14.2" + dependencies: + "@algolia/client-common": 4.14.2 + "@algolia/requester-common": 4.14.2 + "@algolia/transporter": 4.14.2 + checksum: 0dd25c84a40fe9853d14fadc3c8893e84bee370b5a3eb6730afe816afe1f92b970096d2dfb68073f606fa074fdeb66c3a73811d9a9a9774af5311f34d939fd72 + languageName: node + linkType: hard + +"@algolia/client-search@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/client-search@npm:4.14.2" + dependencies: + "@algolia/client-common": 4.14.2 + "@algolia/requester-common": 4.14.2 + "@algolia/transporter": 4.14.2 + checksum: 2695bc9e8c98badb601b915dbb075dd92996af350b0e4915a7a3b7825bd45f20815534debcfcb51bb7f682ba5d09f3c41918edb36e0a7f7bb154d3b205825f65 + languageName: node + linkType: hard + +"@algolia/events@npm:^4.0.1": + version: 4.0.1 + resolution: "@algolia/events@npm:4.0.1" + checksum: 4f63943f4554cfcfed91d8b8c009a49dca192b81056d8c75e532796f64828cd69899852013e81ff3fff07030df8782b9b95c19a3da0845786bdfe22af42442c2 + languageName: node + linkType: hard + +"@algolia/logger-common@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/logger-common@npm:4.14.2" + checksum: a4000a98831d64c8d826ccece9f5f3a77bc000d93d74a7c6b51f186d3dfd96c0bb00934f70c69da8f3c4dfb9f30ce55ab59aca9ba79c3cc3e924597838a94429 + languageName: node + linkType: hard + +"@algolia/logger-console@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/logger-console@npm:4.14.2" + dependencies: + "@algolia/logger-common": 4.14.2 + checksum: 96c6209c7ef72cbc170b180f5b84c6523a5b6f4dea978c982577d2417eb19eb9c9ea3bc73089ced692a05bec141d66fd6d5401458d0aa162dbcace5017dbd127 + languageName: node + linkType: hard + +"@algolia/requester-browser-xhr@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/requester-browser-xhr@npm:4.14.2" + dependencies: + "@algolia/requester-common": 4.14.2 + checksum: 7d8666e21cd0d15dc2e25f6917464c2f98cf73e0d2fced94cc6a3c4e97a990b8b93d9531bbf6f3b1ff2342b9ce9760d1dcb64dbbf61a5f2c31fe4f42541deef2 + languageName: node + linkType: hard + +"@algolia/requester-common@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/requester-common@npm:4.14.2" + checksum: 7de4148a55db56fe2bf18c1359cccbc2f41031fe2bfbc945d75f143b854638c51e7ec2ef9c6dc69b38d5edb87cd096ce5d7087680da32825562db79026ea39cc + languageName: node + linkType: hard + +"@algolia/requester-node-http@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/requester-node-http@npm:4.14.2" + dependencies: + "@algolia/requester-common": 4.14.2 + checksum: 5f5fe8b040f73bd95c6bdb5b97396e078b629b2b4cd93fea671d545be375c79501c65296c34824f0ff8368b5b51edc7a6ad9e694b04223c1416dcda869c6f566 + languageName: node + linkType: hard + +"@algolia/transporter@npm:4.14.2": + version: 4.14.2 + resolution: "@algolia/transporter@npm:4.14.2" + dependencies: + "@algolia/cache-common": 4.14.2 + "@algolia/logger-common": 4.14.2 + "@algolia/requester-common": 4.14.2 + checksum: 72c72013f3edb4d4484e7a43fb3c2555646ab04f422249514ed0309e20f41f5563f4c4dcf5623ca64c293624ecc74f87acaf2d9820e8c829cb5de067bdfe0257 + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.1.0": + version: 2.2.0 + resolution: "@ampproject/remapping@npm:2.2.0" + dependencies: + "@jridgewell/gen-mapping": ^0.1.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.18.6, @babel/code-frame@npm:^7.8.3": + version: 7.18.6 + resolution: "@babel/code-frame@npm:7.18.6" + dependencies: + "@babel/highlight": ^7.18.6 + checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.0, @babel/compat-data@npm:^7.20.1": + version: 7.20.5 + resolution: "@babel/compat-data@npm:7.20.5" + checksum: 523790c43ef6388fae91d1ca9acf1ab0e1b22208dcd39c0e5e7a6adf0b48a133f1831be8d5931a72ecd48860f3e3fb777cb89840794abd8647a5c8e5cfab484e + languageName: node + linkType: hard + +"@babel/core@npm:7.12.9": + version: 7.12.9 + resolution: "@babel/core@npm:7.12.9" + 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 + checksum: 4d34eca4688214a4eb6bd5dde906b69a7824f17b931f52cd03628a8ac94d8fbe15565aebffdde106e974c8738cd64ac62c6a6060baa7139a06db1f18c4ff872d + languageName: node + linkType: hard + +"@babel/core@npm:^7.18.6, @babel/core@npm:^7.19.6": + version: 7.20.5 + resolution: "@babel/core@npm:7.20.5" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.5 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-module-transforms": ^7.20.2 + "@babel/helpers": ^7.20.5 + "@babel/parser": ^7.20.5 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.5 + "@babel/types": ^7.20.5 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.1 + semver: ^6.3.0 + checksum: 9547f1e6364bc58c3621e3b17ec17f0d034ff159e5a520091d9381608d40af3be4042dd27c20ad7d3e938422d75850ac56a3758d6801d65df701557af4bd244b + languageName: node + linkType: hard + +"@babel/generator@npm:^7.12.5, @babel/generator@npm:^7.18.7, @babel/generator@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/generator@npm:7.20.5" + dependencies: + "@babel/types": ^7.20.5 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: 31c10d1e122f08cf755a24bd6f5d197f47eceba03f1133759687d00ab72d210e60ba4011da42f368b6e9fa85cbfda7dc4adb9889c2c20cc5c34bb2d57c1deab7 + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: 88ccd15ced475ef2243fdd3b2916a29ea54c5db3cd0cfabf9d1d29ff6e63b7f7cd1c27264137d7a40ac2e978b9b9a542c332e78f40eb72abe737a7400788fc1b + languageName: node + linkType: hard + +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.18.6": + version: 7.18.9 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.18.9" + dependencies: + "@babel/helper-explode-assignable-expression": ^7.18.6 + "@babel/types": ^7.18.9 + checksum: b4bc214cb56329daff6cc18a7f7a26aeafb55a1242e5362f3d47fe3808421f8c7cd91fff95d6b9b7ccb67e14e5a67d944e49dbe026942bfcbfda19b1c72a8e72 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.0": + version: 7.20.0 + resolution: "@babel/helper-compilation-targets@npm:7.20.0" + dependencies: + "@babel/compat-data": ^7.20.0 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.21.3 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: bc183f2109648849c8fde0b3c5cf08adf2f7ad6dc617b546fd20f34c8ef574ee5ee293c8d1bd0ed0221212e8f5907cdc2c42097870f1dcc769a654107d82c95b + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.20.2, @babel/helper-create-class-features-plugin@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/helper-create-class-features-plugin@npm:7.20.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-member-expression-to-functions": ^7.18.9 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/helper-replace-supers": ^7.19.1 + "@babel/helper-split-export-declaration": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 51b0662cc44ae5fe3691ed552f97312006709ec3f5321a5e5b5a139a5743eaaf65987f30ee7c171af80ab77460fb57c1970b0b1583dd70d90b58e4433b117a1b + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.20.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + regexpu-core: ^5.2.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 7f29c3cb7447cca047b0d394f8ab98e4923d00e86a7afa56e5df9770c48ec107891505d2d1f06b720ecc94ed24bf58d90986cc35fe4a43b549eb7b7a5077b693 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.3.3": + version: 0.3.3 + resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" + dependencies: + "@babel/helper-compilation-targets": ^7.17.7 + "@babel/helper-plugin-utils": ^7.16.7 + debug: ^4.1.1 + lodash.debounce: ^4.0.8 + resolve: ^1.14.2 + semver: ^6.1.2 + peerDependencies: + "@babel/core": ^7.4.0-0 + checksum: 8e3fe75513302e34f6d92bd67b53890e8545e6c5bca8fe757b9979f09d68d7e259f6daea90dc9e01e332c4f8781bda31c5fe551c82a277f9bc0bec007aed497c + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-environment-visitor@npm:7.18.9" + checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 + languageName: node + linkType: hard + +"@babel/helper-explode-assignable-expression@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: 225cfcc3376a8799023d15dc95000609e9d4e7547b29528c7f7111a0e05493ffb12c15d70d379a0bb32d42752f340233c4115bded6d299bc0c3ab7a12be3d30f + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-function-name@npm:7.19.0" + dependencies: + "@babel/template": ^7.18.10 + "@babel/types": ^7.19.0 + checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-hoist-variables@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" + dependencies: + "@babel/types": ^7.18.9 + checksum: fcf8184e3b55051c4286b2cbedf0eccc781d0f3c9b5cbaba582eca19bf0e8d87806cdb7efc8554fcb969ceaf2b187d5ea748d40022d06ec7739fbb18c1b19a7a + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-module-imports@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.19.6, @babel/helper-module-transforms@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-module-transforms@npm:7.20.2" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.1 + "@babel/types": ^7.20.2 + checksum: 33a60ca115f6fce2c9d98e2a2e5649498aa7b23e2ae3c18745d7a021487708fc311458c33542f299387a0da168afccba94116e077f2cce49ae9e5ab83399e8a2 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: e518fe8418571405e21644cfb39cf694f30b6c47b10b006609a92469ae8b8775cbff56f0b19732343e2ea910641091c5a2dc73b56ceba04e116a33b0f8bd2fbd + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:7.10.4": + version: 7.10.4 + resolution: "@babel/helper-plugin-utils@npm:7.10.4" + checksum: 639ed8fc462b97a83226cee6bb081b1d77e7f73e8b033d2592ed107ee41d96601e321e5ea53a33e47469c7f1146b250a3dcda5ab873c7de162ab62120c341a41 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.20.2 + resolution: "@babel/helper-plugin-utils@npm:7.20.2" + checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.18.6, @babel/helper-remap-async-to-generator@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-wrap-function": ^7.18.9 + "@babel/types": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 4be6076192308671b046245899b703ba090dbe7ad03e0bea897bb2944ae5b88e5e85853c9d1f83f643474b54c578d8ac0800b80341a86e8538264a725fbbefec + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/helper-replace-supers@npm:7.19.1" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-member-expression-to-functions": ^7.18.9 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/traverse": ^7.19.1 + "@babel/types": ^7.19.0 + checksum: a0e4bf79ebe7d2bb5947169e47a0b4439c73fb0ec57d446cf3ea81b736721129ec373c3f94d2ebd2716b26dd65f8e6c083dac898170d42905e7ba815a2f52c25 + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.19.4, @babel/helper-simple-access@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-simple-access@npm:7.20.2" + dependencies: + "@babel/types": ^7.20.2 + checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.9": + version: 7.20.0 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" + dependencies: + "@babel/types": ^7.20.0 + checksum: 34da8c832d1c8a546e45d5c1d59755459ffe43629436707079989599b91e8c19e50e73af7a4bd09c95402d389266731b0d9c5f69e372d8ebd3a709c05c80d7dd + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-split-export-declaration@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/helper-string-parser@npm:7.19.4" + checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/helper-validator-identifier@npm:7.19.1" + checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-validator-option@npm:7.18.6" + checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.18.9": + version: 7.20.5 + resolution: "@babel/helper-wrap-function@npm:7.20.5" + dependencies: + "@babel/helper-function-name": ^7.19.0 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.5 + "@babel/types": ^7.20.5 + checksum: 11a6fc28334368a193a9cb3ad16f29cd7603bab958433efc82ebe59fa6556c227faa24f07ce43983f7a85df826f71d441638442c4315e90a554fe0a70ca5005b + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.20.5": + version: 7.20.6 + resolution: "@babel/helpers@npm:7.20.6" + dependencies: + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.5 + "@babel/types": ^7.20.5 + checksum: f03ec6eb2bf8dc7cdfe2569ee421fd9ba6c7bac6c862d90b608ccdd80281ebe858bc56ca175fc92b3ac50f63126b66bbd5ec86f9f361729289a20054518f1ac5 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/highlight@npm:7.18.6" + dependencies: + "@babel/helper-validator-identifier": ^7.18.6 + chalk: ^2.0.0 + js-tokens: ^4.0.0 + checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.12.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.18.8, @babel/parser@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/parser@npm:7.20.5" + bin: + parser: ./bin/babel-parser.js + checksum: e8d514ce0aa74d56725bd102919a49fa367afef9cd8208cf52f670f54b061c4672f51b4b7980058ab1f5fe73615fe4dc90720ab47bbcebae07ad08d667eda318 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 845bd280c55a6a91d232cfa54eaf9708ec71e594676fe705794f494bb8b711d833b752b59d1a5c154695225880c23dbc9cab0e53af16fd57807976cd3ff41b8d + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 + "@babel/plugin-proposal-optional-chaining": ^7.18.9 + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 93abb5cb179a13db171bfc2cdf79489598f43c50cc174f97a2b7bb1d44d24ade7109665a20cf4e317ad6c1c730f036f06478f7c7e789b4240be1abdb60d6452f + languageName: node + linkType: hard + +"@babel/plugin-proposal-async-generator-functions@npm:^7.20.1": + version: 7.20.1 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.1" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-remap-async-to-generator": ^7.18.9 + "@babel/plugin-syntax-async-generators": ^7.8.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 518483a68c5618932109913eb7316ed5e656c575cbd9d22667bc0451e35a1be45f8eaeb8e2065834b36c8a93c4840f78cebf8f1d067b07c422f7be16d58eca60 + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-properties@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-static-block@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-proposal-class-static-block@npm:7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + peerDependencies: + "@babel/core": ^7.12.0 + checksum: b8d7ae99ed5ad784f39e7820e3ac03841f91d6ed60ab4a98c61d6112253da36013e12807bae4ffed0ef3cb318e47debac112ed614e03b403fb8b075b09a828ee + languageName: node + linkType: hard + +"@babel/plugin-proposal-dynamic-import@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-proposal-dynamic-import@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 96b1c8a8ad8171d39e9ab106be33bde37ae09b22fb2c449afee9a5edf3c537933d79d963dcdc2694d10677cb96da739cdf1b53454e6a5deab9801f28a818bb2f + languageName: node + linkType: hard + +"@babel/plugin-proposal-export-namespace-from@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 84ff22bacc5d30918a849bfb7e0e90ae4c5b8d8b65f2ac881803d1cf9068dffbe53bd657b0e4bc4c20b4db301b1c85f1e74183cf29a0dd31e964bd4e97c363ef + languageName: node + linkType: hard + +"@babel/plugin-proposal-json-strings@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-proposal-json-strings@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-json-strings": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 25ba0e6b9d6115174f51f7c6787e96214c90dd4026e266976b248a2ed417fe50fddae72843ffb3cbe324014a18632ce5648dfac77f089da858022b49fd608cb3 + languageName: node + linkType: hard + +"@babel/plugin-proposal-logical-assignment-operators@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: dd87fa4a48c6408c5e85dbd6405a65cc8fe909e3090030df46df90df64cdf3e74007381a58ed87608778ee597eff7395d215274009bb3f5d8964b2db5557754f + languageName: node + linkType: hard + +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d + languageName: node + linkType: hard + +"@babel/plugin-proposal-numeric-separator@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f370ea584c55bf4040e1f78c80b4eeb1ce2e6aaa74f87d1a48266493c33931d0b6222d8cee3a082383d6bb648ab8d6b7147a06f974d3296ef3bc39c7851683ec + languageName: node + linkType: hard + +"@babel/plugin-proposal-object-rest-spread@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.12.1" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.0 + "@babel/plugin-transform-parameters": ^7.12.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 221a41630c9a7162bf0416c71695b3f7f38482078a1d0d3af7abdc4f07ea1c9feed890399158d56c1d0278c971fe6f565ce822e9351e4481f7d98e9ff735dced + languageName: node + linkType: hard + +"@babel/plugin-proposal-object-rest-spread@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.2" + dependencies: + "@babel/compat-data": ^7.20.1 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.20.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9764d1a4735fcd384fdb9b6c6ccb20d1bea2f88f648640d26ce5d9cd5880ce1e389d2f852d7bea7e86ff343726225dc16e1deb92c7b3dc5c5721ed905a602318 + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-catch-binding@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7b5b39fb5d8d6d14faad6cb68ece5eeb2fd550fb66b5af7d7582402f974f5bc3684641f7c192a5a57e0f59acfae4aada6786be1eba030881ddc590666eff4d1e + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-chaining@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f2db40e26172f07c50b635cb61e1f36165de3ba868fcf608d967642f0d044b7c6beb0e7ecf17cbd421144b99e1eae7ad6031ded92925343bb0ed1d08707b514f + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-methods@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 22d8502ee96bca99ad2c8393e8493e2b8d4507576dd054490fd8201a36824373440106f5b098b6d821b026c7e72b0424ff4aeca69ed5f42e48f029d3a156d5ad + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:^7.18.6": + version: 7.20.5 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.20.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.20.5 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 513b5e0e2c1b2846be5336cf680e932ae17924ef885aa1429e1a4f7924724bdd99b15f28d67187d0a006d5f18a0c4b61d96c3ecb4902fed3c8fe2f0abfc9753a + languageName: node + linkType: hard + +"@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": + version: 7.18.6 + resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8575ecb7ff24bf6c6e94808d5c84bb5a0c6dd7892b54f09f4646711ba0ee1e1668032b3c43e3e1dfec2c5716c302e851ac756c1645e15882d73df6ad21ae951 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.12.13": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 + languageName: node + linkType: hard + +"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd + languageName: node + linkType: hard + +"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.20.0": + version: 7.20.0 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.20.0" + dependencies: + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6a86220e0aae40164cd3ffaf80e7c076a1be02a8f3480455dddbae05fda8140f429290027604df7a11b3f3f124866e8a6d69dbfa1dda61ee7377b920ad144d5b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.12.1" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d4b9b589c484b2e0856799770f060dff34c67b24d7f4526f66309a0e0e9cf388a5c1f2c0da329d1973cc87d1b2cede8f3dc8facfac59e785d6393a003bcdd0f9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6d37ea972970195f1ffe1a54745ce2ae456e0ac6145fae9aa1480f297248b262ea6ebb93010eddb86ebfacb94f57c05a1fc5d232b9a67325b09060299d515c67 + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:7.8.3, @babel/plugin-syntax-object-rest-spread@npm:^7.8.0, @babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.20.0": + version: 7.20.0 + resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" + dependencies: + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 900f5c695755062b91eec74da6f9092f40b8fada099058b92576f1e23c55e9813ec437051893a9b3c05cefe39e8ac06303d4a91b384e1c03dd8dc1581ea11602 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.18.6" + dependencies: + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-remap-async-to-generator": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c2cca47468cf1aeefdc7ec35d670e195c86cee4de28a1970648c46a88ce6bd1806ef0bab27251b9e7fb791bb28a64dcd543770efd899f28ee5f7854e64e873d3 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0a0df61f94601e3666bf39f2cc26f5f7b22a94450fb93081edbed967bd752ce3f81d1227fefd3799f5ee2722171b5e28db61379234d1bb85b6ec689589f99d7e + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.20.2": + version: 7.20.5 + resolution: "@babel/plugin-transform-block-scoping@npm:7.20.5" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 03606bc6710c15cd4e4d1163e1cbab08799f852a5dd55a1f7e115032e9406ac9430ddc0cb6d09a51a4095446985640411f60683c6fcea9bc1a7b202462022e1c + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/plugin-transform-classes@npm:7.20.2" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-replace-supers": ^7.19.1 + "@babel/helper-split-export-declaration": ^7.18.6 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 57f3467a8eb7853cdb61cda963cfb6c6568ad276d77c9de2ff5a2194650010217aa318ef3733975537c6fb906b73a019afb6ea650b01852e7d2e1fab4034361b + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-computed-properties@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a6bfbea207827d77592628973c0e8cc3319db636506bdc6e81e21582de2e767890e6975b382d0511e9ec3773b9f43691185df90832883bbf9251f688d27fbc1d + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/plugin-transform-destructuring@npm:7.20.2" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 09033e09b28ca1b0d46a8d82f5a677b1d718a739b3c199886908c3ef1af23369317d0c429b21507d480ee82721c15892a9893be18e50ad6fc219e69312f4b097 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.4.4": + version: 7.18.6 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cbe5d7063eb8f8cca24cd4827bc97f5641166509e58781a5f8aa47fb3d2d786ce4506a30fca2e01f61f18792783a5cb5d96bf5434c3dd1ad0de8c9cc625a53da + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 220bf4a9fec5c4d4a7b1de38810350260e8ea08481bf78332a464a21256a95f0df8cd56025f346238f09b04f8e86d4158fafc9f4af57abaef31637e3b58bd4fe + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.18.6" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7f70222f6829c82a36005508d34ddbe6fd0974ae190683a8670dd6ff08669aaf51fef2209d7403f9bd543cb2d12b18458016c99a6ed0332ccedb3ea127b01229 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.18.8": + version: 7.18.8 + resolution: "@babel/plugin-transform-for-of@npm:7.18.8" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ca64c623cf0c7a80ab6f07ebd3e6e4ade95e2ae806696f70b43eafe6394fa8ce21f2b1ffdd15df2067f7363d2ecfe26472a97c6c774403d2163fa05f50c98f17 + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-function-name@npm:7.18.9" + dependencies: + "@babel/helper-compilation-targets": ^7.18.9 + "@babel/helper-function-name": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 62dd9c6cdc9714704efe15545e782ee52d74dc73916bf954b4d3bee088fb0ec9e3c8f52e751252433656c09f744b27b757fc06ed99bcde28e8a21600a1d8e597 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-literals@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3458dd2f1a47ac51d9d607aa18f3d321cbfa8560a985199185bed5a906bb0c61ba85575d386460bac9aed43fdd98940041fae5a67dff286f6f967707cff489f8 + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 35a3d04f6693bc6b298c05453d85ee6e41cc806538acb6928427e0e97ae06059f97d2f07d21495fcf5f70d3c13a242e2ecbd09d5c1fcb1b1a73ff528dcb0b695 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.19.6": + version: 7.19.6 + resolution: "@babel/plugin-transform-modules-amd@npm:7.19.6" + dependencies: + "@babel/helper-module-transforms": ^7.19.6 + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4236aad970025bc10c772c1589b1e2eab8b7681933bb5ffa6e395d4c1a52532b28c47c553e3011b4272ea81e5ab39fe969eb5349584e8390e59771055c467d42 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.19.6": + version: 7.19.6 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.19.6" + dependencies: + "@babel/helper-module-transforms": ^7.19.6 + "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-simple-access": ^7.19.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 85d46945ab5ba3fff89e962d560a5d40253f228b9659a697683db3de07c0236e8cd60e5eb41958007359951a42bc268bf32350fcdb5b4a86f58dff1e032c096e + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.19.6": + version: 7.19.6 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.19.6" + dependencies: + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-module-transforms": ^7.19.6 + "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-validator-identifier": ^7.19.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8526431cc81ea3eb232ad50862d0ed1cbb422b5251d14a8d6610d0ca0617f6e75f35179e98eb1235d0cccb980120350b9f112594e5646dd45378d41eaaf87342 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-modules-umd@npm:7.18.6" + dependencies: + "@babel/helper-module-transforms": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c3b6796c6f4579f1ba5ab0cdcc73910c1e9c8e1e773c507c8bb4da33072b3ae5df73c6d68f9126dab6e99c24ea8571e1563f8710d7c421fac1cde1e434c20153 + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.1": + version: 7.20.5 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.20.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.20.5 + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 528c95fb1087e212f17e1c6456df041b28a83c772b9c93d2e407c9d03b72182b0d9d126770c1d6e0b23aab052599ceaf25ed6a2c0627f4249be34a83f6fae853 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-new-target@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bd780e14f46af55d0ae8503b3cb81ca86dcc73ed782f177e74f498fff934754f9e9911df1f8f3bd123777eed7c1c1af4d66abab87c8daae5403e7719a6b845d1 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-object-super@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-replace-supers": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0fcb04e15deea96ae047c21cb403607d49f06b23b4589055993365ebd7a7d7541334f06bf9642e90075e66efce6ebaf1eb0ef066fbbab802d21d714f1aac3aef + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.20.1": + version: 7.20.5 + resolution: "@babel/plugin-transform-parameters@npm:7.20.5" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fa588b0d8551e3e0cfde5fcb9d63a7acd38da199bee1851dd7e2abb34b3d754684defb1209a5669ecf0076d3d17ddc375b3f107da770b550a30402e4b9d7aa2f + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-property-literals@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1c16e64de554703f4b547541de2edda6c01346dd3031d4d29e881aa7733785cd26d53611a4ccf5353f4d3e69097bb0111c0a93ace9e683edd94fea28c4484144 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-constant-elements@npm:^7.18.12": + version: 7.20.2 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.20.2" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7b041b726e7c14b8c26a0dd240defac5f93a1f449371c6bdc5e6b46d581211300cc1a79da4140bdf20347f49e175dcb4f469812399206864024d1fdc81171193 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-display-name@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-react-display-name@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 51c087ab9e41ef71a29335587da28417536c6f816c292e092ffc0e0985d2f032656801d4dd502213ce32481f4ba6c69402993ffa67f0818a07606ff811e4be49 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-development@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.18.6" + dependencies: + "@babel/plugin-transform-react-jsx": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec9fa65db66f938b75c45e99584367779ac3e0af8afc589187262e1337c7c4205ea312877813ae4df9fb93d766627b8968d74ac2ba702e4883b1dbbe4953ecee + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.18.6": + version: 7.19.0 + resolution: "@babel/plugin-transform-react-jsx@npm:7.19.0" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-plugin-utils": ^7.19.0 + "@babel/plugin-syntax-jsx": ^7.18.6 + "@babel/types": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d7d6f0b8f24b1f6b7cf8062c4e91c59af82489a993e51859bd49c2d62a2d2b77fd40b02a9a1d0e6d874cf4ce56a05fa3564b964587d00c94ebc62593524052ec + languageName: node + linkType: hard + +"@babel/plugin-transform-react-pure-annotations@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.18.6" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 97c4873d409088f437f9084d084615948198dd87fc6723ada0e7e29c5a03623c2f3e03df3f52e7e7d4d23be32a08ea00818bff302812e48713c706713bd06219 + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.18.6": + version: 7.20.5 + resolution: "@babel/plugin-transform-regenerator@npm:7.20.5" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + regenerator-transform: ^0.15.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 13164861e71fb23d84c6270ef5330b03c54d5d661c2c7468f28e21c4f8598558ca0c8c3cb1d996219352946e849d270a61372bc93c8fbe9676e78e3ffd0dea07 + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-reserved-words@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0738cdc30abdae07c8ec4b233b30c31f68b3ff0eaa40eddb45ae607c066127f5fa99ddad3c0177d8e2832e3a7d3ad115775c62b431ebd6189c40a951b867a80c + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.18.6": + version: 7.19.6 + resolution: "@babel/plugin-transform-runtime@npm:7.19.6" + dependencies: + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-plugin-utils": ^7.19.0 + babel-plugin-polyfill-corejs2: ^0.3.3 + babel-plugin-polyfill-corejs3: ^0.6.0 + babel-plugin-polyfill-regenerator: ^0.4.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ef93efbcbb00dcf4da6dcc55bda698a2a57fca3fb05a6a13e932ecfdb7c1c5d2f0b5b245c1c4faca0318853937caba0d82442f58b7653249f64275d08052fbd8 + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b8e4e8acc2700d1e0d7d5dbfd4fdfb935651913de6be36e6afb7e739d8f9ca539a5150075a0f9b79c88be25ddf45abb912fe7abf525f0b80f5b9d9860de685d7 + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-spread@npm:7.19.0" + dependencies: + "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e73a4deb095999185e70b524d0ff4e35df50fcda58299e700a6149a15bbc1a9b369ef1cef384e15a54b3c3ce316cc0f054dbf249dcd0d1ca59f4281dd4df9718 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 68ea18884ae9723443ffa975eb736c8c0d751265859cd3955691253f7fee37d7a0f7efea96c8a062876af49a257a18ea0ed5fea0d95a7b3611ce40f7ee23aee3 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-template-literals@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3d2fcd79b7c345917f69b92a85bdc3ddd68ce2c87dc70c7d61a8373546ccd1f5cb8adc8540b49dfba08e1b82bb7b3bbe23a19efdb2b9c994db2db42906ca9fb2 + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e754e0d8b8a028c52e10c148088606e3f7a9942c57bd648fc0438e5b4868db73c386a5ed47ab6d6f0594aae29ee5ffc2ffc0f7ebee7fae560a066d6dea811cd4 + languageName: node + linkType: hard + +"@babel/plugin-transform-typescript@npm:^7.18.6": + version: 7.20.2 + resolution: "@babel/plugin-transform-typescript@npm:7.20.2" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.20.2 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-typescript": ^7.20.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 14434eb77cb3c8c4187a055eabdd5ff8b3e90a37ac95ecc7c9007ea8fc5660e0652c445646a2a25836a02d91944e0dc1e8b58ef55b063a901e54a24fdb4168af + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.18.10": + version: 7.18.10 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.10" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f5baca55cb3c11bc08ec589f5f522d85c1ab509b4d11492437e45027d64ae0b22f0907bd1381e8d7f2a436384bb1f9ad89d19277314242c5c2671a0f91d0f9cd + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d9e18d57536a2d317fb0b7c04f8f55347f3cfacb75e636b4c6fa2080ab13a3542771b5120e726b598b815891fc606d1472ac02b749c69fd527b03847f22dc25e + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.18.6, @babel/preset-env@npm:^7.19.4": + version: 7.20.2 + resolution: "@babel/preset-env@npm:7.20.2" + dependencies: + "@babel/compat-data": ^7.20.1 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-validator-option": ^7.18.6 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 + "@babel/plugin-proposal-async-generator-functions": ^7.20.1 + "@babel/plugin-proposal-class-properties": ^7.18.6 + "@babel/plugin-proposal-class-static-block": ^7.18.6 + "@babel/plugin-proposal-dynamic-import": ^7.18.6 + "@babel/plugin-proposal-export-namespace-from": ^7.18.9 + "@babel/plugin-proposal-json-strings": ^7.18.6 + "@babel/plugin-proposal-logical-assignment-operators": ^7.18.9 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.18.6 + "@babel/plugin-proposal-numeric-separator": ^7.18.6 + "@babel/plugin-proposal-object-rest-spread": ^7.20.2 + "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 + "@babel/plugin-proposal-optional-chaining": ^7.18.9 + "@babel/plugin-proposal-private-methods": ^7.18.6 + "@babel/plugin-proposal-private-property-in-object": ^7.18.6 + "@babel/plugin-proposal-unicode-property-regex": ^7.18.6 + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-import-assertions": ^7.20.0 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-transform-arrow-functions": ^7.18.6 + "@babel/plugin-transform-async-to-generator": ^7.18.6 + "@babel/plugin-transform-block-scoped-functions": ^7.18.6 + "@babel/plugin-transform-block-scoping": ^7.20.2 + "@babel/plugin-transform-classes": ^7.20.2 + "@babel/plugin-transform-computed-properties": ^7.18.9 + "@babel/plugin-transform-destructuring": ^7.20.2 + "@babel/plugin-transform-dotall-regex": ^7.18.6 + "@babel/plugin-transform-duplicate-keys": ^7.18.9 + "@babel/plugin-transform-exponentiation-operator": ^7.18.6 + "@babel/plugin-transform-for-of": ^7.18.8 + "@babel/plugin-transform-function-name": ^7.18.9 + "@babel/plugin-transform-literals": ^7.18.9 + "@babel/plugin-transform-member-expression-literals": ^7.18.6 + "@babel/plugin-transform-modules-amd": ^7.19.6 + "@babel/plugin-transform-modules-commonjs": ^7.19.6 + "@babel/plugin-transform-modules-systemjs": ^7.19.6 + "@babel/plugin-transform-modules-umd": ^7.18.6 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.1 + "@babel/plugin-transform-new-target": ^7.18.6 + "@babel/plugin-transform-object-super": ^7.18.6 + "@babel/plugin-transform-parameters": ^7.20.1 + "@babel/plugin-transform-property-literals": ^7.18.6 + "@babel/plugin-transform-regenerator": ^7.18.6 + "@babel/plugin-transform-reserved-words": ^7.18.6 + "@babel/plugin-transform-shorthand-properties": ^7.18.6 + "@babel/plugin-transform-spread": ^7.19.0 + "@babel/plugin-transform-sticky-regex": ^7.18.6 + "@babel/plugin-transform-template-literals": ^7.18.9 + "@babel/plugin-transform-typeof-symbol": ^7.18.9 + "@babel/plugin-transform-unicode-escapes": ^7.18.10 + "@babel/plugin-transform-unicode-regex": ^7.18.6 + "@babel/preset-modules": ^0.1.5 + "@babel/types": ^7.20.2 + babel-plugin-polyfill-corejs2: ^0.3.3 + babel-plugin-polyfill-corejs3: ^0.6.0 + babel-plugin-polyfill-regenerator: ^0.4.1 + core-js-compat: ^3.25.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ece2d7e9c7789db6116e962b8e1a55eb55c110c44c217f0c8f6ffea4ca234954e66557f7bd019b7affadf7fbb3a53ccc807e93fc935aacd48146234b73b6947e + languageName: node + linkType: hard + +"@babel/preset-modules@npm:^0.1.5": + version: 0.1.5 + resolution: "@babel/preset-modules@npm:0.1.5" + 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 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8430e0e9e9d520b53e22e8c4c6a5a080a12b63af6eabe559c2310b187bd62ae113f3da82ba33e9d1d0f3230930ca702843aae9dd226dec51f7d7114dc1f51c10 + languageName: node + linkType: hard + +"@babel/preset-react@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/preset-react@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-validator-option": ^7.18.6 + "@babel/plugin-transform-react-display-name": ^7.18.6 + "@babel/plugin-transform-react-jsx": ^7.18.6 + "@babel/plugin-transform-react-jsx-development": ^7.18.6 + "@babel/plugin-transform-react-pure-annotations": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 540d9cf0a0cc0bb07e6879994e6fb7152f87dafbac880b56b65e2f528134c7ba33e0cd140b58700c77b2ebf4c81fa6468fed0ba391462d75efc7f8c1699bb4c3 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/preset-typescript@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-validator-option": ^7.18.6 + "@babel/plugin-transform-typescript": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7fe0da5103eb72d3cf39cf3e138a794c8cdd19c0b38e3e101507eef519c46a87a0d6d0e8bc9e28a13ea2364001ebe7430b9d75758aab4c3c3a8db9a487b9dc7c + languageName: node + linkType: hard + +"@babel/runtime-corejs3@npm:^7.18.6": + version: 7.20.6 + resolution: "@babel/runtime-corejs3@npm:7.20.6" + dependencies: + core-js-pure: ^3.25.1 + regenerator-runtime: ^0.13.11 + checksum: d533d432216509426c4f9dad56db2fe453112b7d738433111944372fba4abd0b07bee3261f19a218530b435de46592121b2a6a57b98c0c7c3452d552ba009c3e + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.8.4": + version: 7.20.6 + resolution: "@babel/runtime@npm:7.20.6" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: 42a8504db21031b1859fbc0f52d698a3d2f5ada9519eb76c6f96a7e657d8d555732a18fe71ef428a67cc9fc81ca0d3562fb7afdc70549c5fec343190cbaa9b03 + languageName: node + linkType: hard + +"@babel/template@npm:^7.12.7, @babel/template@npm:^7.18.10": + version: 7.18.10 + resolution: "@babel/template@npm:7.18.10" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/parser": ^7.18.10 + "@babel/types": ^7.18.10 + checksum: 93a6aa094af5f355a72bd55f67fa1828a046c70e46f01b1606e6118fa1802b6df535ca06be83cc5a5e834022be95c7b714f0a268b5f20af984465a71e28f1473 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.18.8, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.20.1, @babel/traverse@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/traverse@npm:7.20.5" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.5 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.20.5 + "@babel/types": ^7.20.5 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: c7fed468614aab1cf762dda5df26e2cfcd2b1b448c9d3321ac44786c4ee773fb0e10357e6593c3c6a648ae2e0be6d90462d855998dc10e3abae84de99291e008 + languageName: node + linkType: hard + +"@babel/types@npm:^7.12.7, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.20.5 + resolution: "@babel/types@npm:7.20.5" + dependencies: + "@babel/helper-string-parser": ^7.19.4 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: 773f0a1ad9f6ca5c5beaf751d1d8d81b9130de87689d1321fc911d73c3b1167326d66f0ae086a27fb5bfc8b4ee3ffebf1339be50d3b4d8015719692468c31f2d + languageName: node + linkType: hard + +"@colors/colors@npm:1.5.0": + version: 1.5.0 + resolution: "@colors/colors@npm:1.5.0" + checksum: d64d5260bed1d5012ae3fc617d38d1afc0329fec05342f4e6b838f46998855ba56e0a73833f4a80fa8378c84810da254f76a8a19c39d038260dc06dc4e007425 + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@docsearch/css@npm:3.3.0": + version: 3.3.0 + resolution: "@docsearch/css@npm:3.3.0" + checksum: 1cbf381fe0b454f933e736d04fe8a2d9f86c375022ef738b44d67a0b4c187b0d8fcb945a1ba5a404059e50e3968d9fe769de22779d071f6189f07c161239892c + languageName: node + linkType: hard + +"@docsearch/react@npm:^3.1.1": + version: 3.3.0 + resolution: "@docsearch/react@npm:3.3.0" + dependencies: + "@algolia/autocomplete-core": 1.7.2 + "@algolia/autocomplete-preset-algolia": 1.7.2 + "@docsearch/css": 3.3.0 + algoliasearch: ^4.0.0 + peerDependencies: + "@types/react": ">= 16.8.0 < 19.0.0" + react: ">= 16.8.0 < 19.0.0" + react-dom: ">= 16.8.0 < 19.0.0" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + react-dom: + optional: true + checksum: 2bc4aa649fad3ff74e61537e674e658903c01509b2835827943f23895b40b7697476399179d43bc721f7e72044c797d4d793fcdaa394ff4f9fca1389a197a78c + languageName: node + linkType: hard + +"@docusaurus/core@npm:2.3.1, @docusaurus/core@npm:^2.3.1": + version: 2.3.1 + resolution: "@docusaurus/core@npm:2.3.1" + dependencies: + "@babel/core": ^7.18.6 + "@babel/generator": ^7.18.7 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-transform-runtime": ^7.18.6 + "@babel/preset-env": ^7.18.6 + "@babel/preset-react": ^7.18.6 + "@babel/preset-typescript": ^7.18.6 + "@babel/runtime": ^7.18.6 + "@babel/runtime-corejs3": ^7.18.6 + "@babel/traverse": ^7.18.8 + "@docusaurus/cssnano-preset": 2.3.1 + "@docusaurus/logger": 2.3.1 + "@docusaurus/mdx-loader": 2.3.1 + "@docusaurus/react-loadable": 5.5.2 + "@docusaurus/utils": 2.3.1 + "@docusaurus/utils-common": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + "@slorber/static-site-generator-webpack-plugin": ^4.0.7 + "@svgr/webpack": ^6.2.1 + autoprefixer: ^10.4.7 + babel-loader: ^8.2.5 + babel-plugin-dynamic-import-node: ^2.3.3 + boxen: ^6.2.1 + chalk: ^4.1.2 + chokidar: ^3.5.3 + clean-css: ^5.3.0 + cli-table3: ^0.6.2 + combine-promises: ^1.1.0 + commander: ^5.1.0 + copy-webpack-plugin: ^11.0.0 + core-js: ^3.23.3 + css-loader: ^6.7.1 + css-minimizer-webpack-plugin: ^4.0.0 + cssnano: ^5.1.12 + del: ^6.1.1 + detect-port: ^1.3.0 + escape-html: ^1.0.3 + eta: ^2.0.0 + file-loader: ^6.2.0 + fs-extra: ^10.1.0 + html-minifier-terser: ^6.1.0 + html-tags: ^3.2.0 + html-webpack-plugin: ^5.5.0 + import-fresh: ^3.3.0 + leven: ^3.1.0 + lodash: ^4.17.21 + mini-css-extract-plugin: ^2.6.1 + postcss: ^8.4.14 + postcss-loader: ^7.0.0 + prompts: ^2.4.2 + react-dev-utils: ^12.0.1 + react-helmet-async: ^1.3.0 + react-loadable: "npm:@docusaurus/react-loadable@5.5.2" + react-loadable-ssr-addon-v5-slorber: ^1.0.1 + react-router: ^5.3.3 + react-router-config: ^5.1.1 + react-router-dom: ^5.3.3 + rtl-detect: ^1.0.4 + semver: ^7.3.7 + serve-handler: ^6.1.3 + shelljs: ^0.8.5 + terser-webpack-plugin: ^5.3.3 + tslib: ^2.4.0 + update-notifier: ^5.1.0 + url-loader: ^4.1.1 + wait-on: ^6.0.1 + webpack: ^5.73.0 + webpack-bundle-analyzer: ^4.5.0 + webpack-dev-server: ^4.9.3 + webpack-merge: ^5.8.0 + webpackbar: ^5.0.2 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + bin: + docusaurus: bin/docusaurus.mjs + checksum: 812aecae45af3f4d02fd16e89517ca9f1ba22821a078aaa890f5797ac7e0cc0c79e7623eb999e885cf7e7652a6ffda8ff7c06dfd85ca29aaab600993c3d9980d + languageName: node + linkType: hard + +"@docusaurus/cssnano-preset@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/cssnano-preset@npm:2.3.1" + dependencies: + cssnano-preset-advanced: ^5.3.8 + postcss: ^8.4.14 + postcss-sort-media-queries: ^4.2.1 + tslib: ^2.4.0 + checksum: a3d00ce86b16caffde36734bb2f4541d2c0df5e8ab6891a78ad05bccc631a895fecb04c385626ebcb8f905510c28fa6158288585673ae96565532d4ee4b60d4f + languageName: node + linkType: hard + +"@docusaurus/logger@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/logger@npm:2.3.1" + dependencies: + chalk: ^4.1.2 + tslib: ^2.4.0 + checksum: eff5f258aeac9c643431426256e3bc4515074cc3cc754fa643579ba427ba232ecace9a9579ae5af542330b22d7361892a1eaf84526983a0c821c5ca3ee895176 + languageName: node + linkType: hard + +"@docusaurus/lqip-loader@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/lqip-loader@npm:2.3.1" + dependencies: + "@docusaurus/logger": 2.3.1 + file-loader: ^6.2.0 + lodash: ^4.17.21 + sharp: ^0.30.7 + tslib: ^2.4.0 + checksum: 0097e02142873f3f5d08d9e0bb629ac1ee6ed1bbcc5da4e91d61f1e379d111d6ff164c26c5629f853032c48bd5bc83b0af76f76b4f3210828c864219002c0851 + languageName: node + linkType: hard + +"@docusaurus/mdx-loader@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/mdx-loader@npm:2.3.1" + dependencies: + "@babel/parser": ^7.18.8 + "@babel/traverse": ^7.18.8 + "@docusaurus/logger": 2.3.1 + "@docusaurus/utils": 2.3.1 + "@mdx-js/mdx": ^1.6.22 + escape-html: ^1.0.3 + file-loader: ^6.2.0 + fs-extra: ^10.1.0 + image-size: ^1.0.1 + mdast-util-to-string: ^2.0.0 + remark-emoji: ^2.2.0 + stringify-object: ^3.3.0 + tslib: ^2.4.0 + unified: ^9.2.2 + unist-util-visit: ^2.0.3 + url-loader: ^4.1.1 + webpack: ^5.73.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: 4a1c9ef0e8506ab4d9cb4714ff7437664e238e0f2878a5eb4a2e082897bbee7ae8d0b61ba9d45ffa820beb5ce75aa0050201db815b00c18fc136aaa4c6411c21 + languageName: node + linkType: hard + +"@docusaurus/module-type-aliases@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/module-type-aliases@npm:2.3.1" + dependencies: + "@docusaurus/react-loadable": 5.5.2 + "@docusaurus/types": 2.3.1 + "@types/history": ^4.7.11 + "@types/react": "*" + "@types/react-router-config": "*" + "@types/react-router-dom": "*" + react-helmet-async: "*" + react-loadable: "npm:@docusaurus/react-loadable@5.5.2" + peerDependencies: + react: "*" + react-dom: "*" + checksum: 74f799f81455dc8ff3e6edf07428996764014c2c7b416e6b5d160af15f00ad3aa1ab75dee5356645ec7f2ea832fb2aca6e9a32b19d64abeb9e3d57c4195f1e50 + languageName: node + linkType: hard + +"@docusaurus/plugin-client-redirects@npm:^2.3.1": + version: 2.3.1 + resolution: "@docusaurus/plugin-client-redirects@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/logger": 2.3.1 + "@docusaurus/utils": 2.3.1 + "@docusaurus/utils-common": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + eta: ^2.0.0 + fs-extra: ^10.1.0 + lodash: ^4.17.21 + tslib: ^2.4.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: bb730359c7f9015108a3d4ec8a570e9c73847349747bf71711f522a7dc40007786b7cd25cebc845eeb16b3505e8068242559a2eda790f4c07d4083d9014a6f84 + languageName: node + linkType: hard + +"@docusaurus/plugin-content-blog@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/plugin-content-blog@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/logger": 2.3.1 + "@docusaurus/mdx-loader": 2.3.1 + "@docusaurus/types": 2.3.1 + "@docusaurus/utils": 2.3.1 + "@docusaurus/utils-common": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + cheerio: ^1.0.0-rc.12 + feed: ^4.2.2 + fs-extra: ^10.1.0 + lodash: ^4.17.21 + reading-time: ^1.5.0 + tslib: ^2.4.0 + unist-util-visit: ^2.0.3 + utility-types: ^3.10.0 + webpack: ^5.73.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: abc668ceab15269f57be7f74acbec2e139b4f6b90af8771d246a9036d124b49b0d9fd4890e9566df7a4ba960f2da0316c18741eed1be0646f2b4602465219ddd + languageName: node + linkType: hard + +"@docusaurus/plugin-content-docs@npm:2.3.1, @docusaurus/plugin-content-docs@npm:^2.3.1": + version: 2.3.1 + resolution: "@docusaurus/plugin-content-docs@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/logger": 2.3.1 + "@docusaurus/mdx-loader": 2.3.1 + "@docusaurus/module-type-aliases": 2.3.1 + "@docusaurus/types": 2.3.1 + "@docusaurus/utils": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + "@types/react-router-config": ^5.0.6 + combine-promises: ^1.1.0 + fs-extra: ^10.1.0 + import-fresh: ^3.3.0 + js-yaml: ^4.1.0 + lodash: ^4.17.21 + tslib: ^2.4.0 + utility-types: ^3.10.0 + webpack: ^5.73.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: bcf8d921407d11b497926a1f61a1dc8c96f82fbe5a1959cc106b082e555f8fb6f42cf9262a658acf33d9543e5eb3e778049d91f71e4a2855993dc759c845cf31 + languageName: node + linkType: hard + +"@docusaurus/plugin-content-pages@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/plugin-content-pages@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/mdx-loader": 2.3.1 + "@docusaurus/types": 2.3.1 + "@docusaurus/utils": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + fs-extra: ^10.1.0 + tslib: ^2.4.0 + webpack: ^5.73.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: 8543050ed7330f54a28c0daeef11662eed3f3a08a6d0015b1a32db3d5e9ec46f0c6a8a5a4cb3e871ce953074d60424cc418b7ffa280695294626855a7a1a146a + languageName: node + linkType: hard + +"@docusaurus/plugin-debug@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/plugin-debug@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/types": 2.3.1 + "@docusaurus/utils": 2.3.1 + fs-extra: ^10.1.0 + react-json-view: ^1.21.3 + tslib: ^2.4.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: e660575f900eedbeab6e222eb4f8ef6a7a49815c91a97839a4839737c0b3101698bf7c6e035cbafaa49010340010a9ec0d37270dc81a470b3bae42662c7a24b8 + languageName: node + linkType: hard + +"@docusaurus/plugin-google-analytics@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/plugin-google-analytics@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/types": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + tslib: ^2.4.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: 9306ae89cd5fb8ca86fd58809d7e624f988411d8908a151e9b6d9e8d0b84e08f1e3eba46024bc4321bcaeb3e9bc38e919b0bcf561adc9d40fa97c8ffeb232888 + languageName: node + linkType: hard + +"@docusaurus/plugin-google-gtag@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/plugin-google-gtag@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/types": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + tslib: ^2.4.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: 494f0405d79aa9cb36d1ea4cf739499ad15b59fe876573ab5b304b5e84ab6ef4d428ebdc26647777b0816af452f62959b5ddb25e5bbf73c7fb3d6568258980d0 + languageName: node + linkType: hard + +"@docusaurus/plugin-google-tag-manager@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/plugin-google-tag-manager@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/types": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + tslib: ^2.4.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: d0b2ccc212652bb4f1c1bd61420e7f235325d4f2e8de0f5b25282305f54209d05da981c1253325bcae9afbc7575bd5c246d037d2be5fbda06f2842ba8335ab47 + languageName: node + linkType: hard + +"@docusaurus/plugin-ideal-image@npm:^2.3.1": + version: 2.3.1 + resolution: "@docusaurus/plugin-ideal-image@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/lqip-loader": 2.3.1 + "@docusaurus/responsive-loader": ^1.7.0 + "@docusaurus/theme-translations": 2.3.1 + "@docusaurus/types": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + "@endiliey/react-ideal-image": ^0.0.11 + react-waypoint: ^10.3.0 + sharp: ^0.30.7 + tslib: ^2.4.0 + webpack: ^5.73.0 + peerDependencies: + jimp: "*" + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + peerDependenciesMeta: + jimp: + optional: true + checksum: 7ff98d612c29e3242f5bb8222da8101a2b8e45aa46fa73f56ad1a3b841ad9f9e9a63a32f2e7a3a38e08dbbae0280f458a35b995c7012fe3ef8d82c428940c3b0 + languageName: node + linkType: hard + +"@docusaurus/plugin-sitemap@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/plugin-sitemap@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/logger": 2.3.1 + "@docusaurus/types": 2.3.1 + "@docusaurus/utils": 2.3.1 + "@docusaurus/utils-common": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + fs-extra: ^10.1.0 + sitemap: ^7.1.1 + tslib: ^2.4.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: 667d2abbf46efffc4d20e38fe435a19392f07726446193a017306652ee9db3d478e971eefb209e1a5c243b6b82af3de72d4b975b8e74aa93bda4711ce8c309bc + languageName: node + linkType: hard + +"@docusaurus/preset-classic@npm:^2.3.1": + version: 2.3.1 + resolution: "@docusaurus/preset-classic@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/plugin-content-blog": 2.3.1 + "@docusaurus/plugin-content-docs": 2.3.1 + "@docusaurus/plugin-content-pages": 2.3.1 + "@docusaurus/plugin-debug": 2.3.1 + "@docusaurus/plugin-google-analytics": 2.3.1 + "@docusaurus/plugin-google-gtag": 2.3.1 + "@docusaurus/plugin-google-tag-manager": 2.3.1 + "@docusaurus/plugin-sitemap": 2.3.1 + "@docusaurus/theme-classic": 2.3.1 + "@docusaurus/theme-common": 2.3.1 + "@docusaurus/theme-search-algolia": 2.3.1 + "@docusaurus/types": 2.3.1 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: e4128a1bcb64d5ced04a281476ec1ae2d5523040d41ed57a8f744fb83659a2a2be902e94989de69ab1e6d693ec26c60d1ef6b2fe3ec96d5af6c9b3ef58f5b0cd + languageName: node + linkType: hard + +"@docusaurus/react-loadable@npm:5.5.2, react-loadable@npm:@docusaurus/react-loadable@5.5.2": + version: 5.5.2 + resolution: "@docusaurus/react-loadable@npm:5.5.2" + dependencies: + "@types/react": "*" + prop-types: ^15.6.2 + peerDependencies: + react: "*" + checksum: 930fb9e2936412a12461f210acdc154a433283921ca43ac3fc3b84cb6c12eb738b3a3719373022bf68004efeb1a928dbe36c467d7a1f86454ed6241576d936e7 + languageName: node + linkType: hard + +"@docusaurus/responsive-loader@npm:^1.7.0": + version: 1.7.0 + resolution: "@docusaurus/responsive-loader@npm:1.7.0" + dependencies: + loader-utils: ^2.0.0 + peerDependencies: + jimp: "*" + sharp: "*" + peerDependenciesMeta: + jimp: + optional: true + sharp: + optional: true + checksum: 4ba5286246b67cac89ef9a23671e4c8ab50675c9b651d8ed17888d879af52ba37c8b373b6cfa42ed0b82c7bace3a371106b4d60ebe45e1119ec2bdf0591df909 + languageName: node + linkType: hard + +"@docusaurus/theme-classic@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/theme-classic@npm:2.3.1" + dependencies: + "@docusaurus/core": 2.3.1 + "@docusaurus/mdx-loader": 2.3.1 + "@docusaurus/module-type-aliases": 2.3.1 + "@docusaurus/plugin-content-blog": 2.3.1 + "@docusaurus/plugin-content-docs": 2.3.1 + "@docusaurus/plugin-content-pages": 2.3.1 + "@docusaurus/theme-common": 2.3.1 + "@docusaurus/theme-translations": 2.3.1 + "@docusaurus/types": 2.3.1 + "@docusaurus/utils": 2.3.1 + "@docusaurus/utils-common": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + "@mdx-js/react": ^1.6.22 + clsx: ^1.2.1 + copy-text-to-clipboard: ^3.0.1 + infima: 0.2.0-alpha.42 + lodash: ^4.17.21 + nprogress: ^0.2.0 + postcss: ^8.4.14 + prism-react-renderer: ^1.3.5 + prismjs: ^1.28.0 + react-router-dom: ^5.3.3 + rtlcss: ^3.5.0 + tslib: ^2.4.0 + utility-types: ^3.10.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: 273812924fc29b2316aff554ae0302509ebeaca5aa829b58253e74d22a66e69444f1c324a2d5e8e170e6c6f27dd0d6927e6c6a22a7e0c14567ff777d04a5b0c1 + languageName: node + linkType: hard + +"@docusaurus/theme-common@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/theme-common@npm:2.3.1" + dependencies: + "@docusaurus/mdx-loader": 2.3.1 + "@docusaurus/module-type-aliases": 2.3.1 + "@docusaurus/plugin-content-blog": 2.3.1 + "@docusaurus/plugin-content-docs": 2.3.1 + "@docusaurus/plugin-content-pages": 2.3.1 + "@docusaurus/utils": 2.3.1 + "@types/history": ^4.7.11 + "@types/react": "*" + "@types/react-router-config": "*" + clsx: ^1.2.1 + parse-numeric-range: ^1.3.0 + prism-react-renderer: ^1.3.5 + tslib: ^2.4.0 + use-sync-external-store: ^1.2.0 + utility-types: ^3.10.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: 6b902e9e782721c3c49bcdee5d969ea1c1138ebcb03891e34f827b16f2c06f43a86d95f240a60ed084539e9b16435312a41be7bff4e724f4fb209998dd4d3a59 + languageName: node + linkType: hard + +"@docusaurus/theme-search-algolia@npm:2.3.1, @docusaurus/theme-search-algolia@npm:^2.3.1": + version: 2.3.1 + resolution: "@docusaurus/theme-search-algolia@npm:2.3.1" + dependencies: + "@docsearch/react": ^3.1.1 + "@docusaurus/core": 2.3.1 + "@docusaurus/logger": 2.3.1 + "@docusaurus/plugin-content-docs": 2.3.1 + "@docusaurus/theme-common": 2.3.1 + "@docusaurus/theme-translations": 2.3.1 + "@docusaurus/utils": 2.3.1 + "@docusaurus/utils-validation": 2.3.1 + algoliasearch: ^4.13.1 + algoliasearch-helper: ^3.10.0 + clsx: ^1.2.1 + eta: ^2.0.0 + fs-extra: ^10.1.0 + lodash: ^4.17.21 + tslib: ^2.4.0 + utility-types: ^3.10.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: 965303068e43b11f58d20b95bb6dfc01d5e575c2070d2730b94303bd2a1d33794075cae43bfe472f08061bd8770f14c8eb54932274e6b39f954ab34e7cfc5689 + languageName: node + linkType: hard + +"@docusaurus/theme-translations@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/theme-translations@npm:2.3.1" + dependencies: + fs-extra: ^10.1.0 + tslib: ^2.4.0 + checksum: dd3796be63c4c946af789c3da18ed2704a2fa90d8e752ba2b780a124dc13369ba590218afad0ac4ea2342f7331ccb9eb1be086226c950b8384978d94a15c57ad + languageName: node + linkType: hard + +"@docusaurus/types@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/types@npm:2.3.1" + dependencies: + "@types/history": ^4.7.11 + "@types/react": "*" + commander: ^5.1.0 + joi: ^17.6.0 + react-helmet-async: ^1.3.0 + utility-types: ^3.10.0 + webpack: ^5.73.0 + webpack-merge: ^5.8.0 + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: 91e52f37b97964112aa0d50ee4a6f534d7da941443af5ddc96418817c6ce532a98c73e67045ac703b582c7ed703ebb360205eec30da7f738c0105f2b3ae1a246 + languageName: node + linkType: hard + +"@docusaurus/utils-common@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/utils-common@npm:2.3.1" + dependencies: + tslib: ^2.4.0 + peerDependencies: + "@docusaurus/types": "*" + peerDependenciesMeta: + "@docusaurus/types": + optional: true + checksum: 405dc5b8aba9a97b2670ba8ff3911bbdaed274edc15214ab482a7159a07ad1c9b3198835a7bee42de4e0320d42bd402ed89ae6896744a364d64d89d9f78bcfb0 + languageName: node + linkType: hard + +"@docusaurus/utils-validation@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/utils-validation@npm:2.3.1" + dependencies: + "@docusaurus/logger": 2.3.1 + "@docusaurus/utils": 2.3.1 + joi: ^17.6.0 + js-yaml: ^4.1.0 + tslib: ^2.4.0 + checksum: 1e5529d1d0c4fcd9006adf2e5b545458a7dba3877563fb444dcec472f27a3d8492d4c6fb5dd1071bb6e668a13a845d74b8f6c4b6387babfa0e467a9b8b237fda + languageName: node + linkType: hard + +"@docusaurus/utils@npm:2.3.1": + version: 2.3.1 + resolution: "@docusaurus/utils@npm:2.3.1" + dependencies: + "@docusaurus/logger": 2.3.1 + "@svgr/webpack": ^6.2.1 + escape-string-regexp: ^4.0.0 + file-loader: ^6.2.0 + fs-extra: ^10.1.0 + github-slugger: ^1.4.0 + globby: ^11.1.0 + gray-matter: ^4.0.3 + js-yaml: ^4.1.0 + lodash: ^4.17.21 + micromatch: ^4.0.5 + resolve-pathname: ^3.0.0 + shelljs: ^0.8.5 + tslib: ^2.4.0 + url-loader: ^4.1.1 + webpack: ^5.73.0 + peerDependencies: + "@docusaurus/types": "*" + peerDependenciesMeta: + "@docusaurus/types": + optional: true + checksum: e8bce9bbd98bf63664fcd7c0a5f8dec30dad31ed19e18d724b43189b04ecdc1174537e1d987293575ec18d421236fb92d3d39d28477e921507260a39c3f6d6d0 + languageName: node + linkType: hard + +"@endiliey/react-ideal-image@npm:^0.0.11": + version: 0.0.11 + resolution: "@endiliey/react-ideal-image@npm:0.0.11" + peerDependencies: + prop-types: ">=15" + react: ">=0.14.x" + react-waypoint: ">=9.0.2" + checksum: 81f7bf641a982db7937aa09a1910ab45a0d1d7777411dc37972636a28ce8afc889d858d63a80b2951f3de1f52d0a2e408d6f3590df5404bc3b66b64289fd01cf + languageName: node + linkType: hard + +"@gar/promisify@npm:^1.1.3": + version: 1.1.3 + resolution: "@gar/promisify@npm:1.1.3" + checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 + languageName: node + linkType: hard + +"@hapi/hoek@npm:^9.0.0": + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 + languageName: node + linkType: hard + +"@hapi/topo@npm:^5.0.0": + version: 5.1.0 + resolution: "@hapi/topo@npm:5.1.0" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.0.0": + version: 29.0.0 + resolution: "@jest/schemas@npm:29.0.0" + dependencies: + "@sinclair/typebox": ^0.24.1 + checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb + languageName: node + linkType: hard + +"@jest/types@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/types@npm:29.3.1" + dependencies: + "@jest/schemas": ^29.0.0 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 6f9faf27507b845ff3839c1adc6dbd038d7046d03d37e84c9fc956f60718711a801a5094c7eeee6b39ccf42c0ab61347fdc0fa49ab493ae5a8efd2fd41228ee8 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.1.0": + version: 0.1.1 + resolution: "@jridgewell/gen-mapping@npm:0.1.1" + dependencies: + "@jridgewell/set-array": ^1.0.0 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/gen-mapping@npm:0.3.2" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:3.1.0, @jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/source-map@npm:0.3.2" + dependencies: + "@jridgewell/gen-mapping": ^0.3.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1b83f0eb944e77b70559a394d5d3b3f98a81fcc186946aceb3ef42d036762b52ef71493c6c0a3b7c1d2f08785f53ba2df1277fe629a06e6109588ff4cdcf7482 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.14, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.17 + resolution: "@jridgewell/trace-mapping@npm:0.3.17" + dependencies: + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 + languageName: node + linkType: hard + +"@leichtgewicht/ip-codec@npm:^2.0.1": + version: 2.0.4 + resolution: "@leichtgewicht/ip-codec@npm:2.0.4" + checksum: 468de1f04d33de6d300892683d7c8aecbf96d1e2c5fe084f95f816e50a054d45b7c1ebfb141a1447d844b86a948733f6eebd92234da8581c84a1ad4de2946a2d + languageName: node + linkType: hard + +"@mdx-js/mdx@npm:^1.6.22": + version: 1.6.22 + resolution: "@mdx-js/mdx@npm:1.6.22" + 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 + checksum: 0839b4a3899416326ea6578fe9e470af319da559bc6d3669c60942e456b49a98eebeb3358c623007b4786a2175a450d2c51cd59df64639013c5a3d22366931a6 + languageName: node + linkType: hard + +"@mdx-js/react@npm:^1.6.22": + version: 1.6.22 + resolution: "@mdx-js/react@npm:1.6.22" + peerDependencies: + react: ^16.13.1 || ^17.0.0 + checksum: bc84bd514bc127f898819a0c6f1a6915d9541011bd8aefa1fcc1c9bea8939f31051409e546bdec92babfa5b56092a16d05ef6d318304ac029299df5181dc94c8 + languageName: node + linkType: hard + +"@mdx-js/util@npm:1.6.22": + version: 1.6.22 + resolution: "@mdx-js/util@npm:1.6.22" + checksum: 4b393907e39a1a75214f0314bf72a0adfa5e5adffd050dd5efe9c055b8549481a3cfc9f308c16dfb33311daf3ff63added7d5fd1fe52db614c004f886e0e559a + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^2.1.0": + version: 2.1.2 + resolution: "@npmcli/fs@npm:2.1.2" + dependencies: + "@gar/promisify": ^1.1.3 + semver: ^7.3.5 + checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 + languageName: node + linkType: hard + +"@npmcli/move-file@npm:^2.0.0": + version: 2.0.1 + resolution: "@npmcli/move-file@npm:2.0.1" + dependencies: + mkdirp: ^1.0.4 + rimraf: ^3.0.2 + checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 + languageName: node + linkType: hard + +"@polka/url@npm:^1.0.0-next.20": + version: 1.0.0-next.21 + resolution: "@polka/url@npm:1.0.0-next.21" + checksum: c7654046d38984257dd639eab3dc770d1b0340916097b2fac03ce5d23506ada684e05574a69b255c32ea6a144a957c8cd84264159b545fca031c772289d88788 + languageName: node + linkType: hard + +"@popperjs/core@npm:^2.11.2": + version: 2.11.6 + resolution: "@popperjs/core@npm:2.11.6" + checksum: 47fb328cec1924559d759b48235c78574f2d71a8a6c4c03edb6de5d7074078371633b91e39bbf3f901b32aa8af9b9d8f82834856d2f5737a23475036b16817f0 + languageName: node + linkType: hard + +"@sideway/address@npm:^4.1.3": + version: 4.1.4 + resolution: "@sideway/address@npm:4.1.4" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: b9fca2a93ac2c975ba12e0a6d97853832fb1f4fb02393015e012b47fa916a75ca95102d77214b2a29a2784740df2407951af8c5dde054824c65577fd293c4cdb + languageName: node + linkType: hard + +"@sideway/formula@npm:^3.0.0": + version: 3.0.0 + resolution: "@sideway/formula@npm:3.0.0" + checksum: 8ae26a0ed6bc84f7310be6aae6eb9d81e97f382619fc69025d346871a707eaab0fa38b8c857e3f0c35a19923de129f42d35c50b8010c928d64aab41578580ec4 + languageName: node + linkType: hard + +"@sideway/pinpoint@npm:^2.0.0": + version: 2.0.0 + resolution: "@sideway/pinpoint@npm:2.0.0" + checksum: 0f4491e5897fcf5bf02c46f5c359c56a314e90ba243f42f0c100437935daa2488f20482f0f77186bd6bf43345095a95d8143ecf8b1f4d876a7bc0806aba9c3d2 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.24.1": + version: 0.24.51 + resolution: "@sinclair/typebox@npm:0.24.51" + checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 + languageName: node + linkType: hard + +"@sindresorhus/is@npm:^0.14.0": + version: 0.14.0 + resolution: "@sindresorhus/is@npm:0.14.0" + checksum: 971e0441dd44ba3909b467219a5e242da0fc584048db5324cfb8048148fa8dcc9d44d71e3948972c4f6121d24e5da402ef191420d1266a95f713bb6d6e59c98a + languageName: node + linkType: hard + +"@slorber/static-site-generator-webpack-plugin@npm:^4.0.7": + version: 4.0.7 + resolution: "@slorber/static-site-generator-webpack-plugin@npm:4.0.7" + dependencies: + eval: ^0.1.8 + p-map: ^4.0.0 + webpack-sources: ^3.2.2 + checksum: a1e1d8b22dd51059524993f3fdd6861db10eb950debc389e5dd650702287fa2004eace03e6bc8f25b977bd7bc01d76a50aa271cbb73c58a8ec558945d728f307 + languageName: node + linkType: hard + +"@svgr/babel-plugin-add-jsx-attribute@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:6.5.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cab83832830a57735329ed68f67c03b57ca21fa037b0134847b0c5c0ef4beca89956d7dacfbf7b2a10fd901e7009e877512086db2ee918b8c69aee7742ae32c0 + languageName: node + linkType: hard + +"@svgr/babel-plugin-remove-jsx-attribute@npm:*": + version: 6.5.0 + resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:6.5.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7a4dfc1345f5855b010684e9c5301731842bf91d72b82ce5cc4c82c80b94de1036e447a8a00fb306a6dd575cb4c640d8ce3cfee6607ddbb804796a77284c7f22 + languageName: node + linkType: hard + +"@svgr/babel-plugin-remove-jsx-empty-expression@npm:*": + version: 6.5.0 + resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:6.5.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3e173f720d530f9f71f8506f3eb78583eec3d87d66e385efe1ef3b3ebfc4e3680ec30f36414726de6a163e99ca69f54886022967e49476dea522267e1986936e + languageName: node + linkType: hard + +"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:6.5.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b7d2125758e766e1ebd14b92216b800bdc976959bc696dbfa1e28682919147c1df4bb8b1b5fd037d7a83026e27e681fea3b8d3741af8d3cf4c9dfa3d412125df + languageName: node + linkType: hard + +"@svgr/babel-plugin-svg-dynamic-title@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:6.5.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0fd42ebf127ae9163ef341e84972daa99bdcb9e6ed3f83aabd95ee173fddc43e40e02fa847fbc0a1058cf5549f72b7960a2c5e22c3e4ac18f7e3ac81277852ae + languageName: node + linkType: hard + +"@svgr/babel-plugin-svg-em-dimensions@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:6.5.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c1550ee9f548526fa66fd171e3ffb5696bfc4e4cd108a631d39db492c7410dc10bba4eb5a190e9df824bf806130ccc586ae7d2e43c547e6a4f93bbb29a18f344 + languageName: node + linkType: hard + +"@svgr/babel-plugin-transform-react-native-svg@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:6.5.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4c924af22b948b812629e80efb90ad1ec8faae26a232d8ca8a06b46b53e966a2c415a57806a3ff0ea806a622612e546422719b69ec6839717a7755dac19171d9 + languageName: node + linkType: hard + +"@svgr/babel-plugin-transform-svg-component@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-transform-svg-component@npm:6.5.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e496bb5ee871feb6bcab250b6e067322da7dd5c9c2b530b41e5586fe090f86611339b49d0a909c334d9b24cbca0fa755c949a2526c6ad03c6b5885666874cf5f + languageName: node + linkType: hard + +"@svgr/babel-preset@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-preset@npm:6.5.1" + dependencies: + "@svgr/babel-plugin-add-jsx-attribute": ^6.5.1 + "@svgr/babel-plugin-remove-jsx-attribute": "*" + "@svgr/babel-plugin-remove-jsx-empty-expression": "*" + "@svgr/babel-plugin-replace-jsx-attribute-value": ^6.5.1 + "@svgr/babel-plugin-svg-dynamic-title": ^6.5.1 + "@svgr/babel-plugin-svg-em-dimensions": ^6.5.1 + "@svgr/babel-plugin-transform-react-native-svg": ^6.5.1 + "@svgr/babel-plugin-transform-svg-component": ^6.5.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9f124be39a8e64f909162f925b3a63ddaa5a342a5e24fc0b7f7d9d4d7f7e3b916596c754fb557dc259928399cad5366a27cb231627a0d2dcc4b13ac521cf05af + languageName: node + linkType: hard + +"@svgr/core@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/core@npm:6.5.1" + dependencies: + "@babel/core": ^7.19.6 + "@svgr/babel-preset": ^6.5.1 + "@svgr/plugin-jsx": ^6.5.1 + camelcase: ^6.2.0 + cosmiconfig: ^7.0.1 + checksum: fd6d6d5da5aeb956703310480b626c1fb3e3973ad9fe8025efc1dcf3d895f857b70d100c63cf32cebb20eb83c9607bafa464c9436e18fe6fe4fafdc73ed6b1a5 + languageName: node + linkType: hard + +"@svgr/hast-util-to-babel-ast@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/hast-util-to-babel-ast@npm:6.5.1" + dependencies: + "@babel/types": ^7.20.0 + entities: ^4.4.0 + checksum: 37923cce1b3f4e2039077b0c570b6edbabe37d1cf1a6ee35e71e0fe00f9cffac450eec45e9720b1010418131a999cb0047331ba1b6d1d2c69af1b92ac785aacf + languageName: node + linkType: hard + +"@svgr/plugin-jsx@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/plugin-jsx@npm:6.5.1" + dependencies: + "@babel/core": ^7.19.6 + "@svgr/babel-preset": ^6.5.1 + "@svgr/hast-util-to-babel-ast": ^6.5.1 + svg-parser: ^2.0.4 + peerDependencies: + "@svgr/core": ^6.0.0 + checksum: 42f22847a6bdf930514d7bedd3c5e1fd8d53eb3594779f9db16cb94c762425907c375cd8ec789114e100a4d38068aca6c7ab5efea4c612fba63f0630c44cc859 + languageName: node + linkType: hard + +"@svgr/plugin-svgo@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/plugin-svgo@npm:6.5.1" + dependencies: + cosmiconfig: ^7.0.1 + deepmerge: ^4.2.2 + svgo: ^2.8.0 + peerDependencies: + "@svgr/core": "*" + checksum: cd2833530ac0485221adc2146fd992ab20d79f4b12eebcd45fa859721dd779483158e11dfd9a534858fe468416b9412416e25cbe07ac7932c44ed5fa2021c72e + languageName: node + linkType: hard + +"@svgr/webpack@npm:^6.2.1": + version: 6.5.1 + resolution: "@svgr/webpack@npm:6.5.1" + dependencies: + "@babel/core": ^7.19.6 + "@babel/plugin-transform-react-constant-elements": ^7.18.12 + "@babel/preset-env": ^7.19.4 + "@babel/preset-react": ^7.18.6 + "@babel/preset-typescript": ^7.18.6 + "@svgr/core": ^6.5.1 + "@svgr/plugin-jsx": ^6.5.1 + "@svgr/plugin-svgo": ^6.5.1 + checksum: d10582eb4fa82a5b6d314cb49f2c640af4fd3a60f5b76095d2b14e383ef6a43a6f4674b68774a21787dbde69dec0a251cfcfc3f9a96c82754ba5d5c6daf785f0 + languageName: node + linkType: hard + +"@szmarczak/http-timer@npm:^1.1.2": + version: 1.1.2 + resolution: "@szmarczak/http-timer@npm:1.1.2" + dependencies: + defer-to-connect: ^1.0.1 + checksum: 4d9158061c5f397c57b4988cde33a163244e4f02df16364f103971957a32886beb104d6180902cbe8b38cb940e234d9f98a4e486200deca621923f62f50a06fe + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@trysound/sax@npm:0.2.0": + version: 0.2.0 + resolution: "@trysound/sax@npm:0.2.0" + checksum: 11226c39b52b391719a2a92e10183e4260d9651f86edced166da1d95f39a0a1eaa470e44d14ac685ccd6d3df7e2002433782872c0feeb260d61e80f21250e65c + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.3 + resolution: "@tsconfig/node16@npm:1.0.3" + checksum: 3a8b657dd047495b7ad23437d6afd20297ce90380ff0bdee93fc7d39a900dbd8d9e26e53ff6b465e7967ce2adf0b218782590ce9013285121e6a5928fbd6819f + languageName: node + linkType: hard + +"@types/body-parser@npm:*": + version: 1.19.2 + resolution: "@types/body-parser@npm:1.19.2" + dependencies: + "@types/connect": "*" + "@types/node": "*" + checksum: e17840c7d747a549f00aebe72c89313d09fbc4b632b949b2470c5cb3b1cb73863901ae84d9335b567a79ec5efcfb8a28ff8e3f36bc8748a9686756b6d5681f40 + languageName: node + linkType: hard + +"@types/bonjour@npm:^3.5.9": + version: 3.5.10 + resolution: "@types/bonjour@npm:3.5.10" + dependencies: + "@types/node": "*" + checksum: bfcadb042a41b124c4e3de4925e3be6d35b78f93f27c4535d5ff86980dc0f8bc407ed99b9b54528952dc62834d5a779392f7a12c2947dd19330eb05a6bcae15a + languageName: node + linkType: hard + +"@types/connect-history-api-fallback@npm:^1.3.5": + version: 1.3.5 + resolution: "@types/connect-history-api-fallback@npm:1.3.5" + dependencies: + "@types/express-serve-static-core": "*" + "@types/node": "*" + checksum: 464d06e5ab00f113fa89978633d5eb00d225aeb4ebbadc07f6f3bc337aa7cbfcd74957b2a539d6d47f2e128e956a17819973ec7ae62ade2e16e367a6c38b8d3a + languageName: node + linkType: hard + +"@types/connect@npm:*": + version: 3.4.35 + resolution: "@types/connect@npm:3.4.35" + dependencies: + "@types/node": "*" + checksum: fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641 + languageName: node + linkType: hard + +"@types/eslint-scope@npm:^3.7.3": + version: 3.7.4 + resolution: "@types/eslint-scope@npm:3.7.4" + dependencies: + "@types/eslint": "*" + "@types/estree": "*" + checksum: ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 8.4.10 + resolution: "@types/eslint@npm:8.4.10" + dependencies: + "@types/estree": "*" + "@types/json-schema": "*" + checksum: 21e009ed9ed9bc8920fdafc6e11ff321c4538b4cc18a56fdd59dc5184ea7bbf363c71638c9bdb59fc1254dddcdd567485136ed68b0ee4750948d4e32cb79c689 + languageName: node + linkType: hard + +"@types/estree@npm:*": + version: 1.0.0 + resolution: "@types/estree@npm:1.0.0" + checksum: 910d97fb7092c6738d30a7430ae4786a38542023c6302b95d46f49420b797f21619cdde11fa92b338366268795884111c2eb10356e4bd2c8ad5b92941e9e6443 + languageName: node + linkType: hard + +"@types/estree@npm:^0.0.51": + version: 0.0.51 + resolution: "@types/estree@npm:0.0.51" + checksum: e56a3bcf759fd9185e992e7fdb3c6a5f81e8ff120e871641607581fb3728d16c811702a7d40fa5f869b7f7b4437ab6a87eb8d98ffafeee51e85bbe955932a189 + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.18": + version: 4.17.31 + resolution: "@types/express-serve-static-core@npm:4.17.31" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + checksum: 009bfbe1070837454a1056aa710d0390ee5fb8c05dfe5a1691cc3e2ca88dc256f80e1ca27cb51a978681631d2f6431bfc9ec352ea46dd0c6eb183d0170bde5df + languageName: node + linkType: hard + +"@types/express@npm:*, @types/express@npm:^4.17.13": + version: 4.17.14 + resolution: "@types/express@npm:4.17.14" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^4.17.18 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: 15c1af46d02de834e4a225eccaa9d85c0370fdbb3ed4e1bc2d323d24872309961542b993ae236335aeb3e278630224a6ea002078d39e651d78a3b0356b1eaa79 + languageName: node + linkType: hard + +"@types/hast@npm:^2.0.0": + version: 2.3.4 + resolution: "@types/hast@npm:2.3.4" + dependencies: + "@types/unist": "*" + checksum: fff47998f4c11e21a7454b58673f70478740ecdafd95aaf50b70a3daa7da9cdc57315545bf9c039613732c40b7b0e9e49d11d03fe9a4304721cdc3b29a88141e + languageName: node + linkType: hard + +"@types/history@npm:^4.7.11": + version: 4.7.11 + resolution: "@types/history@npm:4.7.11" + checksum: c92e2ba407dcab0581a9afdf98f533aa41b61a71133420a6d92b1ca9839f741ab1f9395b17454ba5b88cb86020b70b22d74a1950ccfbdfd9beeaa5459fdc3464 + languageName: node + linkType: hard + +"@types/html-minifier-terser@npm:^6.0.0": + version: 6.1.0 + resolution: "@types/html-minifier-terser@npm:6.1.0" + checksum: eb843f6a8d662d44fb18ec61041117734c6aae77aa38df1be3b4712e8e50ffaa35f1e1c92fdd0fde14a5675fecf457abcd0d15a01fae7506c91926176967f452 + languageName: node + linkType: hard + +"@types/http-proxy@npm:^1.17.8": + version: 1.17.9 + resolution: "@types/http-proxy@npm:1.17.9" + dependencies: + "@types/node": "*" + checksum: 7a6746d00729b2a9fe9f9dd3453430b099931df879ec8f7a7b5f07b1795f6d99b0512640c45a67390b1e4bacb9401e36824952aeeaf089feba8627a063cf8e00 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0": + version: 2.0.4 + resolution: "@types/istanbul-lib-coverage@npm:2.0.4" + checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.0 + resolution: "@types/istanbul-lib-report@npm:3.0.0" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36 + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.1 + resolution: "@types/istanbul-reports@npm:3.0.1" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.11 + resolution: "@types/json-schema@npm:7.0.11" + checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d + languageName: node + linkType: hard + +"@types/keyv@npm:^3.1.1": + version: 3.1.4 + resolution: "@types/keyv@npm:3.1.4" + dependencies: + "@types/node": "*" + checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d + languageName: node + linkType: hard + +"@types/mdast@npm:^3.0.0": + version: 3.0.10 + resolution: "@types/mdast@npm:3.0.10" + dependencies: + "@types/unist": "*" + checksum: 3f587bfc0a9a2403ecadc220e61031b01734fedaf82e27eb4d5ba039c0eb54db8c85681ccc070ab4df3f7ec711b736a82b990e69caa14c74bf7ac0ccf2ac7313 + languageName: node + linkType: hard + +"@types/mime@npm:*": + version: 3.0.1 + resolution: "@types/mime@npm:3.0.1" + checksum: 4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7 + languageName: node + linkType: hard + +"@types/node-fetch@npm:^2.5.12": + version: 2.6.2 + resolution: "@types/node-fetch@npm:2.6.2" + dependencies: + "@types/node": "*" + form-data: ^3.0.0 + checksum: 6f73b1470000d303d25a6fb92875ea837a216656cb7474f66cdd67bb014aa81a5a11e7ac9c21fe19bee9ecb2ef87c1962bceeaec31386119d1ac86e4c30ad7a6 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 18.11.10 + resolution: "@types/node@npm:18.11.10" + checksum: 0f60cb090b2ee91fcd3dc4311bc1ed7889b92f14644c0069f100776f86474c12eebbcc6c75bc0d7d96b975a103b4d5d6b3c22b4e88bea6e7f4e2b1bb0daf5ea8 + languageName: node + linkType: hard + +"@types/node@npm:^17.0.5": + version: 17.0.45 + resolution: "@types/node@npm:17.0.45" + checksum: aa04366b9103b7d6cfd6b2ef64182e0eaa7d4462c3f817618486ea0422984c51fc69fd0d436eae6c9e696ddfdbec9ccaa27a917f7c2e8c75c5d57827fe3d95e8 + languageName: node + linkType: hard + +"@types/parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "@types/parse-json@npm:4.0.0" + checksum: fd6bce2b674b6efc3db4c7c3d336bd70c90838e8439de639b909ce22f3720d21344f52427f1d9e57b265fcb7f6c018699b99e5e0c208a1a4823014269a6bf35b + languageName: node + linkType: hard + +"@types/parse5@npm:^5.0.0": + version: 5.0.3 + resolution: "@types/parse5@npm:5.0.3" + checksum: d6b7495cb1850f9f2e9c5e103ede9f2d30a5320669707b105c403868adc9e4bf8d3a7ff314cc23f67826bbbbbc0e6147346ce9062ab429f099dba7a01f463919 + languageName: node + linkType: hard + +"@types/prop-types@npm:*": + version: 15.7.5 + resolution: "@types/prop-types@npm:15.7.5" + checksum: 5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 + languageName: node + linkType: hard + +"@types/qs@npm:*": + version: 6.9.7 + resolution: "@types/qs@npm:6.9.7" + checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.4 + resolution: "@types/range-parser@npm:1.2.4" + checksum: b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95 + languageName: node + linkType: hard + +"@types/react-router-config@npm:*, @types/react-router-config@npm:^5.0.6": + version: 5.0.6 + resolution: "@types/react-router-config@npm:5.0.6" + dependencies: + "@types/history": ^4.7.11 + "@types/react": "*" + "@types/react-router": "*" + checksum: e32a7b19d14c1c07e2c06630207bc4ecf86a01585b832bf3c0756c9eaca312b5839bc8d50e8d744738ea50e7bbde0be3b1fd14a6a9398159d36bce33aff7f280 + languageName: node + linkType: hard + +"@types/react-router-dom@npm:*": + version: 5.3.3 + resolution: "@types/react-router-dom@npm:5.3.3" + dependencies: + "@types/history": ^4.7.11 + "@types/react": "*" + "@types/react-router": "*" + checksum: 28c4ea48909803c414bf5a08502acbb8ba414669b4b43bb51297c05fe5addc4df0b8fd00e0a9d1e3535ec4073ef38aaafac2c4a2b95b787167d113bc059beff3 + languageName: node + linkType: hard + +"@types/react-router@npm:*": + version: 5.1.19 + resolution: "@types/react-router@npm:5.1.19" + dependencies: + "@types/history": ^4.7.11 + "@types/react": "*" + checksum: 3536c3dec7af1f12fed2bea246eb143bd893ee66d4e58c1d3fe734cbd67d8a0aedac0bba9255c58fc69dbd32ae17ad280d6866916aee32653a705178e4a544dc + languageName: node + linkType: hard + +"@types/react@npm:*": + version: 18.0.26 + resolution: "@types/react@npm:18.0.26" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: b62f0ea3cdfa68e106391728325057ad36f1bde7ba2dfae029472c47e01e482bc77c6ba4f1dad59f3f04ee81cb597618ff7c30a33c157c0a20462b6dd6aa2d4d + languageName: node + linkType: hard + +"@types/responselike@npm:^1.0.0": + version: 1.0.0 + resolution: "@types/responselike@npm:1.0.0" + dependencies: + "@types/node": "*" + checksum: e99fc7cc6265407987b30deda54c1c24bb1478803faf6037557a774b2f034c5b097ffd65847daa87e82a61a250d919f35c3588654b0fdaa816906650f596d1b0 + languageName: node + linkType: hard + +"@types/retry@npm:0.12.0": + version: 0.12.0 + resolution: "@types/retry@npm:0.12.0" + checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 + languageName: node + linkType: hard + +"@types/sax@npm:^1.2.1": + version: 1.2.4 + resolution: "@types/sax@npm:1.2.4" + dependencies: + "@types/node": "*" + checksum: 2aa50cbf1d1f0cf8541ef1787f94c7442e58e63900afd3b45c354e4140ed5efc5cf26fca8eb9df9970a74c7ea582293ae2083271bd046dedf4c3cc2689a40892 + languageName: node + linkType: hard + +"@types/scheduler@npm:*": + version: 0.16.2 + resolution: "@types/scheduler@npm:0.16.2" + checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc + languageName: node + linkType: hard + +"@types/serve-index@npm:^1.9.1": + version: 1.9.1 + resolution: "@types/serve-index@npm:1.9.1" + dependencies: + "@types/express": "*" + checksum: 026f3995fb500f6df7c3fe5009e53bad6d739e20b84089f58ebfafb2f404bbbb6162bbe33f72d2f2af32d5b8d3799c8e179793f90d9ed5871fb8591190bb6056 + languageName: node + linkType: hard + +"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": + version: 1.15.0 + resolution: "@types/serve-static@npm:1.15.0" + dependencies: + "@types/mime": "*" + "@types/node": "*" + checksum: b6ac93d471fb0f53ddcac1f9b67572a09cd62806f7db5855244b28f6f421139626f24799392566e97d1ffc61b12f9de7f30380c39fcae3c8a161fe161d44edf2 + languageName: node + linkType: hard + +"@types/sockjs@npm:^0.3.33": + version: 0.3.33 + resolution: "@types/sockjs@npm:0.3.33" + dependencies: + "@types/node": "*" + checksum: b9bbb2b5c5ead2fb884bb019f61a014e37410bddd295de28184e1b2e71ee6b04120c5ba7b9954617f0bdf962c13d06249ce65004490889c747c80d3f628ea842 + languageName: node + linkType: hard + +"@types/unist@npm:*, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2, @types/unist@npm:^2.0.3": + version: 2.0.6 + resolution: "@types/unist@npm:2.0.6" + checksum: 25cb860ff10dde48b54622d58b23e66214211a61c84c0f15f88d38b61aa1b53d4d46e42b557924a93178c501c166aa37e28d7f6d994aba13d24685326272d5db + languageName: node + linkType: hard + +"@types/ws@npm:^8.5.1": + version: 8.5.3 + resolution: "@types/ws@npm:8.5.3" + dependencies: + "@types/node": "*" + checksum: 0ce46f850d41383fcdc2149bcacc86d7232fa7a233f903d2246dff86e31701a02f8566f40af5f8b56d1834779255c04ec6ec78660fe0f9b2a69cf3d71937e4ae + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.0 + resolution: "@types/yargs-parser@npm:21.0.0" + checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.15 + resolution: "@types/yargs@npm:17.0.15" + dependencies: + "@types/yargs-parser": "*" + checksum: f6a12cf5fbfba6317fcbdf0fb545002bd37e48131f573c0b95473f1f245ba0e8ecfe859fcb43e972ff4dbd821944467d145419c5b12fdb0ba00cde886732097e + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/ast@npm:1.11.1" + dependencies: + "@webassemblyjs/helper-numbers": 1.11.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.1 + checksum: 1eee1534adebeece635362f8e834ae03e389281972611408d64be7895fc49f48f98fddbbb5339bf8a72cb101bcb066e8bca3ca1bf1ef47dadf89def0395a8d87 + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.1" + checksum: b8efc6fa08e4787b7f8e682182d84dfdf8da9d9c77cae5d293818bc4a55c1f419a87fa265ab85252b3e6c1fd323d799efea68d825d341a7c365c64bc14750e97 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-api-error@npm:1.11.1" + checksum: 0792813f0ed4a0e5ee0750e8b5d0c631f08e927f4bdfdd9fe9105dc410c786850b8c61bff7f9f515fdfb149903bec3c976a1310573a4c6866a94d49bc7271959 + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.11.1" + checksum: a337ee44b45590c3a30db5a8b7b68a717526cf967ada9f10253995294dbd70a58b2da2165222e0b9830cd4fc6e4c833bf441a721128d1fe2e9a7ab26b36003ce + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-numbers@npm:1.11.1" + dependencies: + "@webassemblyjs/floating-point-hex-parser": 1.11.1 + "@webassemblyjs/helper-api-error": 1.11.1 + "@xtuc/long": 4.2.2 + checksum: 44d2905dac2f14d1e9b5765cf1063a0fa3d57295c6d8930f6c59a36462afecc6e763e8a110b97b342a0f13376166c5d41aa928e6ced92e2f06b071fd0db59d3a + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.1" + checksum: eac400113127832c88f5826bcc3ad1c0db9b3dbd4c51a723cfdb16af6bfcbceb608170fdaac0ab7731a7e18b291be7af68a47fcdb41cfe0260c10857e7413d97 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/helper-buffer": 1.11.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.1 + "@webassemblyjs/wasm-gen": 1.11.1 + checksum: 617696cfe8ecaf0532763162aaf748eb69096fb27950219bb87686c6b2e66e11cd0614d95d319d0ab1904bc14ebe4e29068b12c3e7c5e020281379741fe4bedf + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/ieee754@npm:1.11.1" + dependencies: + "@xtuc/ieee754": ^1.2.0 + checksum: 23a0ac02a50f244471631802798a816524df17e56b1ef929f0c73e3cde70eaf105a24130105c60aff9d64a24ce3b640dad443d6f86e5967f922943a7115022ec + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/leb128@npm:1.11.1" + dependencies: + "@xtuc/long": 4.2.2 + checksum: 33ccc4ade2f24de07bf31690844d0b1ad224304ee2062b0e464a610b0209c79e0b3009ac190efe0e6bd568b0d1578d7c3047fc1f9d0197c92fc061f56224ff4a + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/utf8@npm:1.11.1" + checksum: 972c5cfc769d7af79313a6bfb96517253a270a4bf0c33ba486aa43cac43917184fb35e51dfc9e6b5601548cd5931479a42e42c89a13bb591ffabebf30c8a6a0b + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/helper-buffer": 1.11.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.1 + "@webassemblyjs/helper-wasm-section": 1.11.1 + "@webassemblyjs/wasm-gen": 1.11.1 + "@webassemblyjs/wasm-opt": 1.11.1 + "@webassemblyjs/wasm-parser": 1.11.1 + "@webassemblyjs/wast-printer": 1.11.1 + checksum: 6d7d9efaec1227e7ef7585a5d7ff0be5f329f7c1c6b6c0e906b18ed2e9a28792a5635e450aca2d136770d0207225f204eff70a4b8fd879d3ac79e1dcc26dbeb9 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.1 + "@webassemblyjs/ieee754": 1.11.1 + "@webassemblyjs/leb128": 1.11.1 + "@webassemblyjs/utf8": 1.11.1 + checksum: 1f6921e640293bf99fb16b21e09acb59b340a79f986c8f979853a0ae9f0b58557534b81e02ea2b4ef11e929d946708533fd0693c7f3712924128fdafd6465f5b + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/helper-buffer": 1.11.1 + "@webassemblyjs/wasm-gen": 1.11.1 + "@webassemblyjs/wasm-parser": 1.11.1 + checksum: 21586883a20009e2b20feb67bdc451bbc6942252e038aae4c3a08e6f67b6bae0f5f88f20bfc7bd0452db5000bacaf5ab42b98cf9aa034a6c70e9fc616142e1db + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/helper-api-error": 1.11.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.1 + "@webassemblyjs/ieee754": 1.11.1 + "@webassemblyjs/leb128": 1.11.1 + "@webassemblyjs/utf8": 1.11.1 + checksum: 1521644065c360e7b27fad9f4bb2df1802d134dd62937fa1f601a1975cde56bc31a57b6e26408b9ee0228626ff3ba1131ae6f74ffb7d718415b6528c5a6dbfc2 + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wast-printer@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": 1.11.1 + "@xtuc/long": 4.2.2 + checksum: f15ae4c2441b979a3b4fce78f3d83472fb22350c6dc3fd34bfe7c3da108e0b2360718734d961bba20e7716cb8578e964b870da55b035e209e50ec9db0378a3f7 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec + languageName: node + linkType: hard + +"abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: ~2.1.34 + negotiator: 0.6.3 + checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 + languageName: node + linkType: hard + +"acorn-import-assertions@npm:^1.7.6": + version: 1.8.0 + resolution: "acorn-import-assertions@npm:1.8.0" + peerDependencies: + acorn: ^8 + checksum: 5c4cf7c850102ba7ae0eeae0deb40fb3158c8ca5ff15c0bca43b5c47e307a1de3d8ef761788f881343680ea374631ae9e9615ba8876fee5268dbe068c98bcba6 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.1.1": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + languageName: node + linkType: hard + +"acorn@npm:^8.0.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.1": + version: 8.8.1 + resolution: "acorn@npm:8.8.1" + bin: + acorn: bin/acorn + checksum: 4079b67283b94935157698831967642f24a075c52ce3feaaaafe095776dfbe15d86a1b33b1e53860fc0d062ed6c83f4284a5c87c85b9ad51853a01173da6097f + languageName: node + linkType: hard + +"address@npm:^1.0.1, address@npm:^1.1.2": + version: 1.2.1 + resolution: "address@npm:1.2.1" + checksum: e4c0f961464ccad09c3f7ed3a8d12f609354a87dd1ad379e43661e9684446fbf158be3edeef85e1590dfc6c88c0897c5908bc18f232eb86e43993a2ada5820fa + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.2.1 + resolution: "agentkeepalive@npm:4.2.1" + dependencies: + debug: ^4.1.0 + depd: ^1.1.2 + humanize-ms: ^1.2.1 + checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.4.1, ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.0.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: ^3.1.3 + peerDependencies: + ajv: ^8.8.2 + checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 + languageName: node + linkType: hard + +"ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.8.0": + version: 8.11.2 + resolution: "ajv@npm:8.11.2" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 53435bf79ee7d1eabba8085962dba4c08d08593334b304db7772887f0b7beebc1b3d957432f7437ed4b60e53b5d966a57b439869890209c50fed610459999e3e + languageName: node + linkType: hard + +"algoliasearch-helper@npm:^3.10.0": + version: 3.11.1 + resolution: "algoliasearch-helper@npm:3.11.1" + dependencies: + "@algolia/events": ^4.0.1 + peerDependencies: + algoliasearch: ">= 3.1 < 6" + checksum: 207616ca4549e2d06a278357ce478951a37c606f40f5b39b8e2d13bba143023a10814f065cd89629e5f2c121935d61a97d96bfb687ae7a98ef25b63da37fcf70 + languageName: node + linkType: hard + +"algoliasearch@npm:^4.0.0, algoliasearch@npm:^4.13.1": + version: 4.14.2 + resolution: "algoliasearch@npm:4.14.2" + dependencies: + "@algolia/cache-browser-local-storage": 4.14.2 + "@algolia/cache-common": 4.14.2 + "@algolia/cache-in-memory": 4.14.2 + "@algolia/client-account": 4.14.2 + "@algolia/client-analytics": 4.14.2 + "@algolia/client-common": 4.14.2 + "@algolia/client-personalization": 4.14.2 + "@algolia/client-search": 4.14.2 + "@algolia/logger-common": 4.14.2 + "@algolia/logger-console": 4.14.2 + "@algolia/requester-browser-xhr": 4.14.2 + "@algolia/requester-common": 4.14.2 + "@algolia/requester-node-http": 4.14.2 + "@algolia/transporter": 4.14.2 + checksum: 4365a0d0f066f3ad6798e4dd0d7487cba1cf4546dac27e66cb84865f91955d6537dc5bad4e71d4bf22a68c0b721b1e6f20109203566ca1a252fe2713d713c0fd + languageName: node + linkType: hard + +"ansi-align@npm:^3.0.0, ansi-align@npm:^3.0.1": + version: 3.0.1 + resolution: "ansi-align@npm:3.0.1" + dependencies: + string-width: ^4.1.0 + checksum: 6abfa08f2141d231c257162b15292467081fa49a208593e055c866aa0455b57f3a86b5a678c190c618faa79b4c59e254493099cb700dd9cf2293c6be2c8f5d8d + languageName: node + linkType: hard + +"ansi-html-community@npm:^0.0.8": + version: 0.0.8 + resolution: "ansi-html-community@npm:0.0.8" + bin: + ansi-html: bin/ansi-html + checksum: 04c568e8348a636963f915e48eaa3e01218322e1169acafdd79c384f22e5558c003f79bbc480c1563865497482817c7eed025f0653ebc17642fededa5cb42089 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 + languageName: node + linkType: hard + +"arg@npm:^5.0.0": + version: 5.0.2 + resolution: "arg@npm:5.0.2" + checksum: 6c69ada1a9943d332d9e5382393e897c500908d91d5cb735a01120d5f71daf1b339b7b8980cbeaba8fd1afc68e658a739746179e4315a26e8a28951ff9930078 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-flatten@npm:1.1.1": + version: 1.1.1 + resolution: "array-flatten@npm:1.1.1" + checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b + languageName: node + linkType: hard + +"array-flatten@npm:^2.1.2": + version: 2.1.2 + resolution: "array-flatten@npm:2.1.2" + checksum: e8988aac1fbfcdaae343d08c9a06a6fddd2c6141721eeeea45c3cf523bf4431d29a46602929455ed548c7a3e0769928cdc630405427297e7081bd118fdec9262 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"asap@npm:~2.0.3": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e + languageName: node + linkType: hard + +"autoprefixer@npm:^10.4.12, autoprefixer@npm:^10.4.7": + version: 10.4.13 + resolution: "autoprefixer@npm:10.4.13" + dependencies: + browserslist: ^4.21.4 + caniuse-lite: ^1.0.30001426 + fraction.js: ^4.2.0 + normalize-range: ^0.1.2 + picocolors: ^1.0.0 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: dcb1cb7ae96a3363d65d82e52f9a0a7d8c982256f6fd032d7e1ec311f099c23acfebfd517ff8e96bf93f716a66c4ea2b80c60aa19efd2f474ce434bd75ef7b79 + languageName: node + linkType: hard + +"axios@npm:^0.25.0": + version: 0.25.0 + resolution: "axios@npm:0.25.0" + dependencies: + follow-redirects: ^1.14.7 + checksum: 2a8a3787c05f2a0c9c3878f49782357e2a9f38945b93018fb0c4fd788171c43dceefbb577988628e09fea53952744d1ecebde234b561f1e703aa43e0a598a3ad + languageName: node + linkType: hard + +"babel-loader@npm:^8.2.5": + version: 8.3.0 + resolution: "babel-loader@npm:8.3.0" + dependencies: + find-cache-dir: ^3.3.1 + loader-utils: ^2.0.0 + make-dir: ^3.1.0 + schema-utils: ^2.6.5 + peerDependencies: + "@babel/core": ^7.0.0 + webpack: ">=2" + checksum: d48bcf9e030e598656ad3ff5fb85967db2eaaf38af5b4a4b99d25618a2057f9f100e6b231af2a46c1913206db506115ca7a8cbdf52c9c73d767070dae4352ab5 + languageName: node + linkType: hard + +"babel-plugin-apply-mdx-type-prop@npm:1.6.22": + version: 1.6.22 + resolution: "babel-plugin-apply-mdx-type-prop@npm:1.6.22" + dependencies: + "@babel/helper-plugin-utils": 7.10.4 + "@mdx-js/util": 1.6.22 + peerDependencies: + "@babel/core": ^7.11.6 + checksum: 43e2100164a8f3e46fddd76afcbfb1f02cbebd5612cfe63f3d344a740b0afbdc4d2bf5659cffe9323dd2554c7b86b23ebedae9dadcec353b6594f4292a1a28e2 + languageName: node + linkType: hard + +"babel-plugin-dynamic-import-node@npm:^2.3.3": + version: 2.3.3 + resolution: "babel-plugin-dynamic-import-node@npm:2.3.3" + dependencies: + object.assign: ^4.1.0 + checksum: c9d24415bcc608d0db7d4c8540d8002ac2f94e2573d2eadced137a29d9eab7e25d2cbb4bc6b9db65cf6ee7430f7dd011d19c911a9a778f0533b4a05ce8292c9b + languageName: node + linkType: hard + +"babel-plugin-extract-import-names@npm:1.6.22": + version: 1.6.22 + resolution: "babel-plugin-extract-import-names@npm:1.6.22" + dependencies: + "@babel/helper-plugin-utils": 7.10.4 + checksum: 145ccf09c96d36411d340e78086555f8d4d5924ea39fcb0eca461c066cfa98bc4344982bb35eb85d054ef88f8d4dfc0205ba27370c1d8fcc78191b02908d044d + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.3.3": + version: 0.3.3 + resolution: "babel-plugin-polyfill-corejs2@npm:0.3.3" + dependencies: + "@babel/compat-data": ^7.17.7 + "@babel/helper-define-polyfill-provider": ^0.3.3 + semver: ^6.1.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7db3044993f3dddb3cc3d407bc82e640964a3bfe22de05d90e1f8f7a5cb71460011ab136d3c03c6c1ba428359ebf635688cd6205e28d0469bba221985f5c6179 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.6.0": + version: 0.6.0 + resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.3.3 + core-js-compat: ^3.25.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 470bb8c59f7c0912bd77fe1b5a2e72f349b3f65bbdee1d60d6eb7e1f4a085c6f24b2dd5ab4ac6c2df6444a96b070ef6790eccc9edb6a2668c60d33133bfb62c6 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.4.1": + version: 0.4.1 + resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.3.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ab0355efbad17d29492503230387679dfb780b63b25408990d2e4cf421012dae61d6199ddc309f4d2409ce4e9d3002d187702700dd8f4f8770ebbba651ed066c + languageName: node + linkType: hard + +"bail@npm:^1.0.0": + version: 1.0.5 + resolution: "bail@npm:1.0.5" + checksum: 6c334940d7eaa4e656a12fb12407b6555649b6deb6df04270fa806e0da82684ebe4a4e47815b271c794b40f8d6fa286e0c248b14ddbabb324a917fab09b7301a + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base16@npm:^1.0.0": + version: 1.0.0 + resolution: "base16@npm:1.0.0" + checksum: 0cd449a2db0f0f957e4b6b57e33bc43c9e20d4f1dd744065db94b5da35e8e71fa4dc4bc7a901e59a84d5f8b6936e3c520e2471787f667fc155fb0f50d8540f5d + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"batch@npm:0.6.1": + version: 0.6.1 + resolution: "batch@npm:0.6.1" + checksum: 61f9934c7378a51dce61b915586191078ef7f1c3eca707fdd58b96ff2ff56d9e0af2bdab66b1462301a73c73374239e6542d9821c0af787f3209a23365d07e7f + languageName: node + linkType: hard + +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + languageName: node + linkType: hard + +"bl@npm:^4.0.3": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: ^5.5.0 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 + languageName: node + linkType: hard + +"body-parser@npm:1.20.1": + version: 1.20.1 + resolution: "body-parser@npm:1.20.1" + dependencies: + bytes: 3.1.2 + content-type: ~1.0.4 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: ~1.6.18 + unpipe: 1.0.0 + checksum: f1050dbac3bede6a78f0b87947a8d548ce43f91ccc718a50dd774f3c81f2d8b04693e52acf62659fad23101827dd318da1fb1363444ff9a8482b886a3e4a5266 + languageName: node + linkType: hard + +"bonjour-service@npm:^1.0.11": + version: 1.0.14 + resolution: "bonjour-service@npm:1.0.14" + dependencies: + array-flatten: ^2.1.2 + dns-equal: ^1.0.0 + fast-deep-equal: ^3.1.3 + multicast-dns: ^7.2.5 + checksum: 4a825bbf1824147ba8295a182fb3e86a8bae5159a08e2f118e829a0c988043a559f1f6e4eab425fe17ee9a1f080115d30430e78962e53f75bb03e2021ee7c5b2 + languageName: node + linkType: hard + +"boolbase@npm:^1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 + languageName: node + linkType: hard + +"boxen@npm:^5.0.0": + version: 5.1.2 + resolution: "boxen@npm:5.1.2" + dependencies: + ansi-align: ^3.0.0 + camelcase: ^6.2.0 + chalk: ^4.1.0 + cli-boxes: ^2.2.1 + string-width: ^4.2.2 + type-fest: ^0.20.2 + widest-line: ^3.1.0 + wrap-ansi: ^7.0.0 + checksum: 82d03e42a72576ff235123f17b7c505372fe05c83f75f61e7d4fa4bcb393897ec95ce766fecb8f26b915f0f7a7227d66e5ec7cef43f5b2bd9d3aeed47ec55877 + languageName: node + linkType: hard + +"boxen@npm:^6.2.1": + version: 6.2.1 + resolution: "boxen@npm:6.2.1" + dependencies: + ansi-align: ^3.0.1 + camelcase: ^6.2.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 + checksum: 2b3226092f1ff8e149c02979098c976552afa15f9e0231c9ed2dfcaaf84604494d16a6f13b647f718439f64d3140a088e822d47c7db00d2266e9ffc8d7321774 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.6, browserslist@npm:^4.18.1, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4": + version: 4.21.4 + resolution: "browserslist@npm:4.21.4" + dependencies: + caniuse-lite: ^1.0.30001400 + electron-to-chromium: ^1.4.251 + node-releases: ^2.0.6 + update-browserslist-db: ^1.0.9 + bin: + browserslist: cli.js + checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"bytes@npm:3.0.0": + version: 3.0.0 + resolution: "bytes@npm:3.0.0" + checksum: a2b386dd8188849a5325f58eef69c3b73c51801c08ffc6963eddc9be244089ba32d19347caf6d145c86f315ae1b1fc7061a32b0c1aa6379e6a719090287ed101 + languageName: node + linkType: hard + +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e + languageName: node + linkType: hard + +"cacache@npm:^16.1.0": + version: 16.1.3 + resolution: "cacache@npm:16.1.3" + dependencies: + "@npmcli/fs": ^2.1.0 + "@npmcli/move-file": ^2.0.0 + chownr: ^2.0.0 + fs-minipass: ^2.1.0 + glob: ^8.0.1 + infer-owner: ^1.0.4 + lru-cache: ^7.7.1 + minipass: ^3.1.6 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + mkdirp: ^1.0.4 + p-map: ^4.0.0 + promise-inflight: ^1.0.1 + rimraf: ^3.0.2 + ssri: ^9.0.0 + tar: ^6.1.11 + unique-filename: ^2.0.0 + checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 + languageName: node + linkType: hard + +"cacheable-request@npm:^6.0.0": + version: 6.1.0 + resolution: "cacheable-request@npm:6.1.0" + 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 + checksum: b510b237b18d17e89942e9ee2d2a077cb38db03f12167fd100932dfa8fc963424bfae0bfa1598df4ae16c944a5484e43e03df8f32105b04395ee9495e9e4e9f1 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind@npm:1.0.2" + dependencies: + function-bind: ^1.1.1 + get-intrinsic: ^1.0.2 + checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camel-case@npm:^4.1.2": + version: 4.1.2 + resolution: "camel-case@npm:4.1.2" + dependencies: + pascal-case: ^3.1.2 + tslib: ^2.0.3 + checksum: bcbd25cd253b3cbc69be3f535750137dbf2beb70f093bdc575f73f800acc8443d34fd52ab8f0a2413c34f1e8203139ffc88428d8863e4dfe530cfb257a379ad6 + languageName: node + linkType: hard + +"camelcase-css@npm:2.0.1": + version: 2.0.1 + resolution: "camelcase-css@npm:2.0.1" + checksum: 1cec2b3b3dcb5026688a470b00299a8db7d904c4802845c353dbd12d9d248d3346949a814d83bfd988d4d2e5b9904c07efe76fecd195a1d4f05b543e7c0b56b1 + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"caniuse-api@npm:^3.0.0": + version: 3.0.0 + resolution: "caniuse-api@npm:3.0.0" + dependencies: + browserslist: ^4.0.0 + caniuse-lite: ^1.0.0 + lodash.memoize: ^4.1.2 + lodash.uniq: ^4.5.0 + checksum: db2a229383b20d0529b6b589dde99d7b6cb56ba371366f58cbbfa2929c9f42c01f873e2b6ef641d4eda9f0b4118de77dbb2805814670bdad4234bf08e720b0b4 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001400, caniuse-lite@npm:^1.0.30001426": + version: 1.0.30001435 + resolution: "caniuse-lite@npm:1.0.30001435" + checksum: ec88b9c37f66095e26ddb8b43110e9564ebccb6de77e495b8e8b9d64fdbfe37f7762be8fd2578c3ecc181a183a159578c9bd8e9b90eb15b44b78e8a6d0e92530 + languageName: node + linkType: hard + +"ccount@npm:^1.0.0": + version: 1.1.0 + resolution: "ccount@npm:1.1.0" + checksum: b335a79d0aa4308919cf7507babcfa04ac63d389ebed49dbf26990d4607c8a4713cde93cc83e707d84571ddfe1e7615dad248be9bc422ae4c188210f71b08b78 + languageName: node + linkType: hard + +"chalk@npm:^2.0.0": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"character-entities-legacy@npm:^1.0.0": + version: 1.1.4 + resolution: "character-entities-legacy@npm:1.1.4" + checksum: fe03a82c154414da3a0c8ab3188e4237ec68006cbcd681cf23c7cfb9502a0e76cd30ab69a2e50857ca10d984d57de3b307680fff5328ccd427f400e559c3a811 + languageName: node + linkType: hard + +"character-entities@npm:^1.0.0": + version: 1.2.4 + resolution: "character-entities@npm:1.2.4" + checksum: e1545716571ead57beac008433c1ff69517cd8ca5b336889321c5b8ff4a99c29b65589a701e9c086cda8a5e346a67295e2684f6c7ea96819fe85cbf49bf8686d + languageName: node + linkType: hard + +"character-reference-invalid@npm:^1.0.0": + version: 1.1.4 + resolution: "character-reference-invalid@npm:1.1.4" + checksum: 20274574c70e05e2f81135f3b93285536bc8ff70f37f0809b0d17791a832838f1e49938382899ed4cb444e5bbd4314ca1415231344ba29f4222ce2ccf24fea0b + languageName: node + linkType: hard + +"cheerio-select@npm:^2.1.0": + version: 2.1.0 + resolution: "cheerio-select@npm:2.1.0" + 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 + checksum: 843d6d479922f28a6c5342c935aff1347491156814de63c585a6eb73baf7bb4185c1b4383a1195dca0f12e3946d737c7763bcef0b9544c515d905c5c44c5308b + languageName: node + linkType: hard + +"cheerio@npm:^1.0.0-rc.12": + version: 1.0.0-rc.12 + resolution: "cheerio@npm:1.0.0-rc.12" + 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 + checksum: 5d4c1b7a53cf22d3a2eddc0aff70cf23cbb30d01a4c79013e703a012475c02461aa1fcd99127e8d83a02216386ed6942b2c8103845fd0812300dd199e6e7e054 + languageName: node + linkType: hard + +"chokidar@npm:^3.4.2, chokidar@npm:^3.5.3": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2": + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 + languageName: node + linkType: hard + +"ci-info@npm:^2.0.0": + version: 2.0.0 + resolution: "ci-info@npm:2.0.0" + checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.7.0 + resolution: "ci-info@npm:3.7.0" + checksum: 6e5df0250382ff3732703b36b958d2d892dd3c481f9671666f96c2ab7888be744bc4dca81395be958dcb828502d94f18fa9aa8901c5a3c9923cda212df02724c + languageName: node + linkType: hard + +"clean-css@npm:^5.2.2, clean-css@npm:^5.3.0": + version: 5.3.1 + resolution: "clean-css@npm:5.3.1" + dependencies: + source-map: ~0.6.0 + checksum: 860696c60503cbfec480b5f92f62729246304b55950571af7292f2687b57f86b277f2b9fefe6f64643d409008018b78383972b55c2cc859792dcc8658988fb16 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-boxes@npm:^2.2.1": + version: 2.2.1 + resolution: "cli-boxes@npm:2.2.1" + checksum: be79f8ec23a558b49e01311b39a1ea01243ecee30539c880cf14bf518a12e223ef40c57ead0cb44f509bffdffc5c129c746cd50d863ab879385370112af4f585 + languageName: node + linkType: hard + +"cli-boxes@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-boxes@npm:3.0.0" + checksum: 637d84419d293a9eac40a1c8c96a2859e7d98b24a1a317788e13c8f441be052fc899480c6acab3acc82eaf1bccda6b7542d7cdcf5c9c3cc39227175dc098d5b2 + languageName: node + linkType: hard + +"cli-table3@npm:^0.6.2": + version: 0.6.3 + resolution: "cli-table3@npm:0.6.3" + dependencies: + "@colors/colors": 1.5.0 + string-width: ^4.2.0 + dependenciesMeta: + "@colors/colors": + optional: true + checksum: 09897f68467973f827c04e7eaadf13b55f8aec49ecd6647cc276386ea660059322e2dd8020a8b6b84d422dbdd619597046fa89cbbbdc95b2cea149a2df7c096c + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: ^2.0.4 + kind-of: ^6.0.2 + shallow-clone: ^3.0.0 + checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + +"clone-response@npm:^1.0.2": + version: 1.0.3 + resolution: "clone-response@npm:1.0.3" + dependencies: + mimic-response: ^1.0.0 + checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e + languageName: node + linkType: hard + +"clsx@npm:^1.1.1, clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 + languageName: node + linkType: hard + +"collapse-white-space@npm:^1.0.2": + version: 1.0.6 + resolution: "collapse-white-space@npm:1.0.6" + checksum: 9673fb797952c5c888341435596c69388b22cd5560c8cd3f40edb72734a9c820f56a7c9525166bcb7068b5d5805372e6fd0c4b9f2869782ad070cb5d3faf26e7 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-string@npm:^1.9.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: ^1.0.0 + simple-swizzle: ^0.2.2 + checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"color@npm:^4.2.3": + version: 4.2.3 + resolution: "color@npm:4.2.3" + dependencies: + color-convert: ^2.0.1 + color-string: ^1.9.0 + checksum: 0579629c02c631b426780038da929cca8e8d80a40158b09811a0112a107c62e10e4aad719843b791b1e658ab4e800558f2e87ca4522c8b32349d497ecb6adeb4 + languageName: node + linkType: hard + +"colord@npm:^2.9.1": + version: 2.9.3 + resolution: "colord@npm:2.9.3" + checksum: 95d909bfbcfd8d5605cbb5af56f2d1ce2b323990258fd7c0d2eb0e6d3bb177254d7fb8213758db56bb4ede708964f78c6b992b326615f81a18a6aaf11d64c650 + languageName: node + linkType: hard + +"colorette@npm:^2.0.10": + version: 2.0.19 + resolution: "colorette@npm:2.0.19" + checksum: 888cf5493f781e5fcf54ce4d49e9d7d698f96ea2b2ef67906834bb319a392c667f9ec69f4a10e268d2946d13a9503d2d19b3abaaaf174e3451bfe91fb9d82427 + languageName: node + linkType: hard + +"combine-promises@npm:^1.1.0": + version: 1.1.0 + resolution: "combine-promises@npm:1.1.0" + checksum: 23b55f66d5cea3ddf39608c07f7a96065c7bb7cc4f54c7f217040771262ad97e808b30f7f267c553a9ca95552fc9813fb465232f5d82e190e118b33238186af8 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"comma-separated-tokens@npm:^1.0.0": + version: 1.0.8 + resolution: "comma-separated-tokens@npm:1.0.8" + checksum: 0adcb07174fa4d08cf0f5c8e3aec40a36b5ff0c2c720e5e23f50fe02e6789d1d00a67036c80e0c1e1539f41d3e7f0101b074039dd833b4e4a59031b659d6ca0d + languageName: node + linkType: hard + +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"commander@npm:^5.1.0": + version: 5.1.0 + resolution: "commander@npm:5.1.0" + checksum: 0b7fec1712fbcc6230fcb161d8d73b4730fa91a21dc089515489402ad78810547683f058e2a9835929c212fead1d6a6ade70db28bbb03edbc2829a9ab7d69447 + languageName: node + linkType: hard + +"commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc + languageName: node + linkType: hard + +"commander@npm:^8.3.0": + version: 8.3.0 + resolution: "commander@npm:8.3.0" + checksum: 0f82321821fc27b83bd409510bb9deeebcfa799ff0bf5d102128b500b7af22872c0c92cb6a0ebc5a4cf19c6b550fba9cedfa7329d18c6442a625f851377bacf0 + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb + languageName: node + linkType: hard + +"compressible@npm:~2.0.16": + version: 2.0.18 + resolution: "compressible@npm:2.0.18" + dependencies: + mime-db: ">= 1.43.0 < 2" + checksum: 58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0 + languageName: node + linkType: hard + +"compression@npm:^1.7.4": + version: 1.7.4 + resolution: "compression@npm:1.7.4" + 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 + checksum: 35c0f2eb1f28418978615dc1bc02075b34b1568f7f56c62d60f4214d4b7cc00d0f6d282b5f8a954f59872396bd770b6b15ffd8aa94c67d4bce9b8887b906999b + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"configstore@npm:^5.0.1": + version: 5.0.1 + resolution: "configstore@npm:5.0.1" + 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 + checksum: 60ef65d493b63f96e14b11ba7ec072fdbf3d40110a94fb7199d1c287761bdea5c5244e76b2596325f30c1b652213aa75de96ea20afd4a5f82065e61ea090988e + languageName: node + linkType: hard + +"connect-history-api-fallback@npm:^2.0.0": + version: 2.0.0 + resolution: "connect-history-api-fallback@npm:2.0.0" + checksum: dc5368690f4a5c413889792f8df70d5941ca9da44523cde3f87af0745faee5ee16afb8195434550f0504726642734f2683d6c07f8b460f828a12c45fbd4c9a68 + languageName: node + linkType: hard + +"consola@npm:^2.15.3": + version: 2.15.3 + resolution: "consola@npm:2.15.3" + checksum: 8ef7a09b703ec67ac5c389a372a33b6dc97eda6c9876443a60d76a3076eea0259e7f67a4e54fd5a52f97df73690822d090cf8b7e102b5761348afef7c6d03e28 + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"consolidated-events@npm:^1.1.0 || ^2.0.0": + version: 2.0.2 + resolution: "consolidated-events@npm:2.0.2" + checksum: 3ffb9fa2647ffbc07845f7ddb22c2e7be88a51aabf2256da860b5e88d9fbbddea60af51d849330d6159fd698881ecd51f168aa07a4f5d238056db75b2e96ff9a + languageName: node + linkType: hard + +"content-disposition@npm:0.5.2": + version: 0.5.2 + resolution: "content-disposition@npm:0.5.2" + checksum: 298d7da63255a38f7858ee19c7b6aae32b167e911293174b4c1349955e97e78e1d0b0d06c10e229405987275b417cf36ff65cbd4821a98bc9df4e41e9372cde7 + languageName: node + linkType: hard + +"content-disposition@npm:0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: 5.2.1 + checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 + languageName: node + linkType: hard + +"content-type@npm:~1.0.4": + version: 1.0.4 + resolution: "content-type@npm:1.0.4" + checksum: 3d93585fda985d1554eca5ebd251994327608d2e200978fdbfba21c0c679914d5faf266d17027de44b34a72c7b0745b18584ecccaa7e1fdfb6a68ac7114f12e0 + languageName: node + linkType: hard + +"convert-source-map@npm:^1.7.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + languageName: node + linkType: hard + +"cookie-signature@npm:1.0.6": + version: 1.0.6 + resolution: "cookie-signature@npm:1.0.6" + checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a + languageName: node + linkType: hard + +"cookie@npm:0.5.0": + version: 0.5.0 + resolution: "cookie@npm:0.5.0" + checksum: 1f4bd2ca5765f8c9689a7e8954183f5332139eb72b6ff783d8947032ec1fdf43109852c178e21a953a30c0dd42257828185be01b49d1eb1a67fd054ca588a180 + languageName: node + linkType: hard + +"copy-text-to-clipboard@npm:^3.0.1": + version: 3.0.1 + resolution: "copy-text-to-clipboard@npm:3.0.1" + checksum: 4c301b9a65c8bf337e26a74d28849096651697fac829a364c463df81ba5ddfeea0741214f9f1232832fffd229ebd5659d3abcccea3fe54d7010a22e515cc38bc + languageName: node + linkType: hard + +"copy-webpack-plugin@npm:^11.0.0": + version: 11.0.0 + resolution: "copy-webpack-plugin@npm:11.0.0" + 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 + peerDependencies: + webpack: ^5.1.0 + checksum: df4f8743f003a29ee7dd3d9b1789998a3a99051c92afb2ba2203d3dacfa696f4e757b275560fafb8f206e520a0aa78af34b990324a0e36c2326cefdeef3ca82e + languageName: node + linkType: hard + +"core-js-compat@npm:^3.25.1": + version: 3.26.1 + resolution: "core-js-compat@npm:3.26.1" + dependencies: + browserslist: ^4.21.4 + checksum: f222bce0002eae405327d68286e1d566037e8ac21906a47d7ecd15858adca7b12e82140db11dc43c8cc1fc066c5306120f3c27bfb2d7dbc2d20a72a2d90d38dc + languageName: node + linkType: hard + +"core-js-pure@npm:^3.25.1": + version: 3.26.1 + resolution: "core-js-pure@npm:3.26.1" + checksum: d88c40e5e29e413c11d1ef991a8d5b6a63f00bd94707af0f649d3fc18b3524108b202f4ae75ce77620a1557d1ba340bc3362b4f25d590eccc37cf80fc75f7cd4 + languageName: node + linkType: hard + +"core-js@npm:^3.23.3": + version: 3.26.1 + resolution: "core-js@npm:3.26.1" + checksum: 0a01149f51ff1e9f41d1ea49cc4c9222047949ea597189ede7c4cf8cde3b097766b9c7615acc77c86fe65b4002f20b638a133dfba7b41dba830d707aeeed45ad + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cosmiconfig@npm:^6.0.0": + version: 6.0.0 + resolution: "cosmiconfig@npm:6.0.0" + dependencies: + "@types/parse-json": ^4.0.0 + import-fresh: ^3.1.0 + parse-json: ^5.0.0 + path-type: ^4.0.0 + yaml: ^1.7.2 + checksum: 8eed7c854b91643ecb820767d0deb038b50780ecc3d53b0b19e03ed8aabed4ae77271198d1ae3d49c3b110867edf679f5faad924820a8d1774144a87cb6f98fc + languageName: node + linkType: hard + +"cosmiconfig@npm:^7.0.0, cosmiconfig@npm:^7.0.1": + version: 7.1.0 + resolution: "cosmiconfig@npm:7.1.0" + 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 + checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-fetch@npm:^3.1.5": + version: 3.1.5 + resolution: "cross-fetch@npm:3.1.5" + dependencies: + node-fetch: 2.6.7 + checksum: f6b8c6ee3ef993ace6277fd789c71b6acf1b504fd5f5c7128df4ef2f125a429e29cd62dc8c127523f04a5f2fa4771ed80e3f3d9695617f441425045f505cf3bb + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"crypto-random-string@npm:^2.0.0": + version: 2.0.0 + resolution: "crypto-random-string@npm:2.0.0" + checksum: 0283879f55e7c16fdceacc181f87a0a65c53bc16ffe1d58b9d19a6277adcd71900d02bb2c4843dd55e78c51e30e89b0fec618a7f170ebcc95b33182c28f05fd6 + languageName: node + linkType: hard + +"css-declaration-sorter@npm:^6.3.1": + version: 6.3.1 + resolution: "css-declaration-sorter@npm:6.3.1" + peerDependencies: + postcss: ^8.0.9 + checksum: ff0d9989ee21ec4c42430b9bb86c43f973ed5024d68f30edc1e3fb07a22828ce3c3e5b922019f2ccbff606722e43c407c5c76e3cddac523ac4afcb31e4b2601c + languageName: node + linkType: hard + +"css-loader@npm:^6.7.1": + version: 6.7.2 + resolution: "css-loader@npm:6.7.2" + dependencies: + icss-utils: ^5.1.0 + postcss: ^8.4.18 + 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.2.0 + semver: ^7.3.8 + peerDependencies: + webpack: ^5.0.0 + checksum: f3c980cc9c033a02e60df7e5a2f33a1e8c2c3dd552f017485d2d81b383be623ae8c4189404e7a4a7403b52744683ae4b516def0f7ccf125c2b198cb647e46543 + languageName: node + linkType: hard + +"css-minimizer-webpack-plugin@npm:^4.0.0": + version: 4.2.2 + resolution: "css-minimizer-webpack-plugin@npm:4.2.2" + dependencies: + cssnano: ^5.1.8 + jest-worker: ^29.1.2 + postcss: ^8.4.17 + schema-utils: ^4.0.0 + serialize-javascript: ^6.0.0 + source-map: ^0.6.1 + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + "@parcel/css": + optional: true + "@swc/css": + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + lightningcss: + optional: true + checksum: 5417e76a445f35832aa96807c835b8e92834a6cd285b1b788dfe3ca0fa90fec7eb2dd6efa9d3649f9d8244b99b7da2d065951603b94918e8f6a366a5049cacdd + languageName: node + linkType: hard + +"css-select@npm:^4.1.3": + version: 4.3.0 + resolution: "css-select@npm:4.3.0" + dependencies: + boolbase: ^1.0.0 + css-what: ^6.0.1 + domhandler: ^4.3.1 + domutils: ^2.8.0 + nth-check: ^2.0.1 + checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0 + languageName: node + linkType: hard + +"css-select@npm:^5.1.0": + version: 5.1.0 + resolution: "css-select@npm:5.1.0" + dependencies: + boolbase: ^1.0.0 + css-what: ^6.1.0 + domhandler: ^5.0.2 + domutils: ^3.0.1 + nth-check: ^2.0.1 + checksum: 2772c049b188d3b8a8159907192e926e11824aea525b8282981f72ba3f349cf9ecd523fdf7734875ee2cb772246c22117fc062da105b6d59afe8dcd5c99c9bda + languageName: node + linkType: hard + +"css-tree@npm:^1.1.2, css-tree@npm:^1.1.3": + version: 1.1.3 + resolution: "css-tree@npm:1.1.3" + dependencies: + mdn-data: 2.0.14 + source-map: ^0.6.1 + checksum: 79f9b81803991b6977b7fcb1588799270438274d89066ce08f117f5cdb5e20019b446d766c61506dd772c839df84caa16042d6076f20c97187f5abe3b50e7d1f + languageName: node + linkType: hard + +"css-what@npm:^6.0.1, css-what@npm:^6.1.0": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 + languageName: node + linkType: hard + +"cssnano-preset-advanced@npm:^5.3.8": + version: 5.3.9 + resolution: "cssnano-preset-advanced@npm:5.3.9" + dependencies: + autoprefixer: ^10.4.12 + cssnano-preset-default: ^5.2.13 + postcss-discard-unused: ^5.1.0 + postcss-merge-idents: ^5.1.1 + postcss-reduce-idents: ^5.2.0 + postcss-zindex: ^5.1.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 094eb446107254b14f46257068376078c6daa0828c154df0a1d5cc6eabf13bd6015ce84be5de9c2cc34c60383dd27335c0496cecd1a30ce7557a6c5db4502d2d + languageName: node + linkType: hard + +"cssnano-preset-default@npm:^5.2.13": + version: 5.2.13 + resolution: "cssnano-preset-default@npm:5.2.13" + dependencies: + css-declaration-sorter: ^6.3.1 + cssnano-utils: ^3.1.0 + postcss-calc: ^8.2.3 + postcss-colormin: ^5.3.0 + postcss-convert-values: ^5.1.3 + postcss-discard-comments: ^5.1.2 + postcss-discard-duplicates: ^5.1.0 + postcss-discard-empty: ^5.1.1 + postcss-discard-overridden: ^5.1.0 + postcss-merge-longhand: ^5.1.7 + postcss-merge-rules: ^5.1.3 + postcss-minify-font-values: ^5.1.0 + postcss-minify-gradients: ^5.1.1 + postcss-minify-params: ^5.1.4 + postcss-minify-selectors: ^5.2.1 + postcss-normalize-charset: ^5.1.0 + postcss-normalize-display-values: ^5.1.0 + postcss-normalize-positions: ^5.1.1 + postcss-normalize-repeat-style: ^5.1.1 + postcss-normalize-string: ^5.1.0 + postcss-normalize-timing-functions: ^5.1.0 + postcss-normalize-unicode: ^5.1.1 + postcss-normalize-url: ^5.1.0 + postcss-normalize-whitespace: ^5.1.1 + postcss-ordered-values: ^5.1.3 + postcss-reduce-initial: ^5.1.1 + postcss-reduce-transforms: ^5.1.0 + postcss-svgo: ^5.1.0 + postcss-unique-selectors: ^5.1.1 + peerDependencies: + postcss: ^8.2.15 + checksum: f773de44f67f71e7301e1f4b4664b894c3a48bba4dadc16c559acd0b14ceafed228bdc76fe19d500b0ded9394732377069daadff2184465fa369f8dfd72d47e2 + languageName: node + linkType: hard + +"cssnano-utils@npm:^3.1.0": + version: 3.1.0 + resolution: "cssnano-utils@npm:3.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 975c84ce9174cf23bb1da1e9faed8421954607e9ea76440cd3bb0c1bea7e17e490d800fca5ae2812d1d9e9d5524eef23ede0a3f52497d7ccc628e5d7321536f2 + languageName: node + linkType: hard + +"cssnano@npm:^5.1.12, cssnano@npm:^5.1.8": + version: 5.1.14 + resolution: "cssnano@npm:5.1.14" + dependencies: + cssnano-preset-default: ^5.2.13 + lilconfig: ^2.0.3 + yaml: ^1.10.2 + peerDependencies: + postcss: ^8.2.15 + checksum: 73463c723c5e598b37b8b4d2f014145bd72133e6581349a1b154904e0830e58de17afb1e801ed3ea3b18e386883964ce4d0299e43d4dc37d339214a956c6697f + languageName: node + linkType: hard + +"csso@npm:^4.2.0": + version: 4.2.0 + resolution: "csso@npm:4.2.0" + dependencies: + css-tree: ^1.1.2 + checksum: 380ba9663da3bcea58dee358a0d8c4468bb6539be3c439dc266ac41c047217f52fd698fb7e4b6b6ccdfb8cf53ef4ceed8cc8ceccb8dfca2aa628319826b5b998 + languageName: node + linkType: hard + +"csstype@npm:^3.0.2": + version: 3.1.1 + resolution: "csstype@npm:3.1.1" + checksum: 1f7b4f5fdd955b7444b18ebdddf3f5c699159f13e9cf8ac9027ae4a60ae226aef9bbb14a6e12ca7dba3358b007cee6354b116e720262867c398de6c955ea451d + languageName: node + linkType: hard + +"debug@npm:2.6.9, debug@npm:^2.6.0": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.3": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"decompress-response@npm:^3.3.0": + version: 3.3.0 + resolution: "decompress-response@npm:3.3.0" + dependencies: + mimic-response: ^1.0.0 + checksum: 952552ac3bd7de2fc18015086b09468645c9638d98a551305e485230ada278c039c91116e946d07894b39ee53c0f0d5b6473f25a224029344354513b412d7380 + languageName: node + linkType: hard + +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: ^3.1.0 + checksum: d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.2.2 + resolution: "deepmerge@npm:4.2.2" + checksum: a8c43a1ed8d6d1ed2b5bf569fa4c8eb9f0924034baf75d5d406e47e157a451075c4db353efea7b6bcc56ec48116a8ce72fccf867b6e078e7c561904b5897530b + languageName: node + linkType: hard + +"default-gateway@npm:^6.0.3": + version: 6.0.3 + resolution: "default-gateway@npm:6.0.3" + dependencies: + execa: ^5.0.0 + checksum: 126f8273ecac8ee9ff91ea778e8784f6cd732d77c3157e8c5bdd6ed03651b5291f71446d05bc02d04073b1e67583604db5394ea3cf992ede0088c70ea15b7378 + languageName: node + linkType: hard + +"defer-to-connect@npm:^1.0.1": + version: 1.1.3 + resolution: "defer-to-connect@npm:1.1.3" + checksum: 9491b301dcfa04956f989481ba7a43c2231044206269eb4ab64a52d6639ee15b1252262a789eb4239fb46ab63e44d4e408641bae8e0793d640aee55398cb3930 + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.4": + version: 1.1.4 + resolution: "define-properties@npm:1.1.4" + dependencies: + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: ce0aef3f9eb193562b5cfb79b2d2c86b6a109dfc9fdcb5f45d680631a1a908c06824ddcdb72b7573b54e26ace07f0a23420aaba0d5c627b34d2c1de8ef527e2b + languageName: node + linkType: hard + +"del@npm:^6.1.1": + version: 6.1.1 + resolution: "del@npm:6.1.1" + 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 + checksum: 563288b73b8b19a7261c47fd21a330eeab6e2acd7c6208c49790dfd369127120dd7836cdf0c1eca216b77c94782a81507eac6b4734252d3bef2795cb366996b6 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"depd@npm:2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a + languageName: node + linkType: hard + +"depd@npm:^1.1.2, depd@npm:~1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 + languageName: node + linkType: hard + +"detab@npm:2.0.4": + version: 2.0.4 + resolution: "detab@npm:2.0.4" + dependencies: + repeat-string: ^1.5.4 + checksum: 34b077521ecd4c6357d32ff7923be644d34aa6f6b7d717d40ec4a9168243eefaea2b512a75a460a6f70c31b0bbc31ff90f820a891803b4ddaf99e9d04d0d389d + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.1": + version: 2.0.1 + resolution: "detect-libc@npm:2.0.1" + checksum: ccb05fcabbb555beb544d48080179c18523a343face9ee4e1a86605a8715b4169f94d663c21a03c310ac824592f2ba9a5270218819bb411ad7be578a527593d7 + languageName: node + linkType: hard + +"detect-node@npm:^2.0.4": + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e + languageName: node + linkType: hard + +"detect-port-alt@npm:^1.1.6": + version: 1.1.6 + resolution: "detect-port-alt@npm:1.1.6" + dependencies: + address: ^1.0.1 + debug: ^2.6.0 + bin: + detect: ./bin/detect-port + detect-port: ./bin/detect-port + checksum: 9dc37b1fa4a9dd6d4889e1045849b8d841232b598d1ca888bf712f4035b07a17cf6d537465a0d7323250048d3a5a0540e3b7cf89457efc222f96f77e2c40d16a + languageName: node + linkType: hard + +"detect-port@npm:^1.3.0": + version: 1.5.1 + resolution: "detect-port@npm:1.5.1" + dependencies: + address: ^1.0.1 + debug: 4 + bin: + detect: bin/detect-port.js + detect-port: bin/detect-port.js + checksum: b48da9340481742547263d5d985e65d078592557863402ecf538511735e83575867e94f91fe74405ea19b61351feb99efccae7e55de9a151d5654e3417cea05b + languageName: node + linkType: hard + +"devportal@workspace:.": + version: 0.0.0-use.local + resolution: "devportal@workspace:." + dependencies: + "@docusaurus/core": ^2.3.1 + "@docusaurus/plugin-client-redirects": ^2.3.1 + "@docusaurus/plugin-content-docs": ^2.3.1 + "@docusaurus/plugin-ideal-image": ^2.3.1 + "@docusaurus/preset-classic": ^2.3.1 + "@docusaurus/theme-search-algolia": ^2.3.1 + "@mdx-js/react": ^1.6.22 + "@popperjs/core": ^2.11.2 + "@types/node-fetch": ^2.5.12 + clsx: ^1.1.1 + node-fetch: ^2.6.7 + react: ^17.0.2 + react-dom: ^17.0.2 + react-popper: ^2.2.5 + ts-node: ^10.4.0 + typescript: ^4.5.3 + languageName: unknown + linkType: soft + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"dns-equal@npm:^1.0.0": + version: 1.0.0 + resolution: "dns-equal@npm:1.0.0" + checksum: a8471ac849c7c13824f053babea1bc26e2f359394dd5a460f8340d8abd13434be01e3327a5c59d212f8c8997817450efd3f3ac77bec709b21979cf0235644524 + languageName: node + linkType: hard + +"dns-packet@npm:^5.2.2": + version: 5.4.0 + resolution: "dns-packet@npm:5.4.0" + dependencies: + "@leichtgewicht/ip-codec": ^2.0.1 + checksum: a169963848e8539dfd8a19058562f9e1c15c0f82cbf76fa98942f11c46f3c74e7e7c82e3a8a5182d4c9e6ff19e21be738dbd098a876dde755d3aedd2cc730880 + languageName: node + linkType: hard + +"dom-converter@npm:^0.2.0": + version: 0.2.0 + resolution: "dom-converter@npm:0.2.0" + dependencies: + utila: ~0.4 + checksum: ea52fe303f5392e48dea563abef0e6fb3a478b8dbe3c599e99bb5d53981c6c38fc4944e56bb92a8ead6bb989d10b7914722ae11febbd2fd0910e33b9fc4aaa77 + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.2.0 + entities: ^2.0.0 + checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 + languageName: node + linkType: hard + +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + entities: ^4.2.0 + checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + languageName: node + linkType: hard + +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: ^2.2.0 + checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa + languageName: node + linkType: hard + +"domhandler@npm:^5.0.1, domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: ^2.3.0 + checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c + languageName: node + linkType: hard + +"domutils@npm:^2.5.2, domutils@npm:^2.8.0": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: ^1.0.1 + domelementtype: ^2.2.0 + domhandler: ^4.2.0 + checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 + languageName: node + linkType: hard + +"domutils@npm:^3.0.1": + version: 3.0.1 + resolution: "domutils@npm:3.0.1" + dependencies: + dom-serializer: ^2.0.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.1 + checksum: 23aa7a840572d395220e173cb6263b0d028596e3950100520870a125af33ff819e6f609e1606d6f7d73bd9e7feb03bb404286e57a39063b5384c62b724d987b3 + languageName: node + linkType: hard + +"dot-case@npm:^3.0.4": + version: 3.0.4 + resolution: "dot-case@npm:3.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + checksum: a65e3519414856df0228b9f645332f974f2bf5433370f544a681122eab59e66038fc3349b4be1cdc47152779dac71a5864f1ccda2f745e767c46e9c6543b1169 + languageName: node + linkType: hard + +"dot-prop@npm:^5.2.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: ^2.0.0 + checksum: d5775790093c234ef4bfd5fbe40884ff7e6c87573e5339432870616331189f7f5d86575c5b5af2dcf0f61172990f4f734d07844b1f23482fff09e3c4bead05ea + languageName: node + linkType: hard + +"duplexer3@npm:^0.1.4": + version: 0.1.5 + resolution: "duplexer3@npm:0.1.5" + checksum: e677cb4c48f031ca728601d6a20bf6aed4c629d69ef9643cb89c67583d673c4ec9317cc6427501f38bd8c368d3a18f173987cc02bd99d8cf8fe3d94259a22a20 + languageName: node + linkType: hard + +"duplexer@npm:^0.1.2": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.251": + version: 1.4.284 + resolution: "electron-to-chromium@npm:1.4.284" + checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"emojis-list@npm:^3.0.0": + version: 3.0.0 + resolution: "emojis-list@npm:3.0.0" + checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70 + languageName: node + linkType: hard + +"emoticon@npm:^3.2.0": + version: 3.2.0 + resolution: "emoticon@npm:3.2.0" + checksum: f30649d18b672ab3139e95cb04f77b2442feb95c99dc59372ff80fbfd639b2bf4018bc68ab0b549bd765aecf8230d7899c43f86cfcc7b6370c06c3232783e24f + languageName: node + linkType: hard + +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.10.0": + version: 5.12.0 + resolution: "enhanced-resolve@npm:5.12.0" + dependencies: + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: bf3f787facaf4ce3439bef59d148646344e372bef5557f0d37ea8aa02c51f50a925cd1f07b8d338f18992c29f544ec235a8c64bcdb56030196c48832a5494174 + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 + languageName: node + linkType: hard + +"entities@npm:^4.2.0, entities@npm:^4.3.0, entities@npm:^4.4.0": + version: 4.4.0 + resolution: "entities@npm:4.4.0" + checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"es-module-lexer@npm:^0.9.0": + version: 0.9.3 + resolution: "es-module-lexer@npm:0.9.3" + checksum: 84bbab23c396281db2c906c766af58b1ae2a1a2599844a504df10b9e8dc77ec800b3211fdaa133ff700f5703d791198807bba25d9667392d27a5e9feda344da8 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 + languageName: node + linkType: hard + +"escape-goat@npm:^2.0.0": + version: 2.1.1 + resolution: "escape-goat@npm:2.1.1" + checksum: ce05c70c20dd7007b60d2d644b625da5412325fdb57acf671ba06cb2ab3cd6789e2087026921a05b665b0a03fadee2955e7fc0b9a67da15a6551a980b260eba7 + languageName: node + linkType: hard + +"escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^4.1.1 + checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 + languageName: node + linkType: hard + +"estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"eta@npm:^2.0.0": + version: 2.0.0 + resolution: "eta@npm:2.0.0" + checksum: ab8e93af73f0d4917485976aa8fcac68e730c47e9aa54a720c21c2e9087cdcd5f984a50cf5e04d189757612df014a229fa047a437651c9eea31e0b6bf1afe56b + languageName: node + linkType: hard + +"etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff + languageName: node + linkType: hard + +"eval@npm:^0.1.8": + version: 0.1.8 + resolution: "eval@npm:0.1.8" + dependencies: + "@types/node": "*" + require-like: ">= 0.1.1" + checksum: d005567f394cfbe60948e34982e4637d2665030f9aa7dcac581ea6f9ec6eceb87133ed3dc0ae21764aa362485c242a731dbb6371f1f1a86807c58676431e9d1a + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.0": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + languageName: node + linkType: hard + +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + +"execa@npm:^5.0.0": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.0 + human-signals: ^2.1.0 + is-stream: ^2.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^4.0.1 + onetime: ^5.1.2 + signal-exit: ^3.0.3 + strip-final-newline: ^2.0.0 + checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 + languageName: node + linkType: hard + +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 588c19847216421ed92befb521767b7018dc88f88b0576df98cb242f20961425e96a92cbece525ef28cc5becceae5d544ae0f5b9b5e2aa05acb13716ca5b3099 + languageName: node + linkType: hard + +"express@npm:^4.17.3": + version: 4.18.2 + resolution: "express@npm:4.18.2" + dependencies: + accepts: ~1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: ~1.0.4 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: ~1.1.2 + on-finished: 2.4.1 + parseurl: ~1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: ~2.0.7 + qs: 6.11.0 + range-parser: ~1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: ~1.6.18 + utils-merge: 1.0.1 + vary: ~1.1.2 + checksum: 3c4b9b076879442f6b968fe53d85d9f1eeacbb4f4c41e5f16cc36d77ce39a2b0d81b3f250514982110d815b2f7173f5561367f9110fcc541f9371948e8c8b037 + languageName: node + linkType: hard + +"extend-shallow@npm:^2.0.1": + version: 2.0.1 + resolution: "extend-shallow@npm:2.0.1" + dependencies: + is-extendable: ^0.1.0 + checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 + languageName: node + linkType: hard + +"extend@npm:^3.0.0": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9": + version: 3.2.12 + resolution: "fast-glob@npm:3.2.12" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-url-parser@npm:1.1.3": + version: 1.1.3 + resolution: "fast-url-parser@npm:1.1.3" + dependencies: + punycode: ^1.3.2 + checksum: 5043d0c4a8d775ff58504d56c096563c11b113e4cb8a2668c6f824a1cd4fb3812e2fdf76537eb24a7ce4ae7def6bd9747da630c617cf2a4b6ce0c42514e4f21c + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.13.0 + resolution: "fastq@npm:1.13.0" + dependencies: + reusify: ^1.0.4 + checksum: 32cf15c29afe622af187d12fc9cd93e160a0cb7c31a3bb6ace86b7dea3b28e7b72acde89c882663f307b2184e14782c6c664fa315973c03626c7d4bff070bb0b + languageName: node + linkType: hard + +"faye-websocket@npm:^0.11.3": + version: 0.11.4 + resolution: "faye-websocket@npm:0.11.4" + dependencies: + websocket-driver: ">=0.5.1" + checksum: d49a62caf027f871149fc2b3f3c7104dc6d62744277eb6f9f36e2d5714e847d846b9f7f0d0b7169b25a012e24a594cde11a93034b30732e4c683f20b8a5019fa + languageName: node + linkType: hard + +"fbemitter@npm:^3.0.0": + version: 3.0.0 + resolution: "fbemitter@npm:3.0.0" + dependencies: + fbjs: ^3.0.0 + checksum: 069690b8cdff3521ade3c9beb92ba0a38d818a86ef36dff8690e66749aef58809db4ac0d6938eb1cacea2dbef5f2a508952d455669590264cdc146bbe839f605 + languageName: node + linkType: hard + +"fbjs-css-vars@npm:^1.0.0": + version: 1.0.2 + resolution: "fbjs-css-vars@npm:1.0.2" + checksum: 72baf6d22c45b75109118b4daecb6c8016d4c83c8c0f23f683f22e9d7c21f32fff6201d288df46eb561e3c7d4bb4489b8ad140b7f56444c453ba407e8bd28511 + languageName: node + linkType: hard + +"fbjs@npm:^3.0.0, fbjs@npm:^3.0.1": + version: 3.0.4 + resolution: "fbjs@npm:3.0.4" + dependencies: + cross-fetch: ^3.1.5 + 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.30 + checksum: 8b23a3550fcda8a9109fca9475a3416590c18bb6825ea884192864ed686f67fcd618e308a140c9e5444fbd0168732e1ff3c092ba3d0c0ae1768969f32ba280c7 + languageName: node + linkType: hard + +"feed@npm:^4.2.2": + version: 4.2.2 + resolution: "feed@npm:4.2.2" + dependencies: + xml-js: ^1.6.11 + checksum: 2e6992a675a049511eef7bda8ca6c08cb9540cd10e8b275ec4c95d166228ec445a335fa8de990358759f248a92861e51decdcd32bf1c54737d5b7aed7c7ffe97 + languageName: node + linkType: hard + +"file-loader@npm:^6.2.0": + version: 6.2.0 + resolution: "file-loader@npm:6.2.0" + dependencies: + loader-utils: ^2.0.0 + schema-utils: ^3.0.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: faf43eecf233f4897b0150aaa874eeeac214e4f9de49738a9e0ef734a30b5260059e85b7edadf852b98e415f875bd5f12587768a93fd52aaf2e479ecf95fab20 + languageName: node + linkType: hard + +"filesize@npm:^8.0.6": + version: 8.0.7 + resolution: "filesize@npm:8.0.7" + checksum: 8603d27c5287b984cb100733640645e078f5f5ad65c6d913173e01fb99e09b0747828498fd86647685ccecb69be31f3587b9739ab1e50732116b2374aff4cbf9 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"finalhandler@npm:1.2.0": + version: 1.2.0 + resolution: "finalhandler@npm:1.2.0" + dependencies: + debug: 2.6.9 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + on-finished: 2.4.1 + parseurl: ~1.3.3 + statuses: 2.0.1 + unpipe: ~1.0.0 + checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 + languageName: node + linkType: hard + +"find-cache-dir@npm:^3.3.1": + version: 3.3.2 + resolution: "find-cache-dir@npm:3.3.2" + dependencies: + commondir: ^1.0.1 + make-dir: ^3.0.2 + pkg-dir: ^4.1.0 + checksum: 1e61c2e64f5c0b1c535bd85939ae73b0e5773142713273818cc0b393ee3555fb0fd44e1a5b161b8b6c3e03e98c2fcc9c227d784850a13a90a8ab576869576817 + languageName: node + linkType: hard + +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: ^3.0.0 + checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flux@npm:^4.0.1": + version: 4.0.3 + resolution: "flux@npm:4.0.3" + dependencies: + fbemitter: ^3.0.0 + fbjs: ^3.0.1 + peerDependencies: + react: ^15.0.2 || ^16.0.0 || ^17.0.0 + checksum: 6b3f5150bcce481ce5bc09e54dbe4bf2a052f9fbc04c1de64f8d816adc4f90ad7955d9aed0022c7b6a2ed11b809ac40527bb50c2cd89c23d42f56694abe20748 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.7": + version: 1.15.2 + resolution: "follow-redirects@npm:1.15.2" + peerDependenciesMeta: + debug: + optional: true + checksum: faa66059b66358ba65c234c2f2a37fcec029dc22775f35d9ad6abac56003268baf41e55f9ee645957b32c7d9f62baf1f0b906e68267276f54ec4b4c597c2b190 + languageName: node + linkType: hard + +"fork-ts-checker-webpack-plugin@npm:^6.5.0": + version: 6.5.2 + resolution: "fork-ts-checker-webpack-plugin@npm:6.5.2" + dependencies: + "@babel/code-frame": ^7.8.3 + "@types/json-schema": ^7.0.5 + chalk: ^4.1.0 + chokidar: ^3.4.2 + cosmiconfig: ^6.0.0 + deepmerge: ^4.2.2 + fs-extra: ^9.0.0 + glob: ^7.1.6 + memfs: ^3.1.2 + minimatch: ^3.0.4 + schema-utils: 2.7.0 + semver: ^7.3.2 + tapable: ^1.0.0 + peerDependencies: + eslint: ">= 6" + typescript: ">= 2.7" + vue-template-compiler: "*" + webpack: ">= 4" + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + checksum: c823de02ee258a26ea5c0c488b2f1825b941f72292417478689862468a9140b209ad7df52f67bd134228fe9f40e9115b604fc8f88a69338929fe52be869469b6 + languageName: node + linkType: hard + +"form-data@npm:^3.0.0": + version: 3.0.1 + resolution: "form-data@npm:3.0.1" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d + languageName: node + linkType: hard + +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6 + languageName: node + linkType: hard + +"fraction.js@npm:^4.2.0": + version: 4.2.0 + resolution: "fraction.js@npm:4.2.0" + checksum: 8c76a6e21dedea87109d6171a0ac77afa14205794a565d71cb10d2925f629a3922da61bf45ea52dbc30bce4d8636dc0a27213a88cbd600eab047d82f9a3a94c5 + languageName: node + linkType: hard + +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d + languageName: node + linkType: hard + +"fs-extra@npm:^10.1.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 + languageName: node + linkType: hard + +"fs-extra@npm:^9.0.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-monkey@npm:^1.0.3": + version: 1.0.3 + resolution: "fs-monkey@npm:1.0.3" + checksum: cf50804833f9b88a476911ae911fe50f61a98d986df52f890bd97e7262796d023698cb2309fa9b74fdd8974f04315b648748a0a8ee059e7d5257b293bfc409c0 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: latest + checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.1, gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1": + version: 1.1.3 + resolution: "get-intrinsic@npm:1.1.3" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-symbols: ^1.0.3 + checksum: 152d79e87251d536cf880ba75cfc3d6c6c50e12b3a64e1ea960e73a3752b47c69f46034456eae1b0894359ce3bc64c55c186f2811f8a788b75b638b06fab228a + languageName: node + linkType: hard + +"get-own-enumerable-property-symbols@npm:^3.0.0": + version: 3.0.2 + resolution: "get-own-enumerable-property-symbols@npm:3.0.2" + checksum: 8f0331f14159f939830884799f937343c8c0a2c330506094bc12cbee3665d88337fe97a4ea35c002cc2bdba0f5d9975ad7ec3abb925015cdf2a93e76d4759ede + languageName: node + linkType: hard + +"get-stream@npm:^4.1.0": + version: 4.1.0 + resolution: "get-stream@npm:4.1.0" + dependencies: + pump: ^3.0.0 + checksum: 443e1914170c15bd52ff8ea6eff6dfc6d712b031303e36302d2778e3de2506af9ee964d6124010f7818736dcfde05c04ba7ca6cc26883106e084357a17ae7d73 + languageName: node + linkType: hard + +"get-stream@npm:^5.1.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: ^3.0.0 + checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 14e448192a35c1e42efee94c9d01a10f42fe790375891a24b25261246ce9336ab9df5d274585aedd4568f7922246c2a78b8a8cd2571bfe99c693a9718e7dd0e3 + languageName: node + linkType: hard + +"github-slugger@npm:^1.4.0": + version: 1.5.0 + resolution: "github-slugger@npm:1.5.0" + checksum: c70988224578b3bdaa25df65973ffc8c24594a77a28550c3636e495e49d17aef5cdb04c04fa3f1744babef98c61eecc6a43299a13ea7f3cc33d680bf9053ffbe + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.1": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 + languageName: node + linkType: hard + +"glob@npm:^7.0.0, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.1.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"glob@npm:^8.0.1": + version: 8.0.3 + resolution: "glob@npm:8.0.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^5.0.1 + once: ^1.3.0 + checksum: 50bcdea19d8e79d8de5f460b1939ffc2b3299eac28deb502093fdca22a78efebc03e66bf54f0abc3d3d07d8134d19a32850288b7440d77e072aa55f9d33b18c5 + languageName: node + linkType: hard + +"global-dirs@npm:^3.0.0": + version: 3.0.1 + resolution: "global-dirs@npm:3.0.1" + dependencies: + ini: 2.0.0 + checksum: 70147b80261601fd40ac02a104581432325c1c47329706acd773f3a6ce99bb36d1d996038c85ccacd482ad22258ec233c586b6a91535b1a116b89663d49d6438 + languageName: node + linkType: hard + +"global-modules@npm:^2.0.0": + version: 2.0.0 + resolution: "global-modules@npm:2.0.0" + dependencies: + global-prefix: ^3.0.0 + checksum: d6197f25856c878c2fb5f038899f2dca7cbb2f7b7cf8999660c0104972d5cfa5c68b5a0a77fa8206bb536c3903a4615665acb9709b4d80846e1bb47eaef65430 + languageName: node + linkType: hard + +"global-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "global-prefix@npm:3.0.0" + dependencies: + ini: ^1.3.5 + kind-of: ^6.0.2 + which: ^1.3.1 + checksum: 8a82fc1d6f22c45484a4e34656cc91bf021a03e03213b0035098d605bfc612d7141f1e14a21097e8a0413b4884afd5b260df0b6a25605ce9d722e11f1df2881d + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globby@npm:^11.0.1, globby@npm:^11.0.4, globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"globby@npm:^13.1.1": + version: 13.1.2 + resolution: "globby@npm:13.1.2" + dependencies: + dir-glob: ^3.0.1 + fast-glob: ^3.2.11 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^4.0.0 + checksum: c148fcda0c981f00fb434bb94ca258f0a9d23cedbde6fb3f37098e1abde5b065019e2c63fe2aa2fad4daf2b54bf360b4d0423d85fb3a63d09ed75a2837d4de0f + languageName: node + linkType: hard + +"got@npm:^9.6.0": + version: 9.6.0 + resolution: "got@npm:9.6.0" + 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 + checksum: 941807bd9704bacf5eb401f0cc1212ffa1f67c6642f2d028fd75900471c221b1da2b8527f4553d2558f3faeda62ea1cf31665f8b002c6137f5de8732f07370b0 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da + languageName: node + linkType: hard + +"gray-matter@npm:^4.0.3": + version: 4.0.3 + resolution: "gray-matter@npm:4.0.3" + dependencies: + js-yaml: ^3.13.1 + kind-of: ^6.0.2 + section-matter: ^1.0.0 + strip-bom-string: ^1.0.0 + checksum: 37717bd424344487d655392251ce8d8878a1275ee087003e61208fba3bfd59cbb73a85b2159abf742ae95e23db04964813fdc33ae18b074208428b2528205222 + languageName: node + linkType: hard + +"gzip-size@npm:^6.0.0": + version: 6.0.0 + resolution: "gzip-size@npm:6.0.0" + dependencies: + duplexer: ^0.1.2 + checksum: 2df97f359696ad154fc171dcb55bc883fe6e833bca7a65e457b9358f3cb6312405ed70a8da24a77c1baac0639906cd52358dc0ce2ec1a937eaa631b934c94194 + languageName: node + linkType: hard + +"handle-thing@npm:^2.0.0": + version: 2.0.1 + resolution: "handle-thing@npm:2.0.1" + checksum: 68071f313062315cd9dce55710e9496873945f1dd425107007058fc1629f93002a7649fcc3e464281ce02c7e809a35f5925504ab8105d972cf649f1f47cb7d6c + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0": + version: 1.0.0 + resolution: "has-property-descriptors@npm:1.0.0" + dependencies: + get-intrinsic: ^1.1.1 + checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"has-yarn@npm:^2.1.0": + version: 2.1.0 + resolution: "has-yarn@npm:2.1.0" + checksum: 5eb1d0bb8518103d7da24532bdbc7124ffc6d367b5d3c10840b508116f2f1bcbcf10fd3ba843ff6e2e991bdf9969fd862d42b2ed58aade88343326c950b7e7f7 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: ^1.1.1 + checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 + languageName: node + linkType: hard + +"hast-to-hyperscript@npm:^9.0.0": + version: 9.0.1 + resolution: "hast-to-hyperscript@npm:9.0.1" + 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 + checksum: de570d789853018fff2fd38fc096549b9814e366b298f60c90c159a57018230eefc44d46a246027b0e2426ed9e99f2e270050bc183d5bdfe4c9487c320b392cd + languageName: node + linkType: hard + +"hast-util-from-parse5@npm:^6.0.0": + version: 6.0.1 + resolution: "hast-util-from-parse5@npm:6.0.1" + 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 + checksum: 4daa78201468af7779161e7caa2513c329830778e0528481ab16b3e1bcef4b831f6285b526aacdddbee802f3bd9d64df55f80f010591ea1916da535e3a923b83 + languageName: node + linkType: hard + +"hast-util-parse-selector@npm:^2.0.0": + version: 2.2.5 + resolution: "hast-util-parse-selector@npm:2.2.5" + checksum: 22ee4afbd11754562144cb3c4f3ec52524dafba4d90ee52512902d17cf11066d83b38f7bdf6ca571bbc2541f07ba30db0d234657b6ecb8ca4631587466459605 + languageName: node + linkType: hard + +"hast-util-raw@npm:6.0.1": + version: 6.0.1 + resolution: "hast-util-raw@npm:6.0.1" + 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 + checksum: f6d960644f9fbbe0b92d0227b20a24d659cce021d5f9fd218e077154931b4524ee920217b7fd5a45ec2736ec1dee53de9209fe449f6f89454c01d225ff0e7851 + languageName: node + linkType: hard + +"hast-util-to-parse5@npm:^6.0.0": + version: 6.0.0 + resolution: "hast-util-to-parse5@npm:6.0.0" + 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 + checksum: 91a36244e37df1d63c8b7e865ab0c0a25bb7396155602be005cf71d95c348e709568f80e0f891681a3711d733ad896e70642dc41a05b574eddf2e07d285408a8 + languageName: node + linkType: hard + +"hastscript@npm:^6.0.0": + version: 6.0.0 + resolution: "hastscript@npm:6.0.0" + 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 + checksum: 5e50b85af0d2cb7c17979cb1ddca75d6b96b53019dd999b39e7833192c9004201c3cee6445065620ea05d0087d9ae147a4844e582d64868be5bc6b0232dfe52d + languageName: node + linkType: hard + +"he@npm:^1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 + languageName: node + linkType: hard + +"history@npm:^4.9.0": + version: 4.10.1 + resolution: "history@npm:4.10.1" + dependencies: + "@babel/runtime": ^7.1.2 + loose-envify: ^1.2.0 + resolve-pathname: ^3.0.0 + tiny-invariant: ^1.0.2 + tiny-warning: ^1.0.0 + value-equal: ^1.0.1 + checksum: addd84bc4683929bae4400419b5af132ff4e4e9b311a0d4e224579ea8e184a6b80d7f72c55927e4fa117f69076a9e47ce082d8d0b422f1a9ddac7991490ca1d0 + languageName: node + linkType: hard + +"hoist-non-react-statics@npm:^3.1.0": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: ^16.7.0 + checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 + languageName: node + linkType: hard + +"hpack.js@npm:^2.1.6": + version: 2.1.6 + resolution: "hpack.js@npm:2.1.6" + dependencies: + inherits: ^2.0.1 + obuf: ^1.0.0 + readable-stream: ^2.0.1 + wbuf: ^1.1.0 + checksum: 2de144115197967ad6eeee33faf41096c6ba87078703c5cb011632dcfbffeb45784569e0cf02c317bd79c48375597c8ec88c30fff5bb0b023e8f654fb6e9c06e + languageName: node + linkType: hard + +"html-entities@npm:^2.3.2": + version: 2.3.3 + resolution: "html-entities@npm:2.3.3" + checksum: 92521501da8aa5f66fee27f0f022d6e9ceae62667dae93aa6a2f636afa71ad530b7fb24a18d4d6c124c9885970cac5f8a52dbf1731741161002816ae43f98196 + languageName: node + linkType: hard + +"html-minifier-terser@npm:^6.0.2, html-minifier-terser@npm:^6.1.0": + version: 6.1.0 + resolution: "html-minifier-terser@npm:6.1.0" + dependencies: + camel-case: ^4.1.2 + clean-css: ^5.2.2 + commander: ^8.3.0 + he: ^1.2.0 + param-case: ^3.0.4 + relateurl: ^0.2.7 + terser: ^5.10.0 + bin: + html-minifier-terser: cli.js + checksum: ac52c14006476f773204c198b64838477859dc2879490040efab8979c0207424da55d59df7348153f412efa45a0840a1ca3c757bf14767d23a15e3e389d37a93 + languageName: node + linkType: hard + +"html-tags@npm:^3.2.0": + version: 3.2.0 + resolution: "html-tags@npm:3.2.0" + checksum: a0c9e96ac26c84adad9cc66d15d6711a17f60acda8d987218f1d4cbaacd52864939b230e635cce5a1179f3ddab2a12b9231355617dfbae7945fcfec5e96d2041 + languageName: node + linkType: hard + +"html-void-elements@npm:^1.0.0": + version: 1.0.5 + resolution: "html-void-elements@npm:1.0.5" + checksum: 1a56f4f6cfbeb994c21701ff72b4b7f556fe784a70e5e554d1566ff775af83b91ea93f10664f039a67802d9f7b40d4a7f1ed20312bab47bd88d89bd792ea84ca + languageName: node + linkType: hard + +"html-webpack-plugin@npm:^5.5.0": + version: 5.5.0 + resolution: "html-webpack-plugin@npm:5.5.0" + dependencies: + "@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 + peerDependencies: + webpack: ^5.20.0 + checksum: f3d84d0df71fe2f5bac533cc74dce41ab058558cdcc6ff767d166a2abf1cf6fb8491d54d60ddbb34e95c00394e379ba52e0468e0284d1d0cc6a42987056e8219 + languageName: node + linkType: hard + +"htmlparser2@npm:^6.1.0": + version: 6.1.0 + resolution: "htmlparser2@npm:6.1.0" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.0.0 + domutils: ^2.5.2 + entities: ^2.0.0 + checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e + languageName: node + linkType: hard + +"htmlparser2@npm:^8.0.1": + version: 8.0.1 + resolution: "htmlparser2@npm:8.0.1" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + domutils: ^3.0.1 + entities: ^4.3.0 + checksum: 06d5c71e8313597722bc429ae2a7a8333d77bd3ab07ccb916628384b37332027b047f8619448d8f4a3312b6609c6ea3302a4e77435d859e9e686999e6699ca39 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0": + version: 4.1.0 + resolution: "http-cache-semantics@npm:4.1.0" + checksum: 974de94a81c5474be07f269f9fd8383e92ebb5a448208223bfb39e172a9dbc26feff250192ecc23b9593b3f92098e010406b0f24bd4d588d631f80214648ed42 + languageName: node + linkType: hard + +"http-deceiver@npm:^1.2.7": + version: 1.2.7 + resolution: "http-deceiver@npm:1.2.7" + checksum: 64d7d1ae3a6933eb0e9a94e6f27be4af45a53a96c3c34e84ff57113787105a89fff9d1c3df263ef63add823df019b0e8f52f7121e32393bb5ce9a713bf100b41 + languageName: node + linkType: hard + +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 + languageName: node + linkType: hard + +"http-errors@npm:~1.6.2": + version: 1.6.3 + resolution: "http-errors@npm:1.6.3" + dependencies: + depd: ~1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: ">= 1.4.0 < 2" + checksum: a9654ee027e3d5de305a56db1d1461f25709ac23267c6dc28cdab8323e3f96caa58a9a6a5e93ac15d7285cee0c2f019378c3ada9026e7fe19c872d695f27de7c + languageName: node + linkType: hard + +"http-parser-js@npm:>=0.5.1": + version: 0.5.8 + resolution: "http-parser-js@npm:0.5.8" + checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"http-proxy-middleware@npm:^2.0.3": + version: 2.0.6 + resolution: "http-proxy-middleware@npm:2.0.6" + dependencies: + "@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 + peerDependencies: + "@types/express": ^4.17.13 + peerDependenciesMeta: + "@types/express": + optional: true + checksum: 2ee85bc878afa6cbf34491e972ece0f5be0a3e5c98a60850cf40d2a9a5356e1fc57aab6cff33c1fc37691b0121c3a42602d2b1956c52577e87a5b77b62ae1c3a + languageName: node + linkType: hard + +"http-proxy@npm:^1.18.1": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: ^4.0.0 + follow-redirects: ^1.0.0 + requires-port: ^1.0.0 + checksum: f5bd96bf83e0b1e4226633dbb51f8b056c3e6321917df402deacec31dd7fe433914fc7a2c1831cf7ae21e69c90b3a669b8f434723e9e8b71fd68afe30737b6a5 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": + version: 5.1.0 + resolution: "icss-utils@npm:5.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 5c324d283552b1269cfc13a503aaaa172a280f914e5b81544f3803bc6f06a3b585fb79f66f7c771a2c052db7982c18bf92d001e3b47282e3abbbb4c4cc488d68 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.2.1 + resolution: "ignore@npm:5.2.1" + checksum: 7251d00cba49fe88c4f3565fadeb4aa726ba38294a9a79ffed542edc47bafd989d4b2ccf65700c5b1b26a1e91dfc7218fb23017937c79216025d5caeec0ee9d5 + languageName: node + linkType: hard + +"image-size@npm:^1.0.1": + version: 1.0.2 + resolution: "image-size@npm:1.0.2" + dependencies: + queue: 6.0.2 + bin: + image-size: bin/image-size.js + checksum: 01745fdb47f87cecf538e69c63f9adc5bfab30a345345c2de91105f3afbd1bfcfba1256af02bf3323077b33b0004469a837e077bf0cbb9c907e9c1e9e7547585 + languageName: node + linkType: hard + +"immer@npm:^9.0.7": + version: 9.0.16 + resolution: "immer@npm:9.0.16" + checksum: e9a5ca65c929b329da7a3b7beccf7984271cda7bdd47b2cab619eac3277dcd56598c211b55cc340786b6eff0c06652ac018808d9fd744443f06882364dece6bc + languageName: node + linkType: hard + +"import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"import-lazy@npm:^2.1.0": + version: 2.1.0 + resolution: "import-lazy@npm:2.1.0" + checksum: 05294f3b9dd4971d3a996f0d2f176410fb6745d491d6e73376429189f5c1c3d290548116b2960a7cf3e89c20cdf11431739d1d2d8c54b84061980795010e803a + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"infer-owner@npm:^1.0.4": + version: 1.0.4 + resolution: "infer-owner@npm:1.0.4" + checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 + languageName: node + linkType: hard + +"infima@npm:0.2.0-alpha.42": + version: 0.2.0-alpha.42 + resolution: "infima@npm:0.2.0-alpha.42" + checksum: 7206f36639c00a08daab811fedc748068951497efb5ec948cba846fb23856443668015f6bd65ddebe857cc2235f6ca98429f7018c73dcac47b0361ef4721bb8f + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"inherits@npm:2.0.3": + version: 2.0.3 + resolution: "inherits@npm:2.0.3" + checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 + languageName: node + linkType: hard + +"ini@npm:2.0.0": + version: 2.0.0 + resolution: "ini@npm:2.0.0" + checksum: e7aadc5fb2e4aefc666d74ee2160c073995a4061556b1b5b4241ecb19ad609243b9cceafe91bae49c219519394bbd31512516cb22a3b1ca6e66d869e0447e84e + languageName: node + linkType: hard + +"ini@npm:^1.3.5, ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + +"inline-style-parser@npm:0.1.1": + version: 0.1.1 + resolution: "inline-style-parser@npm:0.1.1" + checksum: 5d545056a3e1f2bf864c928a886a0e1656a3517127d36917b973de581bd54adc91b4bf1febcb0da054f204b4934763f1a4e09308b4d55002327cf1d48ac5d966 + languageName: node + linkType: hard + +"interpret@npm:^1.0.0": + version: 1.4.0 + resolution: "interpret@npm:1.4.0" + checksum: 2e5f51268b5941e4a17e4ef0575bc91ed0ab5f8515e3cf77486f7c14d13f3010df9c0959f37063dcc96e78d12dc6b0bb1b9e111cdfe69771f4656d2993d36155 + languageName: node + linkType: hard + +"invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: ^1.0.0 + checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 + languageName: node + linkType: hard + +"ipaddr.js@npm:^2.0.1": + version: 2.0.1 + resolution: "ipaddr.js@npm:2.0.1" + checksum: dd194a394a843d470f88d17191b0948f383ed1c8e320813f850c336a0fcb5e9215d97ec26ca35ab4fbbd31392c8b3467f3e8344628029ed3710b2ff6b5d1034e + languageName: node + linkType: hard + +"is-alphabetical@npm:1.0.4, is-alphabetical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphabetical@npm:1.0.4" + checksum: 6508cce44fd348f06705d377b260974f4ce68c74000e7da4045f0d919e568226dc3ce9685c5a2af272195384df6930f748ce9213fc9f399b5d31b362c66312cb + languageName: node + linkType: hard + +"is-alphanumerical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphanumerical@npm:1.0.4" + dependencies: + is-alphabetical: ^1.0.0 + is-decimal: ^1.0.0 + checksum: e2e491acc16fcf5b363f7c726f666a9538dba0a043665740feb45bba1652457a73441e7c5179c6768a638ed396db3437e9905f403644ec7c468fb41f4813d03f + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + +"is-buffer@npm:^2.0.0": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + languageName: node + linkType: hard + +"is-ci@npm:^2.0.0": + version: 2.0.0 + resolution: "is-ci@npm:2.0.0" + dependencies: + ci-info: ^2.0.0 + bin: + is-ci: bin.js + checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 + languageName: node + linkType: hard + +"is-core-module@npm:^2.9.0": + version: 2.11.0 + resolution: "is-core-module@npm:2.11.0" + dependencies: + has: ^1.0.3 + checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab + languageName: node + linkType: hard + +"is-decimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-decimal@npm:1.0.4" + checksum: ed483a387517856dc395c68403a10201fddcc1b63dc56513fbe2fe86ab38766120090ecdbfed89223d84ca8b1cd28b0641b93cb6597b6e8f4c097a7c24e3fb96 + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-extendable@npm:^0.1.0": + version: 0.1.1 + resolution: "is-extendable@npm:0.1.1" + checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-hexadecimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-hexadecimal@npm:1.0.4" + checksum: a452e047587b6069332d83130f54d30da4faf2f2ebaa2ce6d073c27b5703d030d58ed9e0b729c8e4e5b52c6f1dab26781bb77b7bc6c7805f14f320e328ff8cd5 + languageName: node + linkType: hard + +"is-installed-globally@npm:^0.4.0": + version: 0.4.0 + resolution: "is-installed-globally@npm:0.4.0" + dependencies: + global-dirs: ^3.0.0 + is-path-inside: ^3.0.2 + checksum: 3359840d5982d22e9b350034237b2cda2a12bac1b48a721912e1ab8e0631dd07d45a2797a120b7b87552759a65ba03e819f1bd63f2d7ab8657ec0b44ee0bf399 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-npm@npm:^5.0.0": + version: 5.0.0 + resolution: "is-npm@npm:5.0.0" + checksum: 9baff02b0c69a3d3c79b162cb2f9e67fb40ef6d172c16601b2e2471c21e9a4fa1fc9885a308d7bc6f3a3cd2a324c27fa0bf284c133c3349bb22571ab70d041cc + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-obj@npm:^1.0.1": + version: 1.0.1 + resolution: "is-obj@npm:1.0.1" + checksum: 3ccf0efdea12951e0b9c784e2b00e77e87b2f8bd30b42a498548a8afcc11b3287342a2030c308e473e93a7a19c9ea7854c99a8832a476591c727df2a9c79796c + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 + languageName: node + linkType: hard + +"is-path-cwd@npm:^2.2.0": + version: 2.2.0 + resolution: "is-path-cwd@npm:2.2.0" + checksum: 46a840921bb8cc0dc7b5b423a14220e7db338072a4495743a8230533ce78812dc152548c86f4b828411fe98c5451959f07cf841c6a19f611e46600bd699e8048 + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.2": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"is-plain-obj@npm:^2.0.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + languageName: node + linkType: hard + +"is-plain-obj@npm:^3.0.0": + version: 3.0.0 + resolution: "is-plain-obj@npm:3.0.0" + checksum: a6ebdf8e12ab73f33530641972a72a4b8aed6df04f762070d823808303e4f76d87d5ea5bd76f96a7bbe83d93f04ac7764429c29413bd9049853a69cb630fb21c + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-regexp@npm:^1.0.0": + version: 1.0.0 + resolution: "is-regexp@npm:1.0.0" + checksum: be692828e24cba479ec33644326fa98959ec68ba77965e0291088c1a741feaea4919d79f8031708f85fd25e39de002b4520622b55460660b9c369e6f7187faef + languageName: node + linkType: hard + +"is-root@npm:^2.1.0": + version: 2.1.0 + resolution: "is-root@npm:2.1.0" + checksum: 37eea0822a2a9123feb58a9d101558ba276771a6d830f87005683349a9acff15958a9ca590a44e778c6b335660b83e85c744789080d734f6081a935a4880aee2 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-typedarray@npm:^1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 + languageName: node + linkType: hard + +"is-whitespace-character@npm:^1.0.0": + version: 1.0.4 + resolution: "is-whitespace-character@npm:1.0.4" + checksum: adab8ad9847ccfcb6f1b7000b8f622881b5ba2a09ce8be2794a6d2b10c3af325b469fc562c9fb889f468eed27be06e227ac609d0aa1e3a59b4dbcc88e2b0418e + languageName: node + linkType: hard + +"is-word-character@npm:^1.0.0": + version: 1.0.4 + resolution: "is-word-character@npm:1.0.4" + checksum: 1821d6c6abe5bc0b3abe3fdc565d66d7c8a74ea4e93bc77b4a47d26e2e2a306d6ab7d92b353b0d2b182869e3ecaa8f4a346c62d0e31d38ebc0ceaf7cae182c3f + languageName: node + linkType: hard + +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"is-yarn-global@npm:^0.3.0": + version: 0.3.0 + resolution: "is-yarn-global@npm:0.3.0" + checksum: bca013d65fee2862024c9fbb3ba13720ffca2fe750095174c1c80922fdda16402b5c233f5ac9e265bc12ecb5446e7b7f519a32d9541788f01d4d44e24d2bf481 + languageName: node + linkType: hard + +"isarray@npm:0.0.1": + version: 0.0.1 + resolution: "isarray@npm:0.0.1" + checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"jest-util@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-util@npm:29.3.1" + dependencies: + "@jest/types": ^29.3.1 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: f67c60f062b94d21cb60e84b3b812d64b7bfa81fe980151de5c17a74eb666042d0134e2e756d099b7606a1fcf1d633824d2e58197d01d76dde1e2dc00dfcd413 + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 + languageName: node + linkType: hard + +"jest-worker@npm:^29.1.2": + version: 29.3.1 + resolution: "jest-worker@npm:29.3.1" + dependencies: + "@types/node": "*" + jest-util: ^29.3.1 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 38687fcbdc2b7ddc70bbb5dfc703ae095b46b3c7f206d62ecdf5f4d16e336178e217302138f3b906125576bb1cfe4cfe8d43681276fa5899d138ed9422099fb3 + languageName: node + linkType: hard + +"joi@npm:^17.6.0": + version: 17.7.0 + resolution: "joi@npm:17.7.0" + dependencies: + "@hapi/hoek": ^9.0.0 + "@hapi/topo": ^5.0.0 + "@sideway/address": ^4.1.3 + "@sideway/formula": ^3.0.0 + "@sideway/pinpoint": ^2.0.0 + checksum: 767a847936cb66787256c4351ff86e1b9e8d7383cbe81a5c827064032c2a8e8b6e938baef5ad32c4035fe4c56e537bd90aa2a952be8a0658601c920cdeb4fb3c + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + languageName: node + linkType: hard + +"jsesc@npm:~0.5.0": + version: 0.5.0 + resolution: "jsesc@npm:0.5.0" + bin: + jsesc: bin/jsesc + checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.0": + version: 3.0.0 + resolution: "json-buffer@npm:3.0.0" + checksum: 0cecacb8025370686a916069a2ff81f7d55167421b6aa7270ee74e244012650dd6bce22b0852202ea7ff8624fce50ff0ec1bdf95914ccb4553426e290d5a63fa + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad + languageName: node + linkType: hard + +"json5@npm:^2.1.2, json5@npm:^2.2.1": + version: 2.2.1 + resolution: "json5@npm:2.2.1" + bin: + json5: lib/cli.js + checksum: 74b8a23b102a6f2bf2d224797ae553a75488b5adbaee9c9b6e5ab8b510a2fc6e38f876d4c77dea672d4014a44b2399e15f2051ac2b37b87f74c0c7602003543b + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"keyv@npm:^3.0.0": + version: 3.1.0 + resolution: "keyv@npm:3.1.0" + dependencies: + json-buffer: 3.0.0 + checksum: bb7e8f3acffdbafbc2dd5b63f377fe6ec4c0e2c44fc82720449ef8ab54f4a7ce3802671ed94c0f475ae0a8549703353a2124561fcf3317010c141b32ca1ce903 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 + languageName: node + linkType: hard + +"klona@npm:^2.0.5": + version: 2.0.5 + resolution: "klona@npm:2.0.5" + checksum: 8c976126ea252b766e648a4866e1bccff9d3b08432474ad80c559f6c7265cf7caede2498d463754d8c88c4759895edd8210c85c0d3155e6aae4968362889466f + languageName: node + linkType: hard + +"latest-version@npm:^5.1.0": + version: 5.1.0 + resolution: "latest-version@npm:5.1.0" + dependencies: + package-json: ^6.3.0 + checksum: fbc72b071eb66c40f652441fd783a9cca62f08bf42433651937f078cd9ef94bf728ec7743992777826e4e89305aef24f234b515e6030503a2cbee7fc9bdc2c0f + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + +"lilconfig@npm:^2.0.3": + version: 2.0.6 + resolution: "lilconfig@npm:2.0.6" + checksum: 40a3cd72f103b1be5975f2ac1850810b61d4053e20ab09be8d3aeddfe042187e1ba70b4651a7e70f95efa1642e7dc8b2ae395b317b7d7753b241b43cef7c0f7d + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"loader-runner@npm:^4.2.0": + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 + languageName: node + linkType: hard + +"loader-utils@npm:^2.0.0": + version: 2.0.4 + resolution: "loader-utils@npm:2.0.4" + dependencies: + big.js: ^5.2.2 + emojis-list: ^3.0.0 + json5: ^2.1.2 + checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 + languageName: node + linkType: hard + +"loader-utils@npm:^3.2.0": + version: 3.2.1 + resolution: "loader-utils@npm:3.2.1" + checksum: 4e3ea054cdc8be1ab1f1238f49f42fdf0483039eff920fb1d442039f3f0ad4ebd11fb8e584ccdf2cb7e3c56b3d40c1832416e6408a55651b843da288960cc792 + languageName: node + linkType: hard + +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: ^3.0.0 + path-exists: ^3.0.0 + checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash.curry@npm:^4.0.1": + version: 4.1.1 + resolution: "lodash.curry@npm:4.1.1" + checksum: 9192b70fe7df4d1ff780c0260bee271afa9168c93fe4fa24bc861900240531b59781b5fdaadf4644fea8f4fbcd96f0700539ab294b579ffc1022c6c15dcc462a + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 + languageName: node + linkType: hard + +"lodash.flow@npm:^3.3.0": + version: 3.5.0 + resolution: "lodash.flow@npm:3.5.0" + checksum: a9a62ad344e3c5a1f42bc121da20f64dd855aaafecee24b1db640f29b88bd165d81c37ff7e380a7191de6f70b26f5918abcebbee8396624f78f3618a0b18634c + languageName: node + linkType: hard + +"lodash.memoize@npm:^4.1.2": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 + languageName: node + linkType: hard + +"lodash.uniq@npm:4.5.0, lodash.uniq@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.uniq@npm:4.5.0" + checksum: a4779b57a8d0f3c441af13d9afe7ecff22dd1b8ce1129849f71d9bbc8e8ee4e46dfb4b7c28f7ad3d67481edd6e51126e4e2a6ee276e25906d10f7140187c392d + languageName: node + linkType: hard + +"lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.2.0, loose-envify@npm:^1.3.1, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"lower-case@npm:^2.0.2": + version: 2.0.2 + resolution: "lower-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 83a0a5f159ad7614bee8bf976b96275f3954335a84fad2696927f609ddae902802c4f3312d86668722e668bef41400254807e1d3a7f2e8c3eede79691aa1f010 + languageName: node + linkType: hard + +"lowercase-keys@npm:^1.0.0, lowercase-keys@npm:^1.0.1": + version: 1.0.1 + resolution: "lowercase-keys@npm:1.0.1" + checksum: 4d045026595936e09953e3867722e309415ff2c80d7701d067546d75ef698dac218a4f53c6d1d0e7368b47e45fd7529df47e6cb56fbb90523ba599f898b3d147 + languageName: node + linkType: hard + +"lowercase-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "lowercase-keys@npm:2.0.0" + checksum: 24d7ebd56ccdf15ff529ca9e08863f3c54b0b9d1edb97a3ae1af34940ae666c01a1e6d200707bce730a8ef76cb57cc10e65f245ecaaf7e6bc8639f2fb460ac23 + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.7.1": + version: 7.14.1 + resolution: "lru-cache@npm:7.14.1" + checksum: d72c6713c6a6d86836a7a6523b3f1ac6764768cca47ec99341c3e76db06aacd4764620e5e2cda719a36848785a52a70e531822dc2b33fb071fa709683746c104 + languageName: node + linkType: hard + +"make-dir@npm:^3.0.0, make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: ^6.0.0 + checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 + languageName: node + linkType: hard + +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^10.0.3": + version: 10.2.1 + resolution: "make-fetch-happen@npm:10.2.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^16.1.0 + http-cache-semantics: ^4.1.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^3.1.6 + minipass-collect: ^1.0.2 + minipass-fetch: ^2.0.3 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^9.0.0 + checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c + languageName: node + linkType: hard + +"markdown-escapes@npm:^1.0.0": + version: 1.0.4 + resolution: "markdown-escapes@npm:1.0.4" + checksum: 6833a93d72d3f70a500658872312c6fa8015c20cc835a85ae6901fa232683fbc6ed7118ebe920fea7c80039a560f339c026597d96eee0e9de602a36921804997 + languageName: node + linkType: hard + +"mdast-squeeze-paragraphs@npm:^4.0.0": + version: 4.0.0 + resolution: "mdast-squeeze-paragraphs@npm:4.0.0" + dependencies: + unist-util-remove: ^2.0.0 + checksum: dfe8ec8e8a62171f020e82b088cc35cb9da787736dc133a3b45ce8811782a93e69bf06d147072e281079f09fac67be8a36153ffffd9bfbf89ed284e4c4f56f75 + languageName: node + linkType: hard + +"mdast-util-definitions@npm:^4.0.0": + version: 4.0.0 + resolution: "mdast-util-definitions@npm:4.0.0" + dependencies: + unist-util-visit: ^2.0.0 + checksum: 2325f20b82b3fb8cb5fda77038ee0bbdd44f82cfca7c48a854724b58bc1fe5919630a3ce7c45e210726df59d46c881d020b2da7a493bfd1ee36eb2bbfef5d78e + languageName: node + linkType: hard + +"mdast-util-to-hast@npm:10.0.1": + version: 10.0.1 + resolution: "mdast-util-to-hast@npm:10.0.1" + 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 + checksum: e5f385757df7e9b37db4d6f326bf7b4fc1b40f9ad01fc335686578f44abe0ba46d3e60af4d5e5b763556d02e65069ef9a09c49db049b52659203a43e7fa9084d + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-to-string@npm:2.0.0" + checksum: 0b2113ada10e002fbccb014170506dabe2f2ddacaacbe4bc1045c33f986652c5a162732a2c057c5335cdb58419e2ad23e368e5be226855d4d4e280b81c4e9ec2 + languageName: node + linkType: hard + +"mdn-data@npm:2.0.14": + version: 2.0.14 + resolution: "mdn-data@npm:2.0.14" + checksum: 9d0128ed425a89f4cba8f787dca27ad9408b5cb1b220af2d938e2a0629d17d879a34d2cb19318bdb26c3f14c77dd5dfbae67211f5caaf07b61b1f2c5c8c7dc16 + languageName: node + linkType: hard + +"mdurl@npm:^1.0.0": + version: 1.0.1 + resolution: "mdurl@npm:1.0.1" + checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b + languageName: node + linkType: hard + +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 + languageName: node + linkType: hard + +"memfs@npm:^3.1.2, memfs@npm:^3.4.3": + version: 3.4.12 + resolution: "memfs@npm:3.4.12" + dependencies: + fs-monkey: ^1.0.3 + checksum: dab8dec1ae0b2a92e4d563ac86846047cd7aeb17cde4ad51da85cff6e580c32d12b886354527788e36eb75f733dd8edbaf174476b7cea73fed9c5a0e45a6b428 + languageName: node + linkType: hard + +"merge-descriptors@npm:1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"methods@npm:~1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a + languageName: node + linkType: hard + +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-db@npm:~1.33.0": + version: 1.33.0 + resolution: "mime-db@npm:1.33.0" + checksum: 281a0772187c9b8f6096976cb193ac639c6007ac85acdbb8dc1617ed7b0f4777fa001d1b4f1b634532815e60717c84b2f280201d55677fb850c9d45015b50084 + languageName: node + linkType: hard + +"mime-types@npm:2.1.18": + version: 2.1.18 + resolution: "mime-types@npm:2.1.18" + dependencies: + mime-db: ~1.33.0 + checksum: 729265eff1e5a0e87cb7f869da742a610679585167d2f2ec997a7387fc6aedf8e5cad078e99b0164a927bdf3ace34fca27430d6487456ad090cba5594441ba43 + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"mimic-response@npm:^1.0.0, mimic-response@npm:^1.0.1": + version: 1.0.1 + resolution: "mimic-response@npm:1.0.1" + checksum: 034c78753b0e622bc03c983663b1cdf66d03861050e0c8606563d149bc2b02d63f62ce4d32be4ab50d0553ae0ffe647fc34d1f5281184c6e1e8cf4d85e8d9823 + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 25739fee32c17f433626bf19f016df9036b75b3d84a3046c7d156e72ec963dd29d7fc8a302f55a3d6c5a4ff24259676b15d915aad6480815a969ff2ec0836867 + languageName: node + linkType: hard + +"mini-css-extract-plugin@npm:^2.6.1": + version: 2.7.1 + resolution: "mini-css-extract-plugin@npm:2.7.1" + dependencies: + schema-utils: ^4.0.0 + peerDependencies: + webpack: ^5.0.0 + checksum: 0da0db7befa4da5df2293440e540d9414b23b99768bbec4b8dab40c1c961ad31532239635be06c6ca9a6d4cfcb0caeb6dbd19d5e31d3271d734e0a39c3245c23 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 + languageName: node + linkType: hard + +"minimatch@npm:3.1.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^5.0.1": + version: 5.1.2 + resolution: "minimatch@npm:5.1.2" + dependencies: + brace-expansion: ^2.0.1 + checksum: 32ffda25b9fb8270a1c1beafdb7489dc0e411af553495136509a945691f63c9b6b000eeeaaf8bffe3efa609c1d6d3bc0f5a106f6c3443b5c05da649100ded964 + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5": + version: 1.2.7 + resolution: "minimist@npm:1.2.7" + checksum: 7346574a1038ca23c32e02252f603801f09384dd1d78b69a943a4e8c2c28730b80e96193882d3d3b22a063445f460e48316b29b8a25addca2d7e5e8f75478bec + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^2.0.3": + version: 2.1.2 + resolution: "minipass-fetch@npm:2.1.2" + dependencies: + encoding: ^0.1.13 + minipass: ^3.1.6 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^4.0.0": + version: 4.0.0 + resolution: "minipass@npm:4.0.0" + dependencies: + yallist: ^4.0.0 + checksum: 7a609afbf394abfcf9c48e6c90226f471676c8f2a67f07f6838871afb03215ede431d1433feffe1b855455bcb13ef0eb89162841b9796109d6fed8d89790f381 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"mrmime@npm:^1.0.0": + version: 1.0.1 + resolution: "mrmime@npm:1.0.1" + checksum: cc979da44bbbffebaa8eaf7a45117e851f2d4cb46a3ada6ceb78130466a04c15a0de9a9ce1c8b8ba6f6e1b8618866b1352992bf1757d241c0ddca558b9f28a77 + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.0.0": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"multicast-dns@npm:^7.2.5": + version: 7.2.5 + resolution: "multicast-dns@npm:7.2.5" + dependencies: + dns-packet: ^5.2.2 + thunky: ^1.0.2 + bin: + multicast-dns: cli.js + checksum: 00b8a57df152d4cd0297946320a94b7c3cdf75a46a2247f32f958a8927dea42958177f9b7fdae69fab2e4e033fb3416881af1f5e9055a3e1542888767139e2fb + languageName: node + linkType: hard + +"nanoid@npm:^3.3.4": + version: 3.3.4 + resolution: "nanoid@npm:3.3.4" + bin: + nanoid: bin/nanoid.cjs + checksum: 2fddd6dee994b7676f008d3ffa4ab16035a754f4bb586c61df5a22cf8c8c94017aadd360368f47d653829e0569a92b129979152ff97af23a558331e47e37cd9c + languageName: node + linkType: hard + +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 06c14271ee966e108d55ae109f340976a9556c8603e888037145d6522726aebe89dd0c861b4b83947feaf6d39e79e08817559e8693deedc2c94e82c5cbd090c7 + languageName: node + linkType: hard + +"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"no-case@npm:^3.0.4": + version: 3.0.4 + resolution: "no-case@npm:3.0.4" + dependencies: + lower-case: ^2.0.2 + tslib: ^2.0.3 + checksum: 0b2ebc113dfcf737d48dde49cfebf3ad2d82a8c3188e7100c6f375e30eafbef9e9124aadc3becef237b042fd5eb0aad2fd78669c20972d045bbe7fea8ba0be5c + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.30.0 + resolution: "node-abi@npm:3.30.0" + dependencies: + semver: ^7.3.5 + checksum: f285efcea312e52d8763cfad7d434b31c11586e5efdf9f239c214a582557777453a8358d338442f02490d6c5289b0fc0eeed3056a740a3ebe6c79334af3b1739 + languageName: node + linkType: hard + +"node-addon-api@npm:^5.0.0": + version: 5.0.0 + resolution: "node-addon-api@npm:5.0.0" + dependencies: + node-gyp: latest + checksum: 7c5e2043ac37f6108784d94ed73a44ae6d3e68eb968de60680922fc6bc3d17fa69448c0feb4e0c9d3f4c74a0324822e566a8340a56916d9d6f23cb3e85620334 + languageName: node + linkType: hard + +"node-emoji@npm:^1.10.0": + version: 1.11.0 + resolution: "node-emoji@npm:1.11.0" + dependencies: + lodash: ^4.17.21 + checksum: e8c856c04a1645062112a72e59a98b203505ed5111ff84a3a5f40611afa229b578c7d50f1e6a7f17aa62baeea4a640d2e2f61f63afc05423aa267af10977fb2b + languageName: node + linkType: hard + +"node-fetch@npm:2.6.7, node-fetch@npm:^2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b + languageName: node + linkType: hard + +"node-forge@npm:^1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 9.3.1 + resolution: "node-gyp@npm:9.3.1" + dependencies: + env-paths: ^2.2.0 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^10.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.6": + version: 2.0.6 + resolution: "node-releases@npm:2.0.6" + checksum: e86a926dc9fbb3b41b4c4a89d998afdf140e20a4e8dbe6c0a807f7b2948b42ea97d7fd3ad4868041487b6e9ee98409829c6e4d84a734a4215dff060a7fbeb4bf + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"normalize-range@npm:^0.1.2": + version: 0.1.2 + resolution: "normalize-range@npm:0.1.2" + checksum: 9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184 + languageName: node + linkType: hard + +"normalize-url@npm:^4.1.0": + version: 4.5.1 + resolution: "normalize-url@npm:4.5.1" + checksum: 9a9dee01df02ad23e171171893e56e22d752f7cff86fb96aafeae074819b572ea655b60f8302e2d85dbb834dc885c972cc1c573892fea24df46b2765065dd05a + languageName: node + linkType: hard + +"normalize-url@npm:^6.0.1": + version: 6.1.0 + resolution: "normalize-url@npm:6.1.0" + checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: ^3.0.0 + checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"nprogress@npm:^0.2.0": + version: 0.2.0 + resolution: "nprogress@npm:0.2.0" + checksum: 66b7bec5d563ecf2d1c3d2815e6d5eb74ed815eee8563e0afa63d3f185ab1b9cf2ddd97e1ded263b9995c5019d26d600320e849e50f3747984daa033744619dc + languageName: node + linkType: hard + +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" + dependencies: + boolbase: ^1.0.0 + checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"object-inspect@npm:^1.9.0": + version: 1.12.2 + resolution: "object-inspect@npm:1.12.2" + checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a + languageName: node + linkType: hard + +"object.assign@npm:^4.1.0": + version: 4.1.4 + resolution: "object.assign@npm:4.1.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 + languageName: node + linkType: hard + +"obuf@npm:^1.0.0, obuf@npm:^1.1.2": + version: 1.1.2 + resolution: "obuf@npm:1.1.2" + checksum: 41a2ba310e7b6f6c3b905af82c275bf8854896e2e4c5752966d64cbcd2f599cfffd5932006bcf3b8b419dfdacebb3a3912d5d94e10f1d0acab59876c8757f27f + languageName: node + linkType: hard + +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: 1.1.1 + checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 + languageName: node + linkType: hard + +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 2bf13467215d1e540a62a75021e8b318a6cfc5d4fc53af8e8f84ad98dbcea02d506c6d24180cd62e1d769c44721ba542f3154effc1f7579a8288c9f7873ed8e5 + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"open@npm:^8.0.9, open@npm:^8.4.0": + version: 8.4.0 + resolution: "open@npm:8.4.0" + dependencies: + define-lazy-prop: ^2.0.0 + is-docker: ^2.1.1 + is-wsl: ^2.2.0 + checksum: e9545bec64cdbf30a0c35c1bdc310344adf8428a117f7d8df3c0af0a0a24c513b304916a6d9b11db0190ff7225c2d578885080b761ed46a3d5f6f1eebb98b63c + languageName: node + linkType: hard + +"opener@npm:^1.5.2": + version: 1.5.2 + resolution: "opener@npm:1.5.2" + bin: + opener: bin/opener-bin.js + checksum: 33b620c0d53d5b883f2abc6687dd1c5fd394d270dbe33a6356f2d71e0a2ec85b100d5bac94694198ccf5c30d592da863b2292c5539009c715a9c80c697b4f6cc + languageName: node + linkType: hard + +"p-cancelable@npm:^1.0.0": + version: 1.1.0 + resolution: "p-cancelable@npm:1.1.0" + checksum: 2db3814fef6d9025787f30afaee4496a8857a28be3c5706432cbad76c688a6db1874308f48e364a42f5317f5e41e8e7b4f2ff5c8ff2256dbb6264bc361704ece + languageName: node + linkType: hard + +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: ^2.0.0 + checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-retry@npm:^4.5.0": + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" + dependencies: + "@types/retry": 0.12.0 + retry: ^0.13.1 + checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"package-json@npm:^6.3.0": + version: 6.5.0 + resolution: "package-json@npm:6.5.0" + dependencies: + got: ^9.6.0 + registry-auth-token: ^4.0.0 + registry-url: ^5.0.0 + semver: ^6.2.0 + checksum: cc9f890d3667d7610e6184decf543278b87f657d1ace0deb4a9c9155feca738ef88f660c82200763d3348010f4e42e9c7adc91e96ab0f86a770955995b5351e2 + languageName: node + linkType: hard + +"param-case@npm:^3.0.4": + version: 3.0.4 + resolution: "param-case@npm:3.0.4" + dependencies: + dot-case: ^3.0.4 + tslib: ^2.0.3 + checksum: b34227fd0f794e078776eb3aa6247442056cb47761e9cd2c4c881c86d84c64205f6a56ef0d70b41ee7d77da02c3f4ed2f88e3896a8fefe08bdfb4deca037c687 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parse-entities@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-entities@npm:2.0.0" + 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 + checksum: 7addfd3e7d747521afac33c8121a5f23043c6973809756920d37e806639b4898385d386fcf4b3c8e2ecf1bc28aac5ae97df0b112d5042034efbe80f44081ebce + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": ^7.0.0 + error-ex: ^1.3.1 + json-parse-even-better-errors: ^2.3.0 + lines-and-columns: ^1.1.6 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + +"parse-numeric-range@npm:^1.3.0": + version: 1.3.0 + resolution: "parse-numeric-range@npm:1.3.0" + checksum: 289ca126d5b8ace7325b199218de198014f58ea6895ccc88a5247491d07f0143bf047f80b4a31784f1ca8911762278d7d6ecb90a31dfae31da91cc1a2524c8ce + languageName: node + linkType: hard + +"parse5-htmlparser2-tree-adapter@npm:^7.0.0": + version: 7.0.0 + resolution: "parse5-htmlparser2-tree-adapter@npm:7.0.0" + dependencies: + domhandler: ^5.0.2 + parse5: ^7.0.0 + checksum: fc5d01e07733142a1baf81de5c2a9c41426c04b7ab29dd218acb80cd34a63177c90aff4a4aee66cf9f1d0aeecff1389adb7452ad6f8af0a5888e3e9ad6ef733d + languageName: node + linkType: hard + +"parse5@npm:^6.0.0": + version: 6.0.1 + resolution: "parse5@npm:6.0.1" + checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd + languageName: node + linkType: hard + +"parse5@npm:^7.0.0": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: ^4.4.0 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 + languageName: node + linkType: hard + +"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 + languageName: node + linkType: hard + +"pascal-case@npm:^3.1.2": + version: 3.1.2 + resolution: "pascal-case@npm:3.1.2" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + checksum: ba98bfd595fc91ef3d30f4243b1aee2f6ec41c53b4546bfa3039487c367abaa182471dcfc830a1f9e1a0df00c14a370514fa2b3a1aacc68b15a460c31116873e + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-is-inside@npm:1.0.2": + version: 1.0.2 + resolution: "path-is-inside@npm:1.0.2" + checksum: 0b5b6c92d3018b82afb1f74fe6de6338c4c654de4a96123cb343f2b747d5606590ac0c890f956ed38220a4ab59baddfd7b713d78a62d240b20b14ab801fa02cb + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-to-regexp@npm:0.1.7": + version: 0.1.7 + resolution: "path-to-regexp@npm:0.1.7" + checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce + languageName: node + linkType: hard + +"path-to-regexp@npm:2.2.1": + version: 2.2.1 + resolution: "path-to-regexp@npm:2.2.1" + checksum: b921a74e7576e25b06ad1635abf7e8125a29220d2efc2b71d74b9591f24a27e6f09078fa9a1b27516a097ea0637b7cab79d19b83d7f36a8ef3ef5422770e89d9 + languageName: node + linkType: hard + +"path-to-regexp@npm:^1.7.0": + version: 1.8.0 + resolution: "path-to-regexp@npm:1.8.0" + dependencies: + isarray: 0.0.1 + checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pkg-dir@npm:^4.1.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + +"pkg-up@npm:^3.1.0": + version: 3.1.0 + resolution: "pkg-up@npm:3.1.0" + dependencies: + find-up: ^3.0.0 + checksum: 5bac346b7c7c903613c057ae3ab722f320716199d753f4a7d053d38f2b5955460f3e6ab73b4762c62fd3e947f58e04f1343e92089e7bb6091c90877406fcd8c8 + languageName: node + linkType: hard + +"postcss-calc@npm:^8.2.3": + version: 8.2.4 + resolution: "postcss-calc@npm:8.2.4" + dependencies: + postcss-selector-parser: ^6.0.9 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.2 + checksum: 314b4cebb0c4ed0cf8356b4bce71eca78f5a7842e6a3942a3bba49db168d5296b2bd93c3f735ae1c616f2651d94719ade33becc03c73d2d79c7394fb7f73eabb + languageName: node + linkType: hard + +"postcss-colormin@npm:^5.3.0": + version: 5.3.0 + resolution: "postcss-colormin@npm:5.3.0" + dependencies: + browserslist: ^4.16.6 + caniuse-api: ^3.0.0 + colord: ^2.9.1 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 3d3e3cc25071407fb73d68541ca1039ebd154fceb649041461a8a3cab0400cc89b42dbb34a4eeaf573be4ba2370ce23af5e01aff5e03a8d72275f40605577212 + languageName: node + linkType: hard + +"postcss-convert-values@npm:^5.1.3": + version: 5.1.3 + resolution: "postcss-convert-values@npm:5.1.3" + dependencies: + browserslist: ^4.21.4 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: df48cdaffabf9737f9cfdc58a3dc2841cf282506a7a944f6c70236cff295d3a69f63de6e0935eeb8a9d3f504324e5b4e240abc29e21df9e35a02585d3060aeb5 + languageName: node + linkType: hard + +"postcss-discard-comments@npm:^5.1.2": + version: 5.1.2 + resolution: "postcss-discard-comments@npm:5.1.2" + peerDependencies: + postcss: ^8.2.15 + checksum: abfd064ebc27aeaf5037643dd51ffaff74d1fa4db56b0523d073ace4248cbb64ffd9787bd6924b0983a9d0bd0e9bf9f10d73b120e50391dc236e0d26c812fa2a + languageName: node + linkType: hard + +"postcss-discard-duplicates@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-duplicates@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 88d6964201b1f4ed6bf7a32cefe68e86258bb6e42316ca01d9b32bdb18e7887d02594f89f4a2711d01b51ea6e3fcca8c54be18a59770fe5f4521c61d3eb6ca35 + languageName: node + linkType: hard + +"postcss-discard-empty@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-discard-empty@npm:5.1.1" + peerDependencies: + postcss: ^8.2.15 + checksum: 970adb12fae5c214c0768236ad9a821552626e77dedbf24a8213d19cc2c4a531a757cd3b8cdd3fc22fb1742471b8692a1db5efe436a71236dec12b1318ee8ff4 + languageName: node + linkType: hard + +"postcss-discard-overridden@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-overridden@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: d64d4a545aa2c81b22542895cfcddc787d24119f294d35d29b0599a1c818b3cc51f4ee80b80f5a0a09db282453dd5ac49f104c2117cc09112d0ac9b40b499a41 + languageName: node + linkType: hard + +"postcss-discard-unused@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-unused@npm:5.1.0" + dependencies: + postcss-selector-parser: ^6.0.5 + peerDependencies: + postcss: ^8.2.15 + checksum: 5c09403a342a065033f5f22cefe6b402c76c2dc0aac31a736a2062d82c2a09f0ff2525b3df3a0c6f4e0ffc7a0392efd44bfe7f9d018e4cae30d15b818b216622 + languageName: node + linkType: hard + +"postcss-loader@npm:^7.0.0": + version: 7.0.2 + resolution: "postcss-loader@npm:7.0.2" + dependencies: + cosmiconfig: ^7.0.0 + klona: ^2.0.5 + semver: ^7.3.8 + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + checksum: 2d251537d482eb751f812c96c8b515f46d7c9905cad7afab33f0f34872670619b7440cefc9e2babbf89fb11b4708850d522d79fa5ff788227587645e78f16638 + languageName: node + linkType: hard + +"postcss-merge-idents@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-merge-idents@npm:5.1.1" + dependencies: + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: ed8a673617ea6ae3e15d69558063cb1a5eeee01732f78cdc0196ab910324abc30828724ab8dfc4cda27e8c0077542e25688470f829819a2604625a673387ec72 + languageName: node + linkType: hard + +"postcss-merge-longhand@npm:^5.1.7": + version: 5.1.7 + resolution: "postcss-merge-longhand@npm:5.1.7" + dependencies: + postcss-value-parser: ^4.2.0 + stylehacks: ^5.1.1 + peerDependencies: + postcss: ^8.2.15 + checksum: 81c3fc809f001b9b71a940148e242bdd6e2d77713d1bfffa15eb25c1f06f6648d5e57cb21645746d020a2a55ff31e1740d2b27900442913a9d53d8a01fb37e1b + languageName: node + linkType: hard + +"postcss-merge-rules@npm:^5.1.3": + version: 5.1.3 + resolution: "postcss-merge-rules@npm:5.1.3" + dependencies: + browserslist: ^4.21.4 + caniuse-api: ^3.0.0 + cssnano-utils: ^3.1.0 + postcss-selector-parser: ^6.0.5 + peerDependencies: + postcss: ^8.2.15 + checksum: 0ddaddff98cd7f3fac2b0e716c641f529a61a8668be6d5b48d60770d0a1246126088e1d606f309b9748ff598a3794f3fd6dd5b8c3d79112f84744cab5375d4d9 + languageName: node + linkType: hard + +"postcss-minify-font-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-minify-font-values@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 35e858fa41efa05acdeb28f1c76579c409fdc7eabb1744c3bd76e895bb9fea341a016746362a67609688ab2471f587202b9a3e14ea28ad677754d663a2777ece + languageName: node + linkType: hard + +"postcss-minify-gradients@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-minify-gradients@npm:5.1.1" + dependencies: + colord: ^2.9.1 + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 27354072a07c5e6dab36731103b94ca2354d4ed3c5bc6aacfdf2ede5a55fa324679d8fee5450800bc50888dbb5e9ed67569c0012040c2be128143d0cebb36d67 + languageName: node + linkType: hard + +"postcss-minify-params@npm:^5.1.4": + version: 5.1.4 + resolution: "postcss-minify-params@npm:5.1.4" + dependencies: + browserslist: ^4.21.4 + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: bd63e2cc89edcf357bb5c2a16035f6d02ef676b8cede4213b2bddd42626b3d428403849188f95576fc9f03e43ebd73a29bf61d33a581be9a510b13b7f7f100d5 + languageName: node + linkType: hard + +"postcss-minify-selectors@npm:^5.2.1": + version: 5.2.1 + resolution: "postcss-minify-selectors@npm:5.2.1" + dependencies: + postcss-selector-parser: ^6.0.5 + peerDependencies: + postcss: ^8.2.15 + checksum: 6fdbc84f99a60d56b43df8930707da397775e4c36062a106aea2fd2ac81b5e24e584a1892f4baa4469fa495cb87d1422560eaa8f6c9d500f9f0b691a5f95bab5 + languageName: node + linkType: hard + +"postcss-modules-extract-imports@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-extract-imports@npm:3.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 4b65f2f1382d89c4bc3c0a1bdc5942f52f3cb19c110c57bd591ffab3a5fee03fcf831604168205b0c1b631a3dce2255c70b61aaae3ef39d69cd7eb450c2552d2 + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-modules-local-by-default@npm:4.0.0" + dependencies: + icss-utils: ^5.0.0 + postcss-selector-parser: ^6.0.2 + postcss-value-parser: ^4.1.0 + peerDependencies: + postcss: ^8.1.0 + checksum: 6cf570badc7bc26c265e073f3ff9596b69bb954bc6ac9c5c1b8cba2995b80834226b60e0a3cbb87d5f399dbb52e6466bba8aa1d244f6218f99d834aec431a69d + languageName: node + linkType: hard + +"postcss-modules-scope@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-scope@npm:3.0.0" + dependencies: + postcss-selector-parser: ^6.0.4 + peerDependencies: + postcss: ^8.1.0 + checksum: 330b9398dbd44c992c92b0dc612c0626135e2cc840fee41841eb61247a6cfed95af2bd6f67ead9dd9d0bb41f5b0367129d93c6e434fa3e9c58ade391d9a5a138 + languageName: node + linkType: hard + +"postcss-modules-values@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-modules-values@npm:4.0.0" + dependencies: + icss-utils: ^5.0.0 + peerDependencies: + postcss: ^8.1.0 + checksum: f7f2cdf14a575b60e919ad5ea52fed48da46fe80db2733318d71d523fc87db66c835814940d7d05b5746b0426e44661c707f09bdb83592c16aea06e859409db6 + languageName: node + linkType: hard + +"postcss-normalize-charset@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-charset@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: e79d92971fc05b8b3c9b72f3535a574e077d13c69bef68156a0965f397fdf157de670da72b797f57b0e3bac8f38155b5dd1735ecab143b9cc4032d72138193b4 + languageName: node + linkType: hard + +"postcss-normalize-display-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-display-values@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: b6eb7b9b02c3bdd62bbc54e01e2b59733d73a1c156905d238e178762962efe0c6f5104544da39f32cade8a4fb40f10ff54b63a8ebfbdff51e8780afb9fbdcf86 + languageName: node + linkType: hard + +"postcss-normalize-positions@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-positions@npm:5.1.1" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: d9afc233729c496463c7b1cdd06732469f401deb387484c3a2422125b46ec10b4af794c101f8c023af56f01970b72b535e88373b9058ecccbbf88db81662b3c4 + languageName: node + linkType: hard + +"postcss-normalize-repeat-style@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-repeat-style@npm:5.1.1" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 2c6ad2b0ae10a1fda156b948c34f78c8f1e185513593de4d7e2480973586675520edfec427645fa168c337b0a6b3ceca26f92b96149741ca98a9806dad30d534 + languageName: node + linkType: hard + +"postcss-normalize-string@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-string@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 6e549c6e5b2831e34c7bdd46d8419e2278f6af1d5eef6d26884a37c162844e60339340c57e5e06058cdbe32f27fc6258eef233e811ed2f71168ef2229c236ada + languageName: node + linkType: hard + +"postcss-normalize-timing-functions@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-timing-functions@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: da550f50e90b0b23e17b67449a7d1efd1aa68288e66d4aa7614ca6f5cc012896be1972b7168eee673d27da36504faccf7b9f835c0f7e81243f966a42c8c030aa + languageName: node + linkType: hard + +"postcss-normalize-unicode@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-unicode@npm:5.1.1" + dependencies: + browserslist: ^4.21.4 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 4c24d26cc9f4b19a9397db4e71dd600dab690f1de8e14a3809e2aa1452dbc3791c208c38a6316bbc142f29e934fdf02858e68c94038c06174d78a4937e0f273c + languageName: node + linkType: hard + +"postcss-normalize-url@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-url@npm:5.1.0" + dependencies: + normalize-url: ^6.0.1 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 3bd4b3246d6600230bc827d1760b24cb3101827ec97570e3016cbe04dc0dd28f4dbe763245d1b9d476e182c843008fbea80823061f1d2219b96f0d5c724a24c0 + languageName: node + linkType: hard + +"postcss-normalize-whitespace@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-whitespace@npm:5.1.1" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 12d8fb6d1c1cba208cc08c1830959b7d7ad447c3f5581873f7e185f99a9a4230c43d3af21ca12c818e4690a5085a95b01635b762ad4a7bef69d642609b4c0e19 + languageName: node + linkType: hard + +"postcss-ordered-values@npm:^5.1.3": + version: 5.1.3 + resolution: "postcss-ordered-values@npm:5.1.3" + dependencies: + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 6f3ca85b6ceffc68aadaf319d9ee4c5ac16d93195bf8cba2d1559b631555ad61941461cda6d3909faab86e52389846b2b36345cff8f0c3f4eb345b1b8efadcf9 + languageName: node + linkType: hard + +"postcss-reduce-idents@npm:^5.2.0": + version: 5.2.0 + resolution: "postcss-reduce-idents@npm:5.2.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: f0d644c86e160dd36ee4dd924ab7d6feacac867c87702e2f98f96b409430a62de4fec2dfc3c8731bda4e14196e29a752b4558942f0af2a3e6cd7f1f4b173db8e + languageName: node + linkType: hard + +"postcss-reduce-initial@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-reduce-initial@npm:5.1.1" + dependencies: + browserslist: ^4.21.4 + caniuse-api: ^3.0.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 1b704aba8c38103cbb5a75c6201dbf58ec2f3a978013c7f7e8957fd3bf3282f992050dec5a01bc050d031bad836e187dd6622b922ca78ab92bcd0afd21fb0b98 + languageName: node + linkType: hard + +"postcss-reduce-transforms@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-reduce-transforms@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 0c6af2cba20e3ff63eb9ad045e634ddfb9c3e5c0e614c020db2a02f3aa20632318c4ede9e0c995f9225d9a101e673de91c0a6e10bb2fa5da6d6c75d15a55882f + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": + version: 6.0.11 + resolution: "postcss-selector-parser@npm:6.0.11" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: 0b01aa9c2d2c8dbeb51e9b204796b678284be9823abc8d6d40a8b16d4149514e922c264a8ed4deb4d6dbced564b9be390f5942c058582d8656351516d6c49cde + languageName: node + linkType: hard + +"postcss-sort-media-queries@npm:^4.2.1": + version: 4.3.0 + resolution: "postcss-sort-media-queries@npm:4.3.0" + dependencies: + sort-css-media-queries: 2.1.0 + peerDependencies: + postcss: ^8.4.16 + checksum: 7bf9fcde74781f40ca49484e84dcd26e491632b296ba77b3f4b7ea7778f816ac48f87d2c6ab0a629edf636440a4240615b69a4ece1dd7597f6a4e0678794eb0e + languageName: node + linkType: hard + +"postcss-svgo@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-svgo@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + svgo: ^2.7.0 + peerDependencies: + postcss: ^8.2.15 + checksum: d86eb5213d9f700cf5efe3073799b485fb7cacae0c731db3d7749c9c2b1c9bc85e95e0baeca439d699ff32ea24815fc916c4071b08f67ed8219df229ce1129bd + languageName: node + linkType: hard + +"postcss-unique-selectors@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-unique-selectors@npm:5.1.1" + dependencies: + postcss-selector-parser: ^6.0.5 + peerDependencies: + postcss: ^8.2.15 + checksum: 637e7b786e8558265775c30400c54b6b3b24d4748923f4a39f16a65fd0e394f564ccc9f0a1d3c0e770618a7637a7502ea1d0d79f731d429cb202255253c23278 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f + languageName: node + linkType: hard + +"postcss-zindex@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-zindex@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 8581e0ee552622489dcb9fb9609a3ccc261a67a229ba91a70bd138fe102a2d04cedb14642b82b673d4cac7b559ef32574f2dafde2ff7816eecac024d231c5ead + languageName: node + linkType: hard + +"postcss@npm:^8.3.11, postcss@npm:^8.4.14, postcss@npm:^8.4.17, postcss@npm:^8.4.18": + version: 8.4.19 + resolution: "postcss@npm:8.4.19" + dependencies: + nanoid: ^3.3.4 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: 62782723a385f92b7525f66d29614624de7c5643855423db3a5efd9287e677650300192749adddbbb6734cea9b1d5f5fd4f6ea00ca3f9a95dbbb88f835f5ca64 + languageName: node + linkType: hard + +"prebuild-install@npm:^7.1.1": + version: 7.1.1 + resolution: "prebuild-install@npm:7.1.1" + dependencies: + detect-libc: ^2.0.0 + expand-template: ^2.0.3 + github-from-package: 0.0.0 + minimist: ^1.2.3 + mkdirp-classic: ^0.5.3 + napi-build-utils: ^1.0.1 + node-abi: ^3.3.0 + pump: ^3.0.0 + rc: ^1.2.7 + simple-get: ^4.0.0 + tar-fs: ^2.0.0 + tunnel-agent: ^0.6.0 + bin: + prebuild-install: bin.js + checksum: dbf96d0146b6b5827fc8f67f72074d2e19c69628b9a7a0a17d0fad1bf37e9f06922896972e074197fc00a52eae912993e6ef5a0d471652f561df5cb516f3f467 + languageName: node + linkType: hard + +"prepend-http@npm:^2.0.0": + version: 2.0.0 + resolution: "prepend-http@npm:2.0.0" + checksum: 7694a9525405447662c1ffd352fcb41b6410c705b739b6f4e3a3e21cf5fdede8377890088e8934436b8b17ba55365a615f153960f30877bf0d0392f9e93503ea + languageName: node + linkType: hard + +"pretty-error@npm:^4.0.0": + version: 4.0.0 + resolution: "pretty-error@npm:4.0.0" + dependencies: + lodash: ^4.17.20 + renderkid: ^3.0.0 + checksum: a5b9137365690104ded6947dca2e33360bf55e62a4acd91b1b0d7baa3970e43754c628cc9e16eafbdd4e8f8bcb260a5865475d4fc17c3106ff2d61db4e72cdf3 + languageName: node + linkType: hard + +"pretty-time@npm:^1.1.0": + version: 1.1.0 + resolution: "pretty-time@npm:1.1.0" + checksum: a319e7009aadbc6cfedbd8b66861327d3a0c68bd3e8794bf5b86f62b40b01b9479c5a70c76bb368ad454acce52a1216daee460cc825766e2442c04f3a84a02c9 + languageName: node + linkType: hard + +"prism-react-renderer@npm:^1.3.5": + version: 1.3.5 + resolution: "prism-react-renderer@npm:1.3.5" + peerDependencies: + react: ">=0.14.9" + checksum: c18806dcbc4c0b4fd6fd15bd06b4f7c0a6da98d93af235c3e970854994eb9b59e23315abb6cfc29e69da26d36709a47e25da85ab27fed81b6812f0a52caf6dfa + languageName: node + linkType: hard + +"prismjs@npm:^1.28.0": + version: 1.29.0 + resolution: "prismjs@npm:1.29.0" + checksum: 007a8869d4456ff8049dc59404e32d5666a07d99c3b0e30a18bd3b7676dfa07d1daae9d0f407f20983865fd8da56de91d09cb08e6aa61f5bc420a27c0beeaf93 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"promise@npm:^7.1.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: ~2.0.3 + checksum: 475bb069130179fbd27ed2ab45f26d8862376a137a57314cf53310bdd85cc986a826fd585829be97ebc0aaf10e9d8e68be1bfe5a4a0364144b1f9eedfa940cf1 + languageName: node + linkType: hard + +"prompts@npm:^2.4.2": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + languageName: node + linkType: hard + +"prop-types@npm:^15.0.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + languageName: node + linkType: hard + +"property-information@npm:^5.0.0, property-information@npm:^5.3.0": + version: 5.6.0 + resolution: "property-information@npm:5.6.0" + dependencies: + xtend: ^4.0.0 + checksum: fcf87c6542e59a8bbe31ca0b3255a4a63ac1059b01b04469680288998bcfa97f341ca989566adbb63975f4d85339030b82320c324a511532d390910d1c583893 + languageName: node + linkType: hard + +"proxy-addr@npm:~2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.0 + resolution: "pump@npm:3.0.0" + dependencies: + end-of-stream: ^1.1.0 + once: ^1.3.1 + checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 + languageName: node + linkType: hard + +"punycode@npm:^1.3.2": + version: 1.4.1 + resolution: "punycode@npm:1.4.1" + checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.1.1 + resolution: "punycode@npm:2.1.1" + checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 + languageName: node + linkType: hard + +"pupa@npm:^2.1.1": + version: 2.1.1 + resolution: "pupa@npm:2.1.1" + dependencies: + escape-goat: ^2.0.0 + checksum: 49529e50372ffdb0cccf0efa0f3b3cb0a2c77805d0d9cc2725bd2a0f6bb414631e61c93a38561b26be1259550b7bb6c2cb92315aa09c8bf93f3bdcb49f2b2fb7 + languageName: node + linkType: hard + +"pure-color@npm:^1.2.0": + version: 1.3.0 + resolution: "pure-color@npm:1.3.0" + checksum: 646d8bed6e6eab89affdd5e2c11f607a85b631a7fb03c061dfa658eb4dc4806881a15feed2ac5fd8c0bad8c00c632c640d5b1cb8b9a972e6e947393a1329371b + languageName: node + linkType: hard + +"qs@npm:6.11.0": + version: 6.11.0 + resolution: "qs@npm:6.11.0" + dependencies: + side-channel: ^1.0.4 + checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"queue@npm:6.0.2": + version: 6.0.2 + resolution: "queue@npm:6.0.2" + dependencies: + inherits: ~2.0.3 + checksum: ebc23639248e4fe40a789f713c20548e513e053b3dc4924b6cb0ad741e3f264dcff948225c8737834dd4f9ec286dbc06a1a7c13858ea382d9379f4303bcc0916 + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 + languageName: node + linkType: hard + +"range-parser@npm:1.2.0": + version: 1.2.0 + resolution: "range-parser@npm:1.2.0" + checksum: bdf397f43fedc15c559d3be69c01dedf38444ca7a1610f5bf5955e3f3da6057a892f34691e7ebdd8c7e1698ce18ef6c4d4811f70e658dda3ff230ef741f8423a + languageName: node + linkType: hard + +"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 + languageName: node + linkType: hard + +"raw-body@npm:2.5.1": + version: 2.5.1 + resolution: "raw-body@npm:2.5.1" + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e + languageName: node + linkType: hard + +"rc@npm:1.2.8, rc@npm:^1.2.7, rc@npm:^1.2.8": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: ^0.6.0 + ini: ~1.3.0 + minimist: ^1.2.0 + strip-json-comments: ~2.0.1 + bin: + rc: ./cli.js + checksum: 2e26e052f8be2abd64e6d1dabfbd7be03f80ec18ccbc49562d31f617d0015fbdbcf0f9eed30346ea6ab789e0fdfe4337f033f8016efdbee0df5354751842080e + languageName: node + linkType: hard + +"react-base16-styling@npm:^0.6.0": + version: 0.6.0 + resolution: "react-base16-styling@npm:0.6.0" + dependencies: + base16: ^1.0.0 + lodash.curry: ^4.0.1 + lodash.flow: ^3.3.0 + pure-color: ^1.2.0 + checksum: 00a12dddafc8a9025cca933b0dcb65fca41c81fa176d1fc3a6a9d0242127042e2c0a604f4c724a3254dd2c6aeb5ef55095522ff22f5462e419641c1341a658e4 + languageName: node + linkType: hard + +"react-dev-utils@npm:^12.0.1": + version: 12.0.1 + resolution: "react-dev-utils@npm:12.0.1" + dependencies: + "@babel/code-frame": ^7.16.0 + address: ^1.1.2 + browserslist: ^4.18.1 + chalk: ^4.1.2 + cross-spawn: ^7.0.3 + detect-port-alt: ^1.1.6 + escape-string-regexp: ^4.0.0 + filesize: ^8.0.6 + find-up: ^5.0.0 + fork-ts-checker-webpack-plugin: ^6.5.0 + global-modules: ^2.0.0 + globby: ^11.0.4 + gzip-size: ^6.0.0 + immer: ^9.0.7 + is-root: ^2.1.0 + loader-utils: ^3.2.0 + open: ^8.4.0 + pkg-up: ^3.1.0 + prompts: ^2.4.2 + react-error-overlay: ^6.0.11 + recursive-readdir: ^2.2.2 + shell-quote: ^1.7.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + checksum: 2c6917e47f03d9595044770b0f883a61c6b660fcaa97b8ba459a1d57c9cca9aa374cd51296b22d461ff5e432105dbe6f04732dab128e52729c79239e1c23ab56 + languageName: node + linkType: hard + +"react-dom@npm:^17.0.2": + version: 17.0.2 + resolution: "react-dom@npm:17.0.2" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + scheduler: ^0.20.2 + peerDependencies: + react: 17.0.2 + checksum: 1c1eaa3bca7c7228d24b70932e3d7c99e70d1d04e13bb0843bbf321582bc25d7961d6b8a6978a58a598af2af496d1cedcfb1bf65f6b0960a0a8161cb8dab743c + languageName: node + linkType: hard + +"react-error-overlay@npm:^6.0.11": + version: 6.0.11 + resolution: "react-error-overlay@npm:6.0.11" + checksum: ce7b44c38fadba9cedd7c095cf39192e632daeccf1d0747292ed524f17dcb056d16bc197ddee5723f9dd888f0b9b19c3b486c430319e30504289b9296f2d2c42 + languageName: node + linkType: hard + +"react-fast-compare@npm:^3.0.1, react-fast-compare@npm:^3.2.0": + version: 3.2.0 + resolution: "react-fast-compare@npm:3.2.0" + checksum: 8ef272c825ae329f61633ce4ce7f15aa5b84e5214d88bc0823880236e03e985a13195befa2c7a4eda7db3b017dc7985729152d88445823f652403cf36c2b86aa + languageName: node + linkType: hard + +"react-helmet-async@npm:*, react-helmet-async@npm:^1.3.0": + version: 1.3.0 + resolution: "react-helmet-async@npm:1.3.0" + dependencies: + "@babel/runtime": ^7.12.5 + invariant: ^2.2.4 + prop-types: ^15.7.2 + react-fast-compare: ^3.2.0 + shallowequal: ^1.1.0 + peerDependencies: + react: ^16.6.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 + checksum: 7ca7e47f8af14ea186688b512a87ab912bf6041312b297f92516341b140b3f0f8aedf5a44d226d99e69ed067b0cc106e38aeb9c9b738ffcc63d10721c844db90 + languageName: node + linkType: hard + +"react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^17.0.1 || ^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + +"react-json-view@npm:^1.21.3": + version: 1.21.3 + resolution: "react-json-view@npm:1.21.3" + dependencies: + flux: ^4.0.1 + react-base16-styling: ^0.6.0 + react-lifecycles-compat: ^3.0.4 + react-textarea-autosize: ^8.3.2 + peerDependencies: + react: ^17.0.0 || ^16.3.0 || ^15.5.4 + react-dom: ^17.0.0 || ^16.3.0 || ^15.5.4 + checksum: 5718bcd9210ad5b06eb9469cf8b9b44be9498845a7702e621343618e8251f26357e6e1c865532cf170db6165df1cb30202787e057309d8848c220bc600ec0d1a + languageName: node + linkType: hard + +"react-lifecycles-compat@npm:^3.0.4": + version: 3.0.4 + resolution: "react-lifecycles-compat@npm:3.0.4" + checksum: a904b0fc0a8eeb15a148c9feb7bc17cec7ef96e71188280061fc340043fd6d8ee3ff233381f0e8f95c1cf926210b2c4a31f38182c8f35ac55057e453d6df204f + languageName: node + linkType: hard + +"react-loadable-ssr-addon-v5-slorber@npm:^1.0.1": + version: 1.0.1 + resolution: "react-loadable-ssr-addon-v5-slorber@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.10.3 + peerDependencies: + react-loadable: "*" + webpack: ">=4.41.1 || 5.x" + checksum: 1cf7ceb488d329a5be15f891dae16727fb7ade08ef57826addd21e2c3d485e2440259ef8be94f4d54e9afb4bcbd2fcc22c3c5bad92160c9c06ae6ba7b5562497 + languageName: node + linkType: hard + +"react-popper@npm:^2.2.5": + version: 2.3.0 + resolution: "react-popper@npm:2.3.0" + dependencies: + react-fast-compare: ^3.0.1 + warning: ^4.0.2 + peerDependencies: + "@popperjs/core": ^2.0.0 + react: ^16.8.0 || ^17 || ^18 + react-dom: ^16.8.0 || ^17 || ^18 + checksum: 837111c98738011c69b3069a464ea5bdcbf487105b6148e8faf90cb7337e134edb1b98b8824322941c378756cca30a15c18c25f558e53b85ed5762fa0dc8e6b2 + languageName: node + linkType: hard + +"react-router-config@npm:^5.1.1": + version: 5.1.1 + resolution: "react-router-config@npm:5.1.1" + dependencies: + "@babel/runtime": ^7.1.2 + peerDependencies: + react: ">=15" + react-router: ">=5" + checksum: bde7ee79444454bf7c3737fd9c5c268021012c8cc37bc19116b2e7daa28c4231598c275816c7f32c16f9f974dc707b91de279291a5e39efce2e1b1569355b87a + languageName: node + linkType: hard + +"react-router-dom@npm:^5.3.3": + version: 5.3.4 + resolution: "react-router-dom@npm:5.3.4" + dependencies: + "@babel/runtime": ^7.12.13 + history: ^4.9.0 + loose-envify: ^1.3.1 + prop-types: ^15.6.2 + react-router: 5.3.4 + tiny-invariant: ^1.0.2 + tiny-warning: ^1.0.0 + peerDependencies: + react: ">=15" + checksum: b86a6f2f5222f041e38adf4e4b32c7643d6735a1a915ef25855b2db285fd059d72ba8d62e5bcd5d822b8ef9520a80453209e55077f5a90d0f72e908979b8f535 + languageName: node + linkType: hard + +"react-router@npm:5.3.4, react-router@npm:^5.3.3": + version: 5.3.4 + resolution: "react-router@npm:5.3.4" + dependencies: + "@babel/runtime": ^7.12.13 + history: ^4.9.0 + hoist-non-react-statics: ^3.1.0 + loose-envify: ^1.3.1 + 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 + peerDependencies: + react: ">=15" + checksum: 892d4e274a23bf4f39abc2efca54472fb646d3aed4b584020cf49654d2f50d09a2bacebe7c92b4ec7cb8925077376dfcd0664bad6442a73604397cefec9f01f9 + languageName: node + linkType: hard + +"react-textarea-autosize@npm:^8.3.2": + version: 8.4.0 + resolution: "react-textarea-autosize@npm:8.4.0" + dependencies: + "@babel/runtime": ^7.10.2 + use-composed-ref: ^1.3.0 + use-latest: ^1.2.1 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 055fb51b74e1ab6b286490cfcd8ed77a760f6fc90706053b5dfcb138199d02c56289a1060a1daf9f3ae37ffd66f73e9553f026d0fad446bc2243b713acf48e05 + languageName: node + linkType: hard + +"react-waypoint@npm:^10.3.0": + version: 10.3.0 + resolution: "react-waypoint@npm:10.3.0" + dependencies: + "@babel/runtime": ^7.12.5 + consolidated-events: ^1.1.0 || ^2.0.0 + prop-types: ^15.0.0 + react-is: ^17.0.1 || ^18.0.0 + peerDependencies: + react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: 5a476432cd4a55ae022b33f82610a1addae92912ec88111cf33c17ef473bbbfc2c695714cb3bd60911259c92c5b6349f80033b022bf1e59e1a4be9b198a70a7a + languageName: node + linkType: hard + +"react@npm:^17.0.2": + version: 17.0.2 + resolution: "react@npm:17.0.2" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + checksum: b254cc17ce3011788330f7bbf383ab653c6848902d7936a87b09d835d091e3f295f7e9dd1597c6daac5dc80f90e778c8230218ba8ad599f74adcc11e33b9d61b + languageName: node + linkType: hard + +"readable-stream@npm:^2.0.1": + version: 2.3.7 + resolution: "readable-stream@npm:2.3.7" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.3 + isarray: ~1.0.0 + process-nextick-args: ~2.0.0 + safe-buffer: ~5.1.1 + string_decoder: ~1.1.1 + util-deprecate: ~1.0.1 + checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.0 + resolution: "readable-stream@npm:3.6.0" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + +"reading-time@npm:^1.5.0": + version: 1.5.0 + resolution: "reading-time@npm:1.5.0" + checksum: e27bc5a70ba0f4ac337896b18531b914d38f4bee67cbad48029d0c11dd0a7a847b2a6bba895ab7ce2ad3e7ecb86912bdc477d8fa2d48405a3deda964be54d09b + languageName: node + linkType: hard + +"rechoir@npm:^0.6.2": + version: 0.6.2 + resolution: "rechoir@npm:0.6.2" + dependencies: + resolve: ^1.1.6 + checksum: fe76bf9c21875ac16e235defedd7cbd34f333c02a92546142b7911a0f7c7059d2e16f441fe6fb9ae203f459c05a31b2bcf26202896d89e390eda7514d5d2702b + languageName: node + linkType: hard + +"recursive-readdir@npm:^2.2.2": + version: 2.2.3 + resolution: "recursive-readdir@npm:2.2.3" + dependencies: + minimatch: ^3.0.5 + checksum: 88ec96e276237290607edc0872b4f9842837b95cfde0cdbb1e00ba9623dfdf3514d44cdd14496ab60a0c2dd180a6ef8a3f1c34599e6cf2273afac9b72a6fb2b5 + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.1.0": + version: 10.1.0 + resolution: "regenerate-unicode-properties@npm:10.1.0" + dependencies: + regenerate: ^1.4.2 + checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.11": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + +"regenerator-transform@npm:^0.15.1": + version: 0.15.1 + resolution: "regenerator-transform@npm:0.15.1" + dependencies: + "@babel/runtime": ^7.8.4 + checksum: 2d15bdeadbbfb1d12c93f5775493d85874dbe1d405bec323da5c61ec6e701bc9eea36167483e1a5e752de9b2df59ab9a2dfff6bf3784f2b28af2279a673d29a4 + languageName: node + linkType: hard + +"regexpu-core@npm:^5.2.1": + version: 5.2.2 + resolution: "regexpu-core@npm:5.2.2" + dependencies: + regenerate: ^1.4.2 + regenerate-unicode-properties: ^10.1.0 + regjsgen: ^0.7.1 + regjsparser: ^0.9.1 + unicode-match-property-ecmascript: ^2.0.0 + unicode-match-property-value-ecmascript: ^2.1.0 + checksum: 87c56815e20d213848d38f6b047ba52f0d632f36e791b777f59327e8d350c0743b27cc25feab64c0eadc9fe9959dde6b1261af71108a9371b72c8c26beda05ef + languageName: node + linkType: hard + +"registry-auth-token@npm:^4.0.0": + version: 4.2.2 + resolution: "registry-auth-token@npm:4.2.2" + dependencies: + rc: 1.2.8 + checksum: c5030198546ecfdcbcb0722cbc3e260c4f5f174d8d07bdfedd4620e79bfdf17a2db735aa230d600bd388fce6edd26c0a9ed2eb7e9b4641ec15213a28a806688b + languageName: node + linkType: hard + +"registry-url@npm:^5.0.0": + version: 5.1.0 + resolution: "registry-url@npm:5.1.0" + dependencies: + rc: ^1.2.8 + checksum: bcea86c84a0dbb66467b53187fadebfea79017cddfb4a45cf27530d7275e49082fe9f44301976eb0164c438e395684bcf3dae4819b36ff9d1640d8cc60c73df9 + languageName: node + linkType: hard + +"regjsgen@npm:^0.7.1": + version: 0.7.1 + resolution: "regjsgen@npm:0.7.1" + checksum: 7cac399921c58db8e16454869283ff66871531180218064fa938ac05c11c2976792a00706c3c78bbc625e1d793ca373065ea90564e06189a751a7b4ae33acadc + languageName: node + linkType: hard + +"regjsparser@npm:^0.9.1": + version: 0.9.1 + resolution: "regjsparser@npm:0.9.1" + dependencies: + jsesc: ~0.5.0 + bin: + regjsparser: bin/parser + checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc + languageName: node + linkType: hard + +"relateurl@npm:^0.2.7": + version: 0.2.7 + resolution: "relateurl@npm:0.2.7" + checksum: 5891e792eae1dfc3da91c6fda76d6c3de0333a60aa5ad848982ebb6dccaa06e86385fb1235a1582c680a3d445d31be01c6bfc0804ebbcab5aaf53fa856fde6b6 + languageName: node + linkType: hard + +"remark-emoji@npm:^2.2.0": + version: 2.2.0 + resolution: "remark-emoji@npm:2.2.0" + dependencies: + emoticon: ^3.2.0 + node-emoji: ^1.10.0 + unist-util-visit: ^2.0.3 + checksum: 638d4be72eb4110a447f389d4b8c454921f188c0acabf1b6579f3ddaa301ee91010173d6eebd975ea622ae3de7ed4531c0315a4ffd4f9653d80c599ef9ec21a8 + languageName: node + linkType: hard + +"remark-footnotes@npm:2.0.0": + version: 2.0.0 + resolution: "remark-footnotes@npm:2.0.0" + checksum: f2f87ffd6fe25892373c7164d6584a7cb03ab0ea4f186af493a73df519e24b72998a556e7f16cb996f18426cdb80556b95ff252769e252cf3ccba0fd2ca20621 + languageName: node + linkType: hard + +"remark-mdx@npm:1.6.22": + version: 1.6.22 + resolution: "remark-mdx@npm:1.6.22" + 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 + checksum: 45e62f8a821c37261f94448d54f295de1c5c393f762ff96cd4d4b730715037fafeb6c89ef94adf6a10a09edfa72104afe1431b93b5ae5e40ce2a7677e133c3d9 + languageName: node + linkType: hard + +"remark-parse@npm:8.0.3": + version: 8.0.3 + resolution: "remark-parse@npm:8.0.3" + 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 + checksum: 2dfea250e7606ddfc9e223b9f41e0b115c5c701be4bd35181beaadd46ee59816bc00aadc6085a420f8df00b991ada73b590ea7fd34ace14557de4a0a41805be5 + languageName: node + linkType: hard + +"remark-squeeze-paragraphs@npm:4.0.0": + version: 4.0.0 + resolution: "remark-squeeze-paragraphs@npm:4.0.0" + dependencies: + mdast-squeeze-paragraphs: ^4.0.0 + checksum: 2071eb74d0ecfefb152c4932690a9fd950c3f9f798a676f1378a16db051da68fb20bf288688cc153ba5019dded35408ff45a31dfe9686eaa7a9f1df9edbb6c81 + languageName: node + linkType: hard + +"renderkid@npm:^3.0.0": + version: 3.0.0 + resolution: "renderkid@npm:3.0.0" + dependencies: + css-select: ^4.1.3 + dom-converter: ^0.2.0 + htmlparser2: ^6.1.0 + lodash: ^4.17.21 + strip-ansi: ^6.0.1 + checksum: 77162b62d6f33ab81f337c39efce0439ff0d1f6d441e29c35183151f83041c7850774fb904da163d6c844264d440d10557714e6daa0b19e4561a5cd4ef305d41 + languageName: node + linkType: hard + +"repeat-string@npm:^1.5.4": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + +"require-like@npm:>= 0.1.1": + version: 0.1.2 + resolution: "require-like@npm:0.1.2" + checksum: edb8331f05fd807381a75b76f6cca9f0ce8acaa2e910b7e116541799aa970bfbc64fde5fd6adb3a6917dba346f8386ebbddb81614c24e8dad1b4290c7af9535e + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"resolve-pathname@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-pathname@npm:3.0.0" + checksum: 6147241ba42c423dbe83cb067a2b4af4f60908c3af57e1ea567729cc71416c089737fe2a73e9e79e7a60f00f66c91e4b45ad0d37cd4be2d43fec44963ef14368 + languageName: node + linkType: hard + +"resolve@npm:^1.1.6, resolve@npm:^1.14.2, resolve@npm:^1.3.2": + version: 1.22.1 + resolution: "resolve@npm:1.22.1" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.3.2#~builtin": + version: 1.22.1 + resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b + languageName: node + linkType: hard + +"responselike@npm:^1.0.2": + version: 1.0.2 + resolution: "responselike@npm:1.0.2" + dependencies: + lowercase-keys: ^1.0.0 + checksum: 2e9e70f1dcca3da621a80ce71f2f9a9cad12c047145c6ece20df22f0743f051cf7c73505e109814915f23f9e34fb0d358e22827723ee3d56b623533cab8eafcd + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"retry@npm:^0.13.1": + version: 0.13.1 + resolution: "retry@npm:0.13.1" + checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"rtl-detect@npm:^1.0.4": + version: 1.0.4 + resolution: "rtl-detect@npm:1.0.4" + checksum: d562535baa0db62f57f0a1d4676297bff72fd6b94e88f0f0900d5c3e810ab512c5c4cadffd3e05fbe8d9c74310c919afa3ea8c1001c244e5555e8eef12d02d6f + languageName: node + linkType: hard + +"rtlcss@npm:^3.5.0": + version: 3.5.0 + resolution: "rtlcss@npm:3.5.0" + dependencies: + find-up: ^5.0.0 + picocolors: ^1.0.0 + postcss: ^8.3.11 + strip-json-comments: ^3.1.1 + bin: + rtlcss: bin/rtlcss.js + checksum: a3763cad2cb58ce1b950de155097c3c294e7aefc8bf328b58d0cc8d5efb88bf800865edc158a78ace6d1f7f99fea6fd66fb4a354d859b172dadd3dab3e0027b3 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"rxjs@npm:^7.5.4": + version: 7.5.7 + resolution: "rxjs@npm:7.5.7" + dependencies: + tslib: ^2.1.0 + checksum: edabcdb73b0f7e0f5f6e05c2077aff8c52222ac939069729704357d6406438acca831c24210db320aba269e86dbe1a400f3769c89101791885121a342fb15d9c + languageName: node + linkType: hard + +"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"sax@npm:^1.2.4": + version: 1.2.4 + resolution: "sax@npm:1.2.4" + checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe + languageName: node + linkType: hard + +"scheduler@npm:^0.20.2": + version: 0.20.2 + resolution: "scheduler@npm:0.20.2" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + checksum: c4b35cf967c8f0d3e65753252d0f260271f81a81e427241295c5a7b783abf4ea9e905f22f815ab66676f5313be0a25f47be582254db8f9241b259213e999b8fc + languageName: node + linkType: hard + +"schema-utils@npm:2.7.0": + version: 2.7.0 + resolution: "schema-utils@npm:2.7.0" + dependencies: + "@types/json-schema": ^7.0.4 + ajv: ^6.12.2 + ajv-keywords: ^3.4.1 + checksum: 8889325b0ee1ae6a8f5d6aaa855c71e136ebbb7fd731b01a9d3ec8225dcb245f644c47c50104db4c741983b528cdff8558570021257d4d397ec6aaecd9172a8e + languageName: node + linkType: hard + +"schema-utils@npm:^2.6.5": + version: 2.7.1 + resolution: "schema-utils@npm:2.7.1" + dependencies: + "@types/json-schema": ^7.0.5 + ajv: ^6.12.4 + ajv-keywords: ^3.5.2 + checksum: 32c62fc9e28edd101e1bd83453a4216eb9bd875cc4d3775e4452b541908fa8f61a7bbac8ffde57484f01d7096279d3ba0337078e85a918ecbeb72872fb09fb2b + languageName: node + linkType: hard + +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.0, schema-utils@npm:^3.1.1": + version: 3.1.1 + resolution: "schema-utils@npm:3.1.1" + dependencies: + "@types/json-schema": ^7.0.8 + ajv: ^6.12.5 + ajv-keywords: ^3.5.2 + checksum: fb73f3d759d43ba033c877628fe9751620a26879f6301d3dbeeb48cf2a65baec5cdf99da65d1bf3b4ff5444b2e59cbe4f81c2456b5e0d2ba7d7fd4aed5da29ce + languageName: node + linkType: hard + +"schema-utils@npm:^4.0.0": + version: 4.0.0 + resolution: "schema-utils@npm:4.0.0" + dependencies: + "@types/json-schema": ^7.0.9 + ajv: ^8.8.0 + ajv-formats: ^2.1.1 + ajv-keywords: ^5.0.0 + checksum: c843e92fdd1a5c145dbb6ffdae33e501867f9703afac67bdf35a685e49f85b1dcc10ea250033175a64bd9d31f0555bc6785b8359da0c90bcea30cf6dfbb55a8f + languageName: node + linkType: hard + +"section-matter@npm:^1.0.0": + version: 1.0.0 + resolution: "section-matter@npm:1.0.0" + dependencies: + extend-shallow: ^2.0.1 + kind-of: ^6.0.0 + checksum: 3cc4131705493b2955729b075dcf562359bba66183debb0332752dc9cad35616f6da7a23e42b6cab45cd2e4bb5cda113e9e84c8f05aee77adb6b0289a0229101 + languageName: node + linkType: hard + +"select-hose@npm:^2.0.0": + version: 2.0.0 + resolution: "select-hose@npm:2.0.0" + checksum: d7e5fcc695a4804209d232a1b18624a5134be334d4e1114b0721f7a5e72bd73da483dcf41528c1af4f4f4892ad7cfd6a1e55c8ffb83f9c9fe723b738db609dbb + languageName: node + linkType: hard + +"selfsigned@npm:^2.1.1": + version: 2.1.1 + resolution: "selfsigned@npm:2.1.1" + dependencies: + node-forge: ^1 + checksum: aa9ce2150a54838978d5c0aee54d7ebe77649a32e4e690eb91775f71fdff773874a4fbafd0ac73d8ec3b702ff8a395c604df4f8e8868528f36fd6c15076fb43a + languageName: node + linkType: hard + +"semver-diff@npm:^3.1.1": + version: 3.1.1 + resolution: "semver-diff@npm:3.1.1" + dependencies: + semver: ^6.3.0 + checksum: 8bbe5a5d7add2d5e51b72314a9215cd294d71f41cdc2bf6bd59ee76411f3610b576172896f1d191d0d7294cb9f2f847438d2ee158adacc0c224dca79052812fe + languageName: node + linkType: hard + +"semver@npm:^5.4.1": + version: 5.7.1 + resolution: "semver@npm:5.7.1" + bin: + semver: ./bin/semver + checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.2.0, semver@npm:^6.3.0": + version: 6.3.0 + resolution: "semver@npm:6.3.0" + bin: + semver: ./bin/semver.js + checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + languageName: node + linkType: hard + +"semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8": + version: 7.3.8 + resolution: "semver@npm:7.3.8" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 + languageName: node + linkType: hard + +"send@npm:0.18.0": + version: 0.18.0 + resolution: "send@npm:0.18.0" + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: ~1.2.1 + statuses: 2.0.1 + checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.0": + version: 6.0.0 + resolution: "serialize-javascript@npm:6.0.0" + dependencies: + randombytes: ^2.1.0 + checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 + languageName: node + linkType: hard + +"serve-handler@npm:^6.1.3": + version: 6.1.5 + resolution: "serve-handler@npm:6.1.5" + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + fast-url-parser: 1.1.3 + mime-types: 2.1.18 + minimatch: 3.1.2 + path-is-inside: 1.0.2 + path-to-regexp: 2.2.1 + range-parser: 1.2.0 + checksum: 7a98ca9cbf8692583b6cde4deb3941cff900fa38bf16adbfccccd8430209bab781e21d9a1f61c9c03e226f9f67689893bbce25941368f3ddaf985fc3858b49dc + languageName: node + linkType: hard + +"serve-index@npm:^1.9.1": + version: 1.9.1 + resolution: "serve-index@npm:1.9.1" + dependencies: + accepts: ~1.3.4 + batch: 0.6.1 + debug: 2.6.9 + escape-html: ~1.0.3 + http-errors: ~1.6.2 + mime-types: ~2.1.17 + parseurl: ~1.3.2 + checksum: e2647ce13379485b98a53ba2ea3fbad4d44b57540d00663b02b976e426e6194d62ac465c0d862cb7057f65e0de8ab8a684aa095427a4b8612412eca0d300d22f + languageName: node + linkType: hard + +"serve-static@npm:1.15.0": + version: 1.15.0 + resolution: "serve-static@npm:1.15.0" + dependencies: + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + parseurl: ~1.3.3 + send: 0.18.0 + checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + +"setprototypeof@npm:1.1.0": + version: 1.1.0 + resolution: "setprototypeof@npm:1.1.0" + checksum: 27cb44304d6c9e1a23bc6c706af4acaae1a7aa1054d4ec13c05f01a99fd4887109a83a8042b67ad90dbfcd100d43efc171ee036eb080667172079213242ca36e + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: ^6.0.2 + checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 + languageName: node + linkType: hard + +"shallowequal@npm:^1.1.0": + version: 1.1.0 + resolution: "shallowequal@npm:1.1.0" + checksum: f4c1de0837f106d2dbbfd5d0720a5d059d1c66b42b580965c8f06bb1db684be8783538b684092648c981294bf817869f743a066538771dbecb293df78f765e00 + languageName: node + linkType: hard + +"sharp@npm:^0.30.7": + version: 0.30.7 + resolution: "sharp@npm:0.30.7" + dependencies: + color: ^4.2.3 + detect-libc: ^2.0.1 + node-addon-api: ^5.0.0 + node-gyp: latest + prebuild-install: ^7.1.1 + semver: ^7.3.7 + simple-get: ^4.0.1 + tar-fs: ^2.1.1 + tunnel-agent: ^0.6.0 + checksum: bbc63ca3c7ea8a5bff32cd77022cfea30e25a03f5bd031e935924bf6cf0e11e3388e8b0e22b3137bf8816aa73407f1e4fbeb190f3a35605c27ffca9f32b91601 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"shell-quote@npm:^1.7.3": + version: 1.7.4 + resolution: "shell-quote@npm:1.7.4" + checksum: 2874ea9c1a7c3ebfc9ec5734a897e16533d0d06f2e4cddc22ba3d1cab5cdc07d0f825364c1b1e39abe61236f44d8e60e933c7ad7349ce44de4f5dddc7b4354e9 + languageName: node + linkType: hard + +"shelljs@npm:^0.8.5": + version: 0.8.5 + resolution: "shelljs@npm:0.8.5" + dependencies: + glob: ^7.0.0 + interpret: ^1.0.0 + rechoir: ^0.6.2 + bin: + shjs: bin/shjs + checksum: 7babc46f732a98f4c054ec1f048b55b9149b98aa2da32f6cf9844c434b43c6251efebd6eec120937bd0999e13811ebd45efe17410edb3ca938f82f9381302748 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.4 + resolution: "side-channel@npm:1.0.4" + dependencies: + call-bind: ^1.0.0 + get-intrinsic: ^1.0.2 + object-inspect: ^1.9.0 + checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 4d211042cc3d73a718c21ac6c4e7d7a0363e184be6a5ad25c8a1502e49df6d0a0253979e3d50dbdd3f60ef6c6c58d756b5d66ac1e05cda9cacd2e9fc59e3876a + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0, simple-get@npm:^4.0.1": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: ^6.0.0 + once: ^1.3.1 + simple-concat: ^1.0.0 + checksum: e4132fd27cf7af230d853fa45c1b8ce900cb430dd0a3c6d3829649fe4f2b26574c803698076c4006450efb0fad2ba8c5455fbb5755d4b0a5ec42d4f12b31d27e + languageName: node + linkType: hard + +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: ^0.3.1 + checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0 + languageName: node + linkType: hard + +"sirv@npm:^1.0.7": + version: 1.0.19 + resolution: "sirv@npm:1.0.19" + dependencies: + "@polka/url": ^1.0.0-next.20 + mrmime: ^1.0.0 + totalist: ^1.0.0 + checksum: c943cfc61baf85f05f125451796212ec35d4377af4da90ae8ec1fa23e6d7b0b4d9c74a8fbf65af83c94e669e88a09dc6451ba99154235eead4393c10dda5b07c + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + languageName: node + linkType: hard + +"sitemap@npm:^7.1.1": + version: 7.1.1 + resolution: "sitemap@npm:7.1.1" + dependencies: + "@types/node": ^17.0.5 + "@types/sax": ^1.2.1 + arg: ^5.0.0 + sax: ^1.2.4 + bin: + sitemap: dist/cli.js + checksum: 87a6d21b0d4a33b8c611d3bb8543d02b813c0ebfce014213ef31849b5c1439005644f19ad1593ec89815f6101355f468c9a02c251d09aa03f6fddd17e23c4be4 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"slash@npm:^4.0.0": + version: 4.0.0 + resolution: "slash@npm:4.0.0" + checksum: da8e4af73712253acd21b7853b7e0dbba776b786e82b010a5bfc8b5051a1db38ed8aba8e1e8f400dd2c9f373be91eb1c42b66e91abb407ff42b10feece5e1d2d + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"sockjs@npm:^0.3.24": + version: 0.3.24 + resolution: "sockjs@npm:0.3.24" + dependencies: + faye-websocket: ^0.11.3 + uuid: ^8.3.2 + websocket-driver: ^0.7.4 + checksum: 355309b48d2c4e9755349daa29cea1c0d9ee23e49b983841c6bf7a20276b00d3c02343f9f33f26d2ee8b261a5a02961b52a25c8da88b2538c5b68d3071b4934c + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"sort-css-media-queries@npm:2.1.0": + version: 2.1.0 + resolution: "sort-css-media-queries@npm:2.1.0" + checksum: 25cb8f08b148a2ed83d0bc1cf20ddb888d3dee2a3c986896099a21b28b999d5cca3e46a9ef64381bb36fca0fc820471713f2e8af2729ecc6e108ab2b3b315ea9 + languageName: node + linkType: hard + +"source-map-js@npm:^1.0.2": + version: 1.0.2 + resolution: "source-map-js@npm:1.0.2" + checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + languageName: node + linkType: hard + +"source-map@npm:^0.5.0": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"space-separated-tokens@npm:^1.0.0": + version: 1.1.5 + resolution: "space-separated-tokens@npm:1.1.5" + checksum: 8ef68f1cfa8ccad316b7f8d0df0919d0f1f6d32101e8faeee34ea3a923ce8509c1ad562f57388585ee4951e92d27afa211ed0a077d3d5995b5ba9180331be708 + languageName: node + linkType: hard + +"spdy-transport@npm:^3.0.0": + version: 3.0.0 + resolution: "spdy-transport@npm:3.0.0" + dependencies: + debug: ^4.1.0 + detect-node: ^2.0.4 + hpack.js: ^2.1.6 + obuf: ^1.1.2 + readable-stream: ^3.0.6 + wbuf: ^1.7.3 + checksum: 0fcaad3b836fb1ec0bdd39fa7008b9a7a84a553f12be6b736a2512613b323207ffc924b9551cef0378f7233c85916cff1118652e03a730bdb97c0e042243d56c + languageName: node + linkType: hard + +"spdy@npm:^4.0.2": + version: 4.0.2 + resolution: "spdy@npm:4.0.2" + dependencies: + debug: ^4.1.0 + handle-thing: ^2.0.0 + http-deceiver: ^1.2.7 + select-hose: ^2.0.0 + spdy-transport: ^3.0.0 + checksum: 2c739d0ff6f56ad36d2d754d0261d5ec358457bea7cbf77b1b05b0c6464f2ce65b85f196305f50b7bd9120723eb94bae9933466f28e67e5cd8cde4e27f1d75f8 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"ssri@npm:^9.0.0": + version: 9.0.1 + resolution: "ssri@npm:9.0.1" + dependencies: + minipass: ^3.1.1 + checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb + languageName: node + linkType: hard + +"stable@npm:^0.1.8": + version: 0.1.8 + resolution: "stable@npm:0.1.8" + checksum: 2ff482bb100285d16dd75cd8f7c60ab652570e8952c0bfa91828a2b5f646a0ff533f14596ea4eabd48bb7f4aeea408dce8f8515812b975d958a4cc4fa6b9dfeb + languageName: node + linkType: hard + +"state-toggle@npm:^1.0.0": + version: 1.0.3 + resolution: "state-toggle@npm:1.0.3" + checksum: 17398af928413e8d8b866cf0c81fd1b1348bb7d65d8983126ff6ff2317a80d6ee023484fba0c54d8169f5aa544f125434a650ae3a71eddc935cae307d4692b4f + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb + languageName: node + linkType: hard + +"statuses@npm:>= 1.4.0 < 2": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c + languageName: node + linkType: hard + +"std-env@npm:^3.0.1": + version: 3.3.1 + resolution: "std-env@npm:3.3.1" + checksum: c4f59ecd2cb52041ce1785776d28a1aa56d346b6c4efcb8473e7e801eed1ac7612332dcee242d0b35948f35f745cceb6e226b5e825b59e588b262dca6be2b8aa + languageName: node + linkType: hard + +"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"stringify-object@npm:^3.3.0": + version: 3.3.0 + resolution: "stringify-object@npm:3.3.0" + dependencies: + get-own-enumerable-property-symbols: ^3.0.0 + is-obj: ^1.0.1 + is-regexp: ^1.0.0 + checksum: 6827a3f35975cfa8572e8cd3ed4f7b262def260af18655c6fde549334acdac49ddba69f3c861ea5a6e9c5a4990fe4ae870b9c0e6c31019430504c94a83b7a154 + languageName: node + linkType: hard + +"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.0.1 + resolution: "strip-ansi@npm:7.0.1" + dependencies: + ansi-regex: ^6.0.1 + checksum: 257f78fa433520e7f9897722731d78599cb3fce29ff26a20a5e12ba4957463b50a01136f37c43707f4951817a75e90820174853d6ccc240997adc5df8f966039 + languageName: node + linkType: hard + +"strip-bom-string@npm:^1.0.0": + version: 1.0.0 + resolution: "strip-bom-string@npm:1.0.0" + checksum: 5635a3656d8512a2c194d6c8d5dee7ef0dde6802f7be9413b91e201981ad4132506656d9cf14137f019fd50f0269390d91c7f6a2601b1bee039a4859cfce4934 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + +"style-to-object@npm:0.3.0, style-to-object@npm:^0.3.0": + version: 0.3.0 + resolution: "style-to-object@npm:0.3.0" + dependencies: + inline-style-parser: 0.1.1 + checksum: 4d7084015207f2a606dfc10c29cb5ba569f2fe8005551df7396110dd694d6ff650f2debafa95bd5d147dfb4ca50f57868e2a7f91bf5d11ef734fe7ccbd7abf59 + languageName: node + linkType: hard + +"stylehacks@npm:^5.1.1": + version: 5.1.1 + resolution: "stylehacks@npm:5.1.1" + dependencies: + browserslist: ^4.21.4 + postcss-selector-parser: ^6.0.4 + peerDependencies: + postcss: ^8.2.15 + checksum: 11175366ef52de65bf06cefba0ddc9db286dc3a1451fd2989e74c6ea47091a02329a4bf6ce10b1a36950056927b6bbbe47c5ab3a1f4c7032df932d010fbde5a2 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"svg-parser@npm:^2.0.4": + version: 2.0.4 + resolution: "svg-parser@npm:2.0.4" + checksum: b3de6653048212f2ae7afe4a423e04a76ec6d2d06e1bf7eacc618a7c5f7df7faa5105561c57b94579ec831fbbdbf5f190ba56a9205ff39ed13eabdf8ab086ddf + languageName: node + linkType: hard + +"svgo@npm:^2.7.0, svgo@npm:^2.8.0": + version: 2.8.0 + resolution: "svgo@npm:2.8.0" + dependencies: + "@trysound/sax": 0.2.0 + commander: ^7.2.0 + css-select: ^4.1.3 + css-tree: ^1.1.3 + csso: ^4.2.0 + picocolors: ^1.0.0 + stable: ^0.1.8 + bin: + svgo: bin/svgo + checksum: b92f71a8541468ffd0b81b8cdb36b1e242eea320bf3c1a9b2c8809945853e9d8c80c19744267eb91cabf06ae9d5fff3592d677df85a31be4ed59ff78534fa420 + languageName: node + linkType: hard + +"tapable@npm:^1.0.0": + version: 1.1.3 + resolution: "tapable@npm:1.1.3" + checksum: 53ff4e7c3900051c38cc4faab428ebfd7e6ad0841af5a7ac6d5f3045c5b50e88497bfa8295b4b3fbcadd94993c9e358868b78b9fb249a76cb8b018ac8dccafd7 + languageName: node + linkType: hard + +"tapable@npm:^2.0.0, tapable@npm:^2.1.1, tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 + languageName: node + linkType: hard + +"tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: ^1.1.1 + mkdirp-classic: ^0.5.2 + pump: ^3.0.0 + tar-stream: ^2.1.4 + checksum: f5b9a70059f5b2969e65f037b4e4da2daf0fa762d3d232ffd96e819e3f94665dbbbe62f76f084f1acb4dbdcce16c6e4dac08d12ffc6d24b8d76720f4d9cf032d + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: ^4.0.3 + end-of-stream: ^1.4.1 + fs-constants: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^3.1.1 + checksum: 699831a8b97666ef50021c767f84924cfee21c142c2eb0e79c63254e140e6408d6d55a065a2992548e72b06de39237ef2b802b99e3ece93ca3904a37622a66f3 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.1.13 + resolution: "tar@npm:6.1.13" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^4.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: 8a278bed123aa9f53549b256a36b719e317c8b96fe86a63406f3c62887f78267cea9b22dc6f7007009738509800d4a4dccc444abd71d762287c90f35b002eb1c + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^5.1.3, terser-webpack-plugin@npm:^5.3.3": + version: 5.3.6 + resolution: "terser-webpack-plugin@npm:5.3.6" + dependencies: + "@jridgewell/trace-mapping": ^0.3.14 + jest-worker: ^27.4.5 + schema-utils: ^3.1.1 + serialize-javascript: ^6.0.0 + terser: ^5.14.1 + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 8f3448d7fdb0434ce6a0c09d95c462bfd2f4a5a430233d854163337f734a7f5c07c74513d16081e06d4ca33d366d5b1a36f5444219bc41a7403afd6162107bad + languageName: node + linkType: hard + +"terser@npm:^5.10.0, terser@npm:^5.14.1": + version: 5.16.1 + resolution: "terser@npm:5.16.1" + dependencies: + "@jridgewell/source-map": ^0.3.2 + acorn: ^8.5.0 + commander: ^2.20.0 + source-map-support: ~0.5.20 + bin: + terser: bin/terser + checksum: cb524123504a2f0d9140c1e1a8628c83bba9cacc404c6aca79e2493a38dfdf21275617ba75b91006b3f1ff586e401ab31121160cd253699f334c6340ea2756f5 + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"thunky@npm:^1.0.2": + version: 1.1.0 + resolution: "thunky@npm:1.1.0" + checksum: 993096c472b6b8f30e29dc777a8d17720e4cab448375041f20c0cb802a09a7fb2217f2a3e8cdc11851faa71c957e2db309357367fc9d7af3cb7a4d00f4b66034 + languageName: node + linkType: hard + +"tiny-invariant@npm:^1.0.2": + version: 1.3.1 + resolution: "tiny-invariant@npm:1.3.1" + checksum: 872dbd1ff20a21303a2fd20ce3a15602cfa7fcf9b228bd694a52e2938224313b5385a1078cb667ed7375d1612194feaca81c4ecbe93121ca1baebe344de4f84c + languageName: node + linkType: hard + +"tiny-warning@npm:^1.0.0": + version: 1.0.3 + resolution: "tiny-warning@npm:1.0.3" + checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 + languageName: node + linkType: hard + +"to-readable-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "to-readable-stream@npm:1.0.0" + checksum: 2bd7778490b6214a2c40276065dd88949f4cf7037ce3964c76838b8cb212893aeb9cceaaf4352a4c486e3336214c350270f3263e1ce7a0c38863a715a4d9aeb5 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 + languageName: node + linkType: hard + +"totalist@npm:^1.0.0": + version: 1.1.0 + resolution: "totalist@npm:1.1.0" + checksum: dfab80c7104a1d170adc8c18782d6c04b7df08352dec452191208c66395f7ef2af7537ddfa2cf1decbdcfab1a47afbbf0dec6543ea191da98c1c6e1599f86adc + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"trim-trailing-lines@npm:^1.0.0": + version: 1.1.4 + resolution: "trim-trailing-lines@npm:1.1.4" + checksum: 5d39d21c0d4b258667012fcd784f73129e148ea1c213b1851d8904f80499fc91df6710c94c7dd49a486a32da2b9cb86020dda79f285a9a2586cfa622f80490c2 + languageName: node + linkType: hard + +"trim@npm:0.0.1": + version: 0.0.1 + resolution: "trim@npm:0.0.1" + checksum: 2b4646dff99a222e8e1526edd4e3a43bbd925af0b8e837c340455d250157e7deefaa4da49bb891ab841e5c27b1afc5e9e32d4b57afb875d2dfcabf4e319b8f7f + languageName: node + linkType: hard + +"trough@npm:^1.0.0": + version: 1.0.5 + resolution: "trough@npm:1.0.5" + checksum: d6c8564903ed00e5258bab92134b020724dbbe83148dc72e4bf6306c03ed8843efa1bcc773fa62410dd89161ecb067432dd5916501793508a9506cacbc408e25 + languageName: node + linkType: hard + +"ts-node@npm:^10.4.0": + version: 10.9.1 + resolution: "ts-node@npm:10.9.1" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 + languageName: node + linkType: hard + +"tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.4.0": + version: 2.4.1 + resolution: "tslib@npm:2.4.1" + checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: ^5.0.1 + checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"type-fest@npm:^2.5.0": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: a4ef07ece297c9fba78fc1bd6d85dff4472fe043ede98bd4710d2615d15776902b595abf62bd78339ed6278f021235fb28a96361f8be86ed754f778973a0d278 + languageName: node + linkType: hard + +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: 0.3.0 + mime-types: ~2.1.24 + checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 + languageName: node + linkType: hard + +"typedarray-to-buffer@npm:^3.1.5": + version: 3.1.5 + resolution: "typedarray-to-buffer@npm:3.1.5" + dependencies: + is-typedarray: ^1.0.0 + checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 + languageName: node + linkType: hard + +"typescript@npm:^4.5.3": + version: 4.9.3 + resolution: "typescript@npm:4.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 17b8f816050b412403e38d48eef0e893deb6be522d6dc7caf105e54a72e34daf6835c447735fd2b28b66784e72bfbf87f627abb4818a8e43d1fa8106396128dc + languageName: node + linkType: hard + +"typescript@patch:typescript@^4.5.3#~builtin": + version: 4.9.3 + resolution: "typescript@patch:typescript@npm%3A4.9.3#~builtin::version=4.9.3&hash=a1c5e5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ef65c22622d864497d0a0c5db693523329b3284c15fe632e93ad9aa059e8dc38ef3bd767d6f26b1e5ecf9446f49bd0f6c4e5714a2eeaf352805dc002479843d1 + languageName: node + linkType: hard + +"ua-parser-js@npm:^0.7.30": + version: 0.7.32 + resolution: "ua-parser-js@npm:0.7.32" + checksum: 6b6b035dd78a0ab3369f166ab6f26225d823d83630788806d634f16259297a8f4ae6fe0be4e48f4353ac10dffded3971d7745c55d1432fdfc78a893ba58ef044 + languageName: node + linkType: hard + +"unherit@npm:^1.0.4": + version: 1.1.3 + resolution: "unherit@npm:1.1.3" + dependencies: + inherits: ^2.0.0 + xtend: ^4.0.0 + checksum: fd7922f84fc0bfb7c4df6d1f5a50b5b94a0218e3cda98a54dbbd209226ddd4072d742d3df44d0e295ab08d5ccfd304a1e193dfe31a86d2a91b7cb9fdac093194 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" + checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: ^2.0.0 + unicode-property-aliases-ecmascript: ^2.0.0 + checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.1.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" + checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b + languageName: node + linkType: hard + +"unified@npm:9.2.0": + version: 9.2.0 + resolution: "unified@npm:9.2.0" + dependencies: + bail: ^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 + checksum: 0cac4ae119893fbd49d309b4db48595e4d4e9f0a2dc1dde4d0074059f9a46012a2905f37c1346715e583f30c970bc8078db8462675411d39ff5036ae18b4fb8a + languageName: node + linkType: hard + +"unified@npm:^9.2.2": + version: 9.2.2 + resolution: "unified@npm:9.2.2" + dependencies: + bail: ^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 + checksum: 7c24461be7de4145939739ce50d18227c5fbdf9b3bc5a29dabb1ce26dd3e8bd4a1c385865f6f825f3b49230953ee8b591f23beab3bb3643e3e9dc37aa8a089d5 + languageName: node + linkType: hard + +"unique-filename@npm:^2.0.0": + version: 2.0.1 + resolution: "unique-filename@npm:2.0.1" + dependencies: + unique-slug: ^3.0.0 + checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f + languageName: node + linkType: hard + +"unique-slug@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-slug@npm:3.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c + languageName: node + linkType: hard + +"unique-string@npm:^2.0.0": + version: 2.0.0 + resolution: "unique-string@npm:2.0.0" + dependencies: + crypto-random-string: ^2.0.0 + checksum: ef68f639136bcfe040cf7e3cd7a8dff076a665288122855148a6f7134092e6ed33bf83a7f3a9185e46c98dddc445a0da6ac25612afa1a7c38b8b654d6c02498e + languageName: node + linkType: hard + +"unist-builder@npm:2.0.3, unist-builder@npm:^2.0.0": + version: 2.0.3 + resolution: "unist-builder@npm:2.0.3" + checksum: e946fdf77dbfc320feaece137ce4959ae2da6614abd1623bd39512dc741a9d5f313eb2ba79f8887d941365dccddec7fef4e953827475e392bf49b45336f597f6 + languageName: node + linkType: hard + +"unist-util-generated@npm:^1.0.0": + version: 1.1.6 + resolution: "unist-util-generated@npm:1.1.6" + checksum: 86239ff88a08800d52198f2f0e15911f05bab2dad17cef95550f7c2728f15ebb0344694fcc3101d05762d88adaf86cb85aa7a3300fedabd0b6d7d00b41cdcb7f + languageName: node + linkType: hard + +"unist-util-is@npm:^4.0.0": + version: 4.1.0 + resolution: "unist-util-is@npm:4.1.0" + checksum: 726484cd2adc9be75a939aeedd48720f88294899c2e4a3143da413ae593f2b28037570730d5cf5fd910ff41f3bc1501e3d636b6814c478d71126581ef695f7ea + languageName: node + linkType: hard + +"unist-util-position@npm:^3.0.0": + version: 3.1.0 + resolution: "unist-util-position@npm:3.1.0" + checksum: 10b3952e32a1ffabbecad41c3946237f7059f5bb6436796da05531a285f50b97e4f37cfc2f7164676d041063f40fe1ad92fbb8ca38d3ae8747328ebe738d738f + languageName: node + linkType: hard + +"unist-util-remove-position@npm:^2.0.0": + version: 2.0.1 + resolution: "unist-util-remove-position@npm:2.0.1" + dependencies: + unist-util-visit: ^2.0.0 + checksum: 4149294969f1a78a367b5d03eb0a138aa8320a39e1b15686647a2bec5945af3df27f2936a1e9752ecbb4a82dc23bd86f7e5a0ee048e5eeaedc2deb9237872795 + languageName: node + linkType: hard + +"unist-util-remove@npm:^2.0.0": + version: 2.1.0 + resolution: "unist-util-remove@npm:2.1.0" + dependencies: + unist-util-is: ^4.0.0 + checksum: 99e54f3ea0523f8cf957579a6e84e5b58427bffab929cc7f6aa5119581f929db683dd4691ea5483df0c272f486dda9dbd04f4ab74dca6cae1f3ebe8e4261a4d9 + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^2.0.0": + version: 2.0.3 + resolution: "unist-util-stringify-position@npm:2.0.3" + dependencies: + "@types/unist": ^2.0.2 + checksum: f755cadc959f9074fe999578a1a242761296705a7fe87f333a37c00044de74ab4b184b3812989a57d4cd12211f0b14ad397b327c3a594c7af84361b1c25a7f09 + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^3.0.0": + version: 3.1.1 + resolution: "unist-util-visit-parents@npm:3.1.1" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^4.0.0 + checksum: 1170e397dff88fab01e76d5154981666eb0291019d2462cff7a2961a3e76d3533b42eaa16b5b7e2d41ad42a5ea7d112301458283d255993e660511387bf67bc3 + languageName: node + linkType: hard + +"unist-util-visit@npm:2.0.3, unist-util-visit@npm:^2.0.0, unist-util-visit@npm:^2.0.3": + version: 2.0.3 + resolution: "unist-util-visit@npm:2.0.3" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^4.0.0 + unist-util-visit-parents: ^3.0.0 + checksum: 1fe19d500e212128f96d8c3cfa3312846e586b797748a1fd195fe6479f06bc90a6f6904deb08eefc00dd58e83a1c8a32fb8677252d2273ad7a5e624525b69b8f + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.0 + resolution: "universalify@npm:2.0.0" + checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + languageName: node + linkType: hard + +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.9": + version: 1.0.10 + resolution: "update-browserslist-db@npm:1.0.10" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + browserslist-lint: cli.js + checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 + languageName: node + linkType: hard + +"update-notifier@npm:^5.1.0": + version: 5.1.0 + resolution: "update-notifier@npm:5.1.0" + 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 + 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 + checksum: 461e5e5b002419296d3868ee2abe0f9ab3e1846d9db642936d0c46f838872ec56069eddfe662c45ce1af0a8d6d5026353728de2e0a95ab2e3546a22ea077caf1 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"url-loader@npm:^4.1.1": + version: 4.1.1 + resolution: "url-loader@npm:4.1.1" + dependencies: + loader-utils: ^2.0.0 + mime-types: ^2.1.27 + schema-utils: ^3.0.0 + peerDependencies: + file-loader: "*" + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + file-loader: + optional: true + checksum: c1122a992c6cff70a7e56dfc2b7474534d48eb40b2cc75467cde0c6972e7597faf8e43acb4f45f93c2473645dfd803bcbc20960b57544dd1e4c96e77f72ba6fd + languageName: node + linkType: hard + +"url-parse-lax@npm:^3.0.0": + version: 3.0.0 + resolution: "url-parse-lax@npm:3.0.0" + dependencies: + prepend-http: ^2.0.0 + checksum: 1040e357750451173132228036aff1fd04abbd43eac1fb3e4fca7495a078bcb8d33cb765fe71ad7e473d9c94d98fd67adca63bd2716c815a2da066198dd37217 + languageName: node + linkType: hard + +"use-composed-ref@npm:^1.3.0": + version: 1.3.0 + resolution: "use-composed-ref@npm:1.3.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: f771cbadfdc91e03b7ab9eb32d0fc0cc647755711801bf507e891ad38c4bbc5f02b2509acadf9c965ec9c5f2f642fd33bdfdfb17b0873c4ad0a9b1f5e5e724bf + languageName: node + linkType: hard + +"use-isomorphic-layout-effect@npm:^1.1.1": + version: 1.1.2 + resolution: "use-isomorphic-layout-effect@npm:1.1.2" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: a6532f7fc9ae222c3725ff0308aaf1f1ddbd3c00d685ef9eee6714fd0684de5cb9741b432fbf51e61a784e2955424864f7ea9f99734a02f237b17ad3e18ea5cb + languageName: node + linkType: hard + +"use-latest@npm:^1.2.1": + version: 1.2.1 + resolution: "use-latest@npm:1.2.1" + dependencies: + use-isomorphic-layout-effect: ^1.1.1 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: ed3f2ddddf6f21825e2ede4c2e0f0db8dcce5129802b69d1f0575fc1b42380436e8c76a6cd885d4e9aa8e292e60fb8b959c955f33c6a9123b83814a1a1875367 + languageName: node + linkType: hard + +"use-sync-external-store@npm:^1.2.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"utila@npm:~0.4": + version: 0.4.0 + resolution: "utila@npm:0.4.0" + checksum: 97ffd3bd2bb80c773429d3fb8396469115cd190dded1e733f190d8b602bd0a1bcd6216b7ce3c4395ee3c79e3c879c19d268dbaae3093564cb169ad1212d436f4 + languageName: node + linkType: hard + +"utility-types@npm:^3.10.0": + version: 3.10.0 + resolution: "utility-types@npm:3.10.0" + checksum: 8f274415c6196ab62883b8bd98c9d2f8829b58016e4269aaa1ebd84184ac5dda7dc2ca45800c0d5e0e0650966ba063bf9a412aaeaea6850ca4440a391283d5c8 + languageName: node + linkType: hard + +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 + languageName: node + linkType: hard + +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 + languageName: node + linkType: hard + +"value-equal@npm:^1.0.1": + version: 1.0.1 + resolution: "value-equal@npm:1.0.1" + checksum: bb7ae1facc76b5cf8071aeb6c13d284d023fdb370478d10a5d64508e0e6e53bb459c4bbe34258df29d82e6f561f874f0105eba38de0e61fe9edd0bdce07a77a2 + languageName: node + linkType: hard + +"vary@npm:~1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b + languageName: node + linkType: hard + +"vfile-location@npm:^3.0.0, vfile-location@npm:^3.2.0": + version: 3.2.0 + resolution: "vfile-location@npm:3.2.0" + checksum: 9bb3df6d0be31b5dd2d8da0170c27b7045c64493a8ba7b6ff7af8596c524fc8896924b8dd85ae12d201eead2709217a0fbc44927b7264f4bbf0aa8027a78be9c + languageName: node + linkType: hard + +"vfile-message@npm:^2.0.0": + version: 2.0.4 + resolution: "vfile-message@npm:2.0.4" + dependencies: + "@types/unist": ^2.0.0 + unist-util-stringify-position: ^2.0.0 + checksum: 1bade499790f46ca5aba04bdce07a1e37c2636a8872e05cf32c26becc912826710b7eb063d30c5754fdfaeedc8a7658e78df10b3bc535c844890ec8a184f5643 + languageName: node + linkType: hard + +"vfile@npm:^4.0.0": + version: 4.2.1 + resolution: "vfile@npm:4.2.1" + dependencies: + "@types/unist": ^2.0.0 + is-buffer: ^2.0.0 + unist-util-stringify-position: ^2.0.0 + vfile-message: ^2.0.0 + checksum: ee5726e10d170472cde778fc22e0f7499caa096eb85babea5d0ce0941455b721037ee1c9e6ae506ca2803250acd313d0f464328ead0b55cfe7cb6315f1b462d6 + languageName: node + linkType: hard + +"wait-on@npm:^6.0.1": + version: 6.0.1 + resolution: "wait-on@npm:6.0.1" + dependencies: + axios: ^0.25.0 + joi: ^17.6.0 + lodash: ^4.17.21 + minimist: ^1.2.5 + rxjs: ^7.5.4 + bin: + wait-on: bin/wait-on + checksum: e4d62aa4145d99fe34747ccf7506d4b4d6e60dd677c0eb18a51e316d38116ace2d194e4b22a9eb7b767b0282f39878ddcc4ae9440dcb0c005c9150668747cf5b + languageName: node + linkType: hard + +"warning@npm:^4.0.2": + version: 4.0.3 + resolution: "warning@npm:4.0.3" + dependencies: + loose-envify: ^1.0.0 + checksum: 4f2cb6a9575e4faf71ddad9ad1ae7a00d0a75d24521c193fa464f30e6b04027bd97aa5d9546b0e13d3a150ab402eda216d59c1d0f2d6ca60124d96cd40dfa35c + languageName: node + linkType: hard + +"watchpack@npm:^2.4.0": + version: 2.4.0 + resolution: "watchpack@npm:2.4.0" + dependencies: + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.1.2 + checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 + languageName: node + linkType: hard + +"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": + version: 1.7.3 + resolution: "wbuf@npm:1.7.3" + dependencies: + minimalistic-assert: ^1.0.0 + checksum: 2abc306c96930b757972a1c4650eb6b25b5d99f24088714957f88629e137db569368c5de0e57986c89ea70db2f1df9bba11a87cb6d0c8694b6f53a0159fab3bf + languageName: node + linkType: hard + +"web-namespaces@npm:^1.0.0": + version: 1.1.4 + resolution: "web-namespaces@npm:1.1.4" + checksum: 5149842ccbfbc56fe4f8758957b3f8c8616a281874a5bb84aa1b305e4436a9bad853d21c629a7b8f174902449e1489c7a6c724fccf60965077c5636bd8aed42b + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"webpack-bundle-analyzer@npm:^4.5.0": + version: 4.7.0 + resolution: "webpack-bundle-analyzer@npm:4.7.0" + dependencies: + acorn: ^8.0.4 + acorn-walk: ^8.0.0 + chalk: ^4.1.0 + commander: ^7.2.0 + gzip-size: ^6.0.0 + lodash: ^4.17.20 + opener: ^1.5.2 + sirv: ^1.0.7 + ws: ^7.3.1 + bin: + webpack-bundle-analyzer: lib/bin/analyzer.js + checksum: 4ce3b379c61ce16b2219756843407cc99f2b82cd191f653043f1b705a3e32b3af03834af0dfded98ab852313a892a148bed1a8effaacd6440f028c19f41581f3 + languageName: node + linkType: hard + +"webpack-dev-middleware@npm:^5.3.1": + version: 5.3.3 + resolution: "webpack-dev-middleware@npm:5.3.3" + dependencies: + colorette: ^2.0.10 + memfs: ^3.4.3 + mime-types: ^2.1.31 + range-parser: ^1.2.1 + schema-utils: ^4.0.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: dd332cc6da61222c43d25e5a2155e23147b777ff32fdf1f1a0a8777020c072fbcef7756360ce2a13939c3f534c06b4992a4d659318c4a7fe2c0530b52a8a6621 + languageName: node + linkType: hard + +"webpack-dev-server@npm:^4.9.3": + version: 4.11.1 + resolution: "webpack-dev-server@npm:4.11.1" + dependencies: + "@types/bonjour": ^3.5.9 + "@types/connect-history-api-fallback": ^1.3.5 + "@types/express": ^4.17.13 + "@types/serve-index": ^1.9.1 + "@types/serve-static": ^1.13.10 + "@types/sockjs": ^0.3.33 + "@types/ws": ^8.5.1 + ansi-html-community: ^0.0.8 + bonjour-service: ^1.0.11 + chokidar: ^3.5.3 + colorette: ^2.0.10 + compression: ^1.7.4 + connect-history-api-fallback: ^2.0.0 + default-gateway: ^6.0.3 + express: ^4.17.3 + graceful-fs: ^4.2.6 + html-entities: ^2.3.2 + http-proxy-middleware: ^2.0.3 + ipaddr.js: ^2.0.1 + open: ^8.0.9 + p-retry: ^4.5.0 + rimraf: ^3.0.2 + schema-utils: ^4.0.0 + selfsigned: ^2.1.1 + serve-index: ^1.9.1 + sockjs: ^0.3.24 + spdy: ^4.0.2 + webpack-dev-middleware: ^5.3.1 + ws: ^8.4.2 + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack-dev-server: bin/webpack-dev-server.js + checksum: b7601a39ee0f413988259e29a36835b0a68522cfaa161de5b7ec99b3399acdd99d44189add4aaf4a5191258bb130f9cf3e68919324a1955c7557f5fe6ab0d96c + languageName: node + linkType: hard + +"webpack-merge@npm:^5.8.0": + version: 5.8.0 + resolution: "webpack-merge@npm:5.8.0" + dependencies: + clone-deep: ^4.0.1 + wildcard: ^2.0.0 + checksum: 88786ab91013f1bd2a683834ff381be81c245a4b0f63304a5103e90f6653f44dab496a0768287f8531761f8ad957d1f9f3ccb2cb55df0de1bd9ee343e079da26 + languageName: node + linkType: hard + +"webpack-sources@npm:^3.2.2, webpack-sources@npm:^3.2.3": + version: 3.2.3 + resolution: "webpack-sources@npm:3.2.3" + checksum: 989e401b9fe3536529e2a99dac8c1bdc50e3a0a2c8669cbafad31271eadd994bc9405f88a3039cd2e29db5e6d9d0926ceb7a1a4e7409ece021fe79c37d9c4607 + languageName: node + linkType: hard + +"webpack@npm:^5.73.0": + version: 5.76.1 + resolution: "webpack@npm:5.76.1" + dependencies: + "@types/eslint-scope": ^3.7.3 + "@types/estree": ^0.0.51 + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/wasm-edit": 1.11.1 + "@webassemblyjs/wasm-parser": 1.11.1 + acorn: ^8.7.1 + acorn-import-assertions: ^1.7.6 + browserslist: ^4.14.5 + chrome-trace-event: ^1.0.2 + enhanced-resolve: ^5.10.0 + es-module-lexer: ^0.9.0 + eslint-scope: 5.1.1 + events: ^3.2.0 + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.2.9 + json-parse-even-better-errors: ^2.3.1 + loader-runner: ^4.2.0 + mime-types: ^2.1.27 + neo-async: ^2.6.2 + schema-utils: ^3.1.0 + tapable: ^2.1.1 + terser-webpack-plugin: ^5.1.3 + watchpack: ^2.4.0 + webpack-sources: ^3.2.3 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: b01fe0bc2dbca0e10d290ddb0bf81e807a031de48028176e2b21afd696b4d3f25ab9accdad888ef4a1f7c7f4d41f13d5bf2395b7653fdf3e5e3dafa54e56dab2 + languageName: node + linkType: hard + +"webpackbar@npm:^5.0.2": + version: 5.0.2 + resolution: "webpackbar@npm:5.0.2" + dependencies: + chalk: ^4.1.0 + consola: ^2.15.3 + pretty-time: ^1.1.0 + std-env: ^3.0.1 + peerDependencies: + webpack: 3 || 4 || 5 + checksum: 214a734b1d4d391eb8271ed1b11085f0efe6831e93f641229b292abfd6fea871422dce121612511c17ae8047522be6d65c1a2666cabb396c79549816a3612338 + languageName: node + linkType: hard + +"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": + version: 0.7.4 + resolution: "websocket-driver@npm:0.7.4" + dependencies: + http-parser-js: ">=0.5.1" + safe-buffer: ">=5.1.0" + websocket-extensions: ">=0.1.1" + checksum: fffe5a33fe8eceafd21d2a065661d09e38b93877eae1de6ab5d7d2734c6ed243973beae10ae48c6613cfd675f200e5a058d1e3531bc9e6c5d4f1396ff1f0bfb9 + languageName: node + linkType: hard + +"websocket-extensions@npm:>=0.1.1": + version: 0.1.4 + resolution: "websocket-extensions@npm:0.1.4" + checksum: 5976835e68a86afcd64c7a9762ed85f2f27d48c488c707e67ba85e717b90fa066b98ab33c744d64255c9622d349eedecf728e65a5f921da71b58d0e9591b9038 + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"which@npm:^1.3.1": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: ^2.0.0 + bin: + which: ./bin/which + checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"widest-line@npm:^3.1.0": + version: 3.1.0 + resolution: "widest-line@npm:3.1.0" + dependencies: + string-width: ^4.0.0 + checksum: 03db6c9d0af9329c37d74378ff1d91972b12553c7d72a6f4e8525fe61563fa7adb0b9d6e8d546b7e059688712ea874edd5ded475999abdeedf708de9849310e0 + languageName: node + linkType: hard + +"widest-line@npm:^4.0.1": + version: 4.0.1 + resolution: "widest-line@npm:4.0.1" + dependencies: + string-width: ^5.0.1 + checksum: 64c48cf27171221be5f86fc54b94dd29879165bdff1a7aa92dde723d9a8c99fb108312768a5d62c8c2b80b701fa27bbd36a1ddc58367585cd45c0db7920a0cba + languageName: node + linkType: hard + +"wildcard@npm:^2.0.0": + version: 2.0.0 + resolution: "wildcard@npm:2.0.0" + checksum: 1f4fe4c03dfc492777c60f795bbba597ac78794f1b650d68f398fbee9adb765367c516ebd4220889b6a81e9626e7228bbe0d66237abb311573c2ee1f4902a5ad + languageName: node + linkType: hard + +"wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.0.1": + version: 8.0.1 + resolution: "wrap-ansi@npm:8.0.1" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 5d7816e64f75544e466d58a736cb96ca47abad4ad57f48765b9735ba5601221013a37f436662340ca159208b011121e4e030de5a17180c76202e35157195a71e + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:^3.0.0": + version: 3.0.3 + resolution: "write-file-atomic@npm:3.0.3" + dependencies: + imurmurhash: ^0.1.4 + is-typedarray: ^1.0.0 + signal-exit: ^3.0.2 + typedarray-to-buffer: ^3.1.5 + checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280 + languageName: node + linkType: hard + +"ws@npm:^7.3.1": + version: 7.5.9 + resolution: "ws@npm:7.5.9" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 + languageName: node + linkType: hard + +"ws@npm:^8.4.2": + version: 8.11.0 + resolution: "ws@npm:8.11.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 + languageName: node + linkType: hard + +"xdg-basedir@npm:^4.0.0": + version: 4.0.0 + resolution: "xdg-basedir@npm:4.0.0" + checksum: 0073d5b59a37224ed3a5ac0dd2ec1d36f09c49f0afd769008a6e9cd3cd666bd6317bd1c7ce2eab47e1de285a286bad11a9b038196413cd753b79770361855f3c + languageName: node + linkType: hard + +"xml-js@npm:^1.6.11": + version: 1.6.11 + resolution: "xml-js@npm:1.6.11" + dependencies: + sax: ^1.2.4 + bin: + xml-js: ./bin/cli.js + checksum: 24a55479919413687105fc2d8ab05e613ebedb1c1bc12258a108e07cff5ef793779297db854800a4edf0281303ebd1f177bc4a588442f5344e62b3dddda26c2b + languageName: node + linkType: hard + +"xtend@npm:^4.0.0, xtend@npm:^4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard + +"zwitch@npm:^1.0.0": + version: 1.0.5 + resolution: "zwitch@npm:1.0.5" + checksum: 28a1bebacab3bc60150b6b0a2ba1db2ad033f068e81f05e4892ec0ea13ae63f5d140a1d692062ac0657840c8da076f35b94433b5f1c329d7803b247de80f064a + languageName: node + linkType: hard