From 0a33bb5a2930a054ed2f3bfc595fa5ce318394a6 Mon Sep 17 00:00:00 2001
From: Glory Agatevure
Date: Tue, 9 May 2023 14:47:59 +0100
Subject: [PATCH 1/2] fetch toucan tc02tokens and redeem selected token
---
toucan-dapp/.gitattributes | 2 +
toucan-dapp/.gitignore | 42 +
toucan-dapp/LICENSE | 21 +
toucan-dapp/README.md | 197 +
toucan-dapp/netlify.toml | 12 +
toucan-dapp/package-lock.json | 1088 +++
toucan-dapp/package.json | 40 +
toucan-dapp/packages/hardhat/.envexample | 3 +
toucan-dapp/packages/hardhat/.gitignore | 13 +
toucan-dapp/packages/hardhat/.npmrc | 1 +
toucan-dapp/packages/hardhat/README.md | 124 +
.../packages/hardhat/account_keys.json | 1 +
.../packages/hardhat/contracts/Greeter.sol | 26 +
.../packages/hardhat/contracts/Oracle.sol | 20 +
.../hardhat/contracts/SimpleERC115.sol | 85 +
.../hardhat/contracts/SimpleERC777.sol | 21 +
.../hardhat/contracts/SimpleProxyContract.sol | 78 +
.../hardhat/contracts/SimpleVestingWallet.sol | 27 +
.../packages/hardhat/contracts/Storage.sol | 29 +
.../hardhat/contracts/SupportToken.sol | 44 +
.../packages/hardhat/deploy/00-deploy.js | 68 +
.../packages/hardhat/hardhat.config.js | 98 +
toucan-dapp/packages/hardhat/package.json | 52 +
.../packages/hardhat/scripts/sample-script.js | 32 +
toucan-dapp/packages/hardhat/scripts/watch.js | 18 +
.../packages/hardhat/test/greeter-test.js | 19 +
.../packages/hardhat/test/oracle-test.js | 25 +
.../packages/hardhat/test/storage-test.js | 19 +
toucan-dapp/packages/hardhat/yarn.lock | 7981 +++++++++++++++++
toucan-dapp/packages/react-app/.eslintrc.json | 3 +
toucan-dapp/packages/react-app/.gitignore | 36 +
toucan-dapp/packages/react-app/README.md | 39 +
.../packages/react-app/apollo-client.js | 9 +
.../react-app/components/CarbonOffset.tsx | 122 +
.../packages/react-app/components/Footer.tsx | 49 +
.../packages/react-app/components/Header.tsx | 60 +
.../packages/react-app/components/Layout.tsx | 22 +
.../react-app/components/RedeemModal.tsx | 86 +
toucan-dapp/packages/react-app/next.config.js | 24 +
toucan-dapp/packages/react-app/package.json | 41 +
toucan-dapp/packages/react-app/pages/_app.tsx | 76 +
.../packages/react-app/pages/api/hello.ts | 13 +
.../packages/react-app/pages/index.tsx | 11 +
.../packages/react-app/postcss.config.js | 6 +
.../packages/react-app/public/favicon.ico | Bin 0 -> 44688 bytes
.../packages/react-app/public/logo.svg | 17 +
.../packages/react-app/rainbowkit-celo.d.ts | 27 +
.../packages/react-app/styles/globals.css | 3 +
.../packages/react-app/tailwind.config.js | 35 +
toucan-dapp/packages/react-app/tsconfig.json | 25 +
toucan-dapp/packages/react-app/yarn.lock | 5227 +++++++++++
toucan-dapp/yarn.lock | 694 ++
52 files changed, 16811 insertions(+)
create mode 100644 toucan-dapp/.gitattributes
create mode 100644 toucan-dapp/.gitignore
create mode 100644 toucan-dapp/LICENSE
create mode 100644 toucan-dapp/README.md
create mode 100644 toucan-dapp/netlify.toml
create mode 100644 toucan-dapp/package-lock.json
create mode 100644 toucan-dapp/package.json
create mode 100644 toucan-dapp/packages/hardhat/.envexample
create mode 100644 toucan-dapp/packages/hardhat/.gitignore
create mode 100644 toucan-dapp/packages/hardhat/.npmrc
create mode 100644 toucan-dapp/packages/hardhat/README.md
create mode 100644 toucan-dapp/packages/hardhat/account_keys.json
create mode 100644 toucan-dapp/packages/hardhat/contracts/Greeter.sol
create mode 100644 toucan-dapp/packages/hardhat/contracts/Oracle.sol
create mode 100644 toucan-dapp/packages/hardhat/contracts/SimpleERC115.sol
create mode 100644 toucan-dapp/packages/hardhat/contracts/SimpleERC777.sol
create mode 100644 toucan-dapp/packages/hardhat/contracts/SimpleProxyContract.sol
create mode 100644 toucan-dapp/packages/hardhat/contracts/SimpleVestingWallet.sol
create mode 100644 toucan-dapp/packages/hardhat/contracts/Storage.sol
create mode 100644 toucan-dapp/packages/hardhat/contracts/SupportToken.sol
create mode 100644 toucan-dapp/packages/hardhat/deploy/00-deploy.js
create mode 100644 toucan-dapp/packages/hardhat/hardhat.config.js
create mode 100644 toucan-dapp/packages/hardhat/package.json
create mode 100644 toucan-dapp/packages/hardhat/scripts/sample-script.js
create mode 100644 toucan-dapp/packages/hardhat/scripts/watch.js
create mode 100644 toucan-dapp/packages/hardhat/test/greeter-test.js
create mode 100644 toucan-dapp/packages/hardhat/test/oracle-test.js
create mode 100644 toucan-dapp/packages/hardhat/test/storage-test.js
create mode 100644 toucan-dapp/packages/hardhat/yarn.lock
create mode 100644 toucan-dapp/packages/react-app/.eslintrc.json
create mode 100644 toucan-dapp/packages/react-app/.gitignore
create mode 100644 toucan-dapp/packages/react-app/README.md
create mode 100644 toucan-dapp/packages/react-app/apollo-client.js
create mode 100644 toucan-dapp/packages/react-app/components/CarbonOffset.tsx
create mode 100644 toucan-dapp/packages/react-app/components/Footer.tsx
create mode 100644 toucan-dapp/packages/react-app/components/Header.tsx
create mode 100644 toucan-dapp/packages/react-app/components/Layout.tsx
create mode 100644 toucan-dapp/packages/react-app/components/RedeemModal.tsx
create mode 100644 toucan-dapp/packages/react-app/next.config.js
create mode 100644 toucan-dapp/packages/react-app/package.json
create mode 100644 toucan-dapp/packages/react-app/pages/_app.tsx
create mode 100644 toucan-dapp/packages/react-app/pages/api/hello.ts
create mode 100644 toucan-dapp/packages/react-app/pages/index.tsx
create mode 100644 toucan-dapp/packages/react-app/postcss.config.js
create mode 100644 toucan-dapp/packages/react-app/public/favicon.ico
create mode 100755 toucan-dapp/packages/react-app/public/logo.svg
create mode 100644 toucan-dapp/packages/react-app/rainbowkit-celo.d.ts
create mode 100644 toucan-dapp/packages/react-app/styles/globals.css
create mode 100644 toucan-dapp/packages/react-app/tailwind.config.js
create mode 100644 toucan-dapp/packages/react-app/tsconfig.json
create mode 100644 toucan-dapp/packages/react-app/yarn.lock
create mode 100644 toucan-dapp/yarn.lock
diff --git a/toucan-dapp/.gitattributes b/toucan-dapp/.gitattributes
new file mode 100644
index 00000000..dfe07704
--- /dev/null
+++ b/toucan-dapp/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/toucan-dapp/.gitignore b/toucan-dapp/.gitignore
new file mode 100644
index 00000000..59e04893
--- /dev/null
+++ b/toucan-dapp/.gitignore
@@ -0,0 +1,42 @@
+node_modules
+.env
+packages/*/.env
+packages/*/.env.*
+
+# IntelliJ project files
+*.iml
+*.ipr
+*.iws
+.idea
+
+*.gitkeep
+
+# eclipse project file
+.settings/
+.classpath
+.project
+
+# NetBeans specific
+nbproject/private/
+build/
+nbbuild/
+dist/
+nbdist/
+nbactions.xml
+nb-configuration.xml
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# OS
+.DS_Store
+
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+
+PROPOSAL.md
diff --git a/toucan-dapp/LICENSE b/toucan-dapp/LICENSE
new file mode 100644
index 00000000..335ebbe7
--- /dev/null
+++ b/toucan-dapp/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 DevRel Team & Community
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/toucan-dapp/README.md b/toucan-dapp/README.md
new file mode 100644
index 00000000..be87dc34
--- /dev/null
+++ b/toucan-dapp/README.md
@@ -0,0 +1,197 @@
+
+
+
+
Celo Composer
+ Build, deploy, and iterate quickly on decentralized applications using Celo.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+ -
+ About The Project
+
+
+ -
+
+
+ - Usage
+ - Roadmap
+ - Contributing
+ - License
+ - Contact
+ - Acknowledgments
+
+
+
+
+
+## About The Project
+
+Celo Composer allows you to quickly build, deploy, and iterate on decentralized applications using Celo. It provides a number of frameworks, examples, and Celo specific functionality to help you get started with your next dApp.
+
+(back to top)
+
+## Built With
+
+Celo Composer is built on Celo to make it simple to build dApps using a variety of front-end frameworks, and libraries.
+
+- [Celo](https://celo.org/)
+- [Solidity](https://docs.soliditylang.org/en/v0.8.19/)
+- [Next.js](https://nextjs.org/)
+- [React.js](https://reactjs.org/)
+- [Material UI](https://mui.com/)
+- [React Native](https://reactnative.dev/)
+- [Flutter](https://docs.flutter.dev/)
+- [React-celo](https://github.com/celo-org/react-celo/)
+- [Rainbowkit-celo](https://github.com/celo-org/rainbowkit-celo)
+
+(back to top)
+
+
+
+## Prerequisites
+
+- Node
+- Git (v2.38 or higher)
+
+## How to use Celo Composer
+
+The easiest way to start with Celo Composer is using `@celo/celo-composer`. This CLI tool lets you quickly start building dApps on Celo for multiple frameworks, including React (with either react-celo or rainbowkit-celo), React Native (w/o Expo), Flutter, and Angular. To get started, just run the following command, and follow the steps:
+
+```bash
+npx @celo/celo-composer@latest create
+```
+
+### Front-end framework
+
+
+
+### Web3 library (for react-app)
+
+
+
+### Smart contract framework
+
+
+
+### Subgraph
+
+
+
+### Name your dApp
+
+
+
+**_🔥Voila, you have a dApp ready to go. Voila, you have a dApp ready to go. Start building your dApp on Celo._**
+
+### Getting started
+
+Once your custom dApp has been created, just install dependencies, either with `yarn` or `npm i`, and run the respective script from the `package.json` file.
+## Supported Frameworks
+
+### React
+
+- Support for Website and Progressive Web Application.
+- Works with all major crypto wallets.
+
+Check [package readme](https://github.com/celo-org/celo-composer/blob/main/packages/react-app/README.md) to learn more about.
+
+### React Native
+
+- Out of the box config, just focus on buidl.
+- Support for Android and IOS.
+- Works with and without [Expo](https://expo.dev/).
+- Working example app included.
+
+Check [package readme](https://github.com/celo-org/celo-composer/blob/main/packages/react-native-app/README.md) to learn more about.
+
+### Flutter
+
+- One command to get started - Type `flutter run` to start development in your mobile phone.
+- Works with all major mobile crypto wallets.
+- Support for Android, IOS (Web, Windows, and Linux coming soon).
+- Working example app included.
+
+Check [package readme](https://github.com/celo-org/celo-composer/blob/main/packages/flutter-app/README.md) to learn more about.
+
+### Angular
+
+- Support for Website and Progressive Web Application.
+- Works with all major crypto wallets.
+
+Check [package readme](https://github.com/celo-org/celo-composer/blob/main/packages/angular-app/README.md) to learn more about.
+
+
+
+## 🔠Learning Solidity
+
+📕 Read the docs:
+
+- [Primitive Data Types](https://solidity-by-example.org/primitives/)
+- [Mappings](https://solidity-by-example.org/mapping/)
+- [Structs](https://solidity-by-example.org/structs/)
+- [Modifiers](https://solidity-by-example.org/function-modifier/)
+- [Events](https://solidity-by-example.org/events/)
+- [Inheritance](https://solidity-by-example.org/inheritance/)
+- [Payable](https://solidity-by-example.org/payable/)
+- [Fallback](https://solidity-by-example.org/fallback/)
+
+📧 Learn the [Solidity globals and units](https://solidity.readthedocs.io/en/v0.8.19/units-and-global-variables.html)
+
+## Support
+
+Join the Celo Discord server at . Reach out on the dedicated repo channel [here](https://discord.com/channels/600834479145353243/941003424298856448).
+
+
+
+## Roadmap
+
+See the [open issues](https://github.com/celo-org/celo-composer/issues) for a full list of proposed features (and known issues).
+
+(back to top)
+
+
+
+## Contributing
+
+We welcome contributions from the community.
+
+(back to top)
+
+## License
+
+Distributed under the MIT License. See `LICENSE.txt` for more information.
+
+
+## Contact
+
+- [@CeloDevs](https://twitter.com/CeloDevs)
+- [Discord](https://discord.com/invite/celo)
+
+(back to top)
diff --git a/toucan-dapp/netlify.toml b/toucan-dapp/netlify.toml
new file mode 100644
index 00000000..d14bf083
--- /dev/null
+++ b/toucan-dapp/netlify.toml
@@ -0,0 +1,12 @@
+# Settings in the [build] context are global and are applied to
+# all contexts unless otherwise overridden by more specific contexts.
+[build]
+ # Directory to change to before starting a build.
+ # This is where we will look for package.json/.nvmrc/etc.
+ # If not set, defaults to the root directory.
+ base = "/"
+ publish = "packages/react-app/.next"
+ command = "yarn build-ui"
+
+[[plugins]]
+package = "@netlify/plugin-nextjs"
\ No newline at end of file
diff --git a/toucan-dapp/package-lock.json b/toucan-dapp/package-lock.json
new file mode 100644
index 00000000..d67f2af9
--- /dev/null
+++ b/toucan-dapp/package-lock.json
@@ -0,0 +1,1088 @@
+{
+ "name": "@celo/celo-composer",
+ "version": "1.0.8",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "@celo/celo-composer",
+ "version": "1.0.8",
+ "license": "MIT",
+ "workspaces": [
+ "bin/*"
+ ],
+ "dependencies": {
+ "@apollo/client": "^3.7.14",
+ "chalk": "4.1.2",
+ "commander": "^9.4.0",
+ "fs-extra": "^10.1.0",
+ "inquirer": "^8.2.4",
+ "node-emoji": "^1.11.0",
+ "ora": "5.4.1",
+ "shelljs": "^0.8.5",
+ "yargs": "17.5.1"
+ },
+ "bin": {
+ "celo-composer": "bin/index.js"
+ }
+ },
+ "node_modules/@apollo/client": {
+ "version": "3.7.14",
+ "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.7.14.tgz",
+ "integrity": "sha512-BRvdkwq5PAXBkjXjboO12uksDm3nrZEqDi4xF97Fk3Mnaa0zDOEfJa7hoKTY9b9KA1EkeWv9BL3i7hSd4SfGBg==",
+ "dependencies": {
+ "@graphql-typed-document-node/core": "^3.1.1",
+ "@wry/context": "^0.7.0",
+ "@wry/equality": "^0.5.0",
+ "@wry/trie": "^0.3.0",
+ "graphql-tag": "^2.12.6",
+ "hoist-non-react-statics": "^3.3.2",
+ "optimism": "^0.16.2",
+ "prop-types": "^15.7.2",
+ "response-iterator": "^0.2.6",
+ "symbol-observable": "^4.0.0",
+ "ts-invariant": "^0.10.3",
+ "tslib": "^2.3.0",
+ "zen-observable-ts": "^1.2.5"
+ },
+ "peerDependencies": {
+ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0",
+ "graphql-ws": "^5.5.5",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "subscriptions-transport-ws": "^0.9.0 || ^0.11.0"
+ },
+ "peerDependenciesMeta": {
+ "graphql-ws": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ },
+ "subscriptions-transport-ws": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@graphql-typed-document-node/core": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz",
+ "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==",
+ "peerDependencies": {
+ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@wry/context": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.2.tgz",
+ "integrity": "sha512-WBGObg2bxt9UYGX4Dh3heUpHeULiFIP/yLpKrcebPfwaLuwCSj6rS7kpQegQ/K7jbkTQ1nLGZnfyAvY1T2LG4g==",
+ "dependencies": {
+ "tslib": "^2.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@wry/equality": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.5.tgz",
+ "integrity": "sha512-tI95+tJlL2LoOY27EHy0V0zKRVgbPp6vk9p6ZqWZOCSVslEhYEGeI+gaskc2rnjQxfszsXhtgYZTQ1xAUrMkOg==",
+ "dependencies": {
+ "tslib": "^2.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@wry/trie": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.3.2.tgz",
+ "integrity": "sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ==",
+ "dependencies": {
+ "tslib": "^2.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
+ },
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-spinners": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz",
+ "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
+ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/commander": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+ "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+ "engines": {
+ "node": "^12.20.0 || >=14"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/defaults": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+ "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
+ "dependencies": {
+ "clone": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dependencies": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "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"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "node_modules/graphql": {
+ "version": "16.6.0",
+ "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz",
+ "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==",
+ "peer": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
+ }
+ },
+ "node_modules/graphql-tag": {
+ "version": "2.12.6",
+ "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz",
+ "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/inquirer": {
+ "version": "8.2.5",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz",
+ "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==",
+ "dependencies": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.1",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.21",
+ "mute-stream": "0.0.8",
+ "ora": "^5.4.1",
+ "run-async": "^2.4.0",
+ "rxjs": "^7.5.5",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
+ "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-interactive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
+ },
+ "node_modules/node-emoji": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz",
+ "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==",
+ "dependencies": {
+ "lodash": "^4.17.21"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optimism": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.16.2.tgz",
+ "integrity": "sha512-zWNbgWj+3vLEjZNIh/okkY2EUfX+vB9TJopzIZwT1xxaMqC5hRLLraePod4c5n4He08xuXNH+zhKFFCu390wiQ==",
+ "dependencies": {
+ "@wry/context": "^0.7.0",
+ "@wry/trie": "^0.3.0"
+ }
+ },
+ "node_modules/ora": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
+ "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
+ "dependencies": {
+ "bl": "^4.1.0",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-spinners": "^2.5.0",
+ "is-interactive": "^1.0.0",
+ "is-unicode-supported": "^0.1.0",
+ "log-symbols": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "wcwidth": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "dependencies": {
+ "resolve": "^1.1.6"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "dependencies": {
+ "is-core-module": "^2.11.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/response-iterator": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/response-iterator/-/response-iterator-0.2.6.tgz",
+ "integrity": "sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "dependencies": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ },
+ "bin": {
+ "shjs": "bin/shjs"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/symbol-observable": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz",
+ "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
+ },
+ "node_modules/tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dependencies": {
+ "os-tmpdir": "~1.0.2"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/ts-invariant": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz",
+ "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
+ "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
+ },
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
+ "dependencies": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.5.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
+ "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==",
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/zen-observable": {
+ "version": "0.8.15",
+ "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz",
+ "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ=="
+ },
+ "node_modules/zen-observable-ts": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz",
+ "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==",
+ "dependencies": {
+ "zen-observable": "0.8.15"
+ }
+ }
+ }
+}
diff --git a/toucan-dapp/package.json b/toucan-dapp/package.json
new file mode 100644
index 00000000..d6653b83
--- /dev/null
+++ b/toucan-dapp/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "@celo/celo-composer",
+ "version": "1.0.8",
+ "description": "Get started building dApps on Celo",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/celo-org/celo-composer.git"
+ },
+ "author": "celo",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/celo-org/celo-composer/issues"
+ },
+ "homepage": "https://github.com/celo-org/celo-composer/blob/main/README.md",
+ "workspaces": [
+ "bin/*"
+ ],
+ "dependencies": {
+ "@apollo/client": "^3.7.14",
+ "chalk": "4.1.2",
+ "commander": "^9.4.0",
+ "fs-extra": "^10.1.0",
+ "inquirer": "^8.2.4",
+ "node-emoji": "^1.11.0",
+ "ora": "5.4.1",
+ "shelljs": "^0.8.5",
+ "yargs": "17.5.1"
+ },
+ "main": "bin/index.js",
+ "keywords": [
+ "celo-composer",
+ "celo"
+ ],
+ "bin": {
+ "celo-composer": "bin/index.js"
+ },
+ "files": [
+ "bin"
+ ]
+}
diff --git a/toucan-dapp/packages/hardhat/.envexample b/toucan-dapp/packages/hardhat/.envexample
new file mode 100644
index 00000000..389ae223
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/.envexample
@@ -0,0 +1,3 @@
+MNEMONIC=""
+PRIVATE_KEY=""
+CELOSCAN_API_KEY=""
\ No newline at end of file
diff --git a/toucan-dapp/packages/hardhat/.gitignore b/toucan-dapp/packages/hardhat/.gitignore
new file mode 100644
index 00000000..e36f7e18
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/.gitignore
@@ -0,0 +1,13 @@
+node_modules
+.env
+coverage
+coverage.json
+typechain
+
+#Hardhat files
+cache
+artifacts
+deployments
+
+# hardhat typechain generated files
+types/
diff --git a/toucan-dapp/packages/hardhat/.npmrc b/toucan-dapp/packages/hardhat/.npmrc
new file mode 100644
index 00000000..4fd02195
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/.npmrc
@@ -0,0 +1 @@
+engine-strict=true
\ No newline at end of file
diff --git a/toucan-dapp/packages/hardhat/README.md b/toucan-dapp/packages/hardhat/README.md
new file mode 100644
index 00000000..c0a0adef
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/README.md
@@ -0,0 +1,124 @@
+# Hardhat | Celo Composer
+
+This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, a sample script that deploys that contract, and an example of a task implementation, which simply lists the available accounts.
+
+## Setup & Installation
+
+### Alfajores Testnet Setup
+
+**Note** This setup is not required when using a local development blockchain (like celo-devchain or Ganache).
+
+1. Create a `.env` file similar to `.envexample`.
+2. Paste the private key in `.env`.
+> note: depending on how you generate your private key, you may have to prepend `0x` in the private key does not already have it prepended.
+3. Faucet your account with the Alfajores testnet faucet [here](https://celo.org/developers/faucet).
+
+## Develop
+
+1. Write your contracts in `./contracts`.
+2. Update contract deployment scripts in `./deploy`.
+3. Deploy contracts with `yarn deploy` from the **root directory**. Optionally add the reset flag (`yarn deploy --reset`) to overwrite previous deployment info. The default deployment network is specified in `hardhat.config.js` and is set to `alfajores` initially. You can also overwrite previous deployments and redeploy when there are changes to the deployment script or contracts automatically by running `yarn deploy-reset-watch`. You can specify a specific network deployment directly with
+
+```bash
+npx hardhat deploy --network [network name]
+```
+
+Network configs are defined in `hardhat.config.js`.
+
+## [Celo devchain](https://github.com/terminal-fi/celo-devchain)
+
+Run a local development Celo chain with `yarn devchain` in the `packages/hardhat` folder. You can print the addresses of the [Celo protocol contracts](https://github.com/celo-org/celo-monorepo/tree/master/packages/protocol) with `npx @terminal-fi/celo-devchain --test`.
+
+This is a version of Ganache (@celo/ganache-cli) that deploys the Celo core protocol contracts when it starts.
+
+**NOTE:** @celo/ganache-cli works only with Node 10 or Node 12 versions. Using Node 14 or later will result in errors.
+
+**NOTE:** @celo/ganache-cli currently doesn't support locally signed transactions. If you send a locally signed transaction it will throw: Error: Number can only safely store up to 53 bits error and crash. Thus you have to make sure your ContractKit doesn't actually have the private keys for test addresses and send transactions to be signed by ganache-cli itself.
+
+### Start
+
+```bash
+npx celo-devchain --port 8545
+```
+
+or
+
+```bash
+yarn devchain
+```
+
+### Generate Typescript bindings
+
+This setting defaults to the web3 v1 bindings because that is what is used by use-contractkit in `packages/react-app`.
+
+You can change the output directory and target in `hardhat.config.js`.
+
+```bash
+npx hardhat typechain
+```
+
+Read more about Typechain [here](https://github.com/dethcrypto/TypeChain) and more about the hardhat plugin [here](https://github.com/dethcrypto/TypeChain/tree/master/packages/hardhat).
+
+### Run sanity tests and print all core contract addresses
+
+```bash
+npx @terminal-fi/celo-devchain --test
+```
+
+## Fork mainnet with [Ganache](https://trufflesuite.com/blog/introducing-ganache-7/index.html#1-zero-config-mainnet-forking)
+
+You can get a local copy of mainnet by forking with Ganache. Learn more about [forking mainnet with Ganache here.](https://trufflesuite.com/blog/introducing-ganache-7/index.html#1-zero-config-mainnet-forking)
+
+There is a script provided (`yarn fork-mainnet`) to fork mainnet and fund the same test accounts that come with Celo devchain. Sometimes sending transactions from the first account (which defaults to `0x5409ED021D9299bf6814279A6A1411A7e866A631`) is delayed and sending test transactions from the other accounts works better for some reason. :shrug: The private keys of the associated test accounts are printed in `account_keys.json`.
+
+## Verify your contracts
+
+### hardhat-celo
+
+You can easily verify your contracts deployed to the associated networks with hardhat-celo.
+
+[Reference](https://docs.celo.org/developer/verify/hardhat)
+
+```bash
+npx hardhat verify smart-contract-address parameter(s) --network alfajores
+```
+
+On Mainnet:
+
+```bash
+npx hardhat verify smart-contract-address parameter(s) --network celo
+```
+
+### Sourcify
+
+Additionally, you can easily verify your contracts deployed to the associated networks with the following commands.
+
+[Reference](https://docs.celo.org/blog/hardhat-deploy-verify)
+
+On Alfajores:
+
+```bash
+npx hardhat --network alfajores sourcify
+```
+
+On Mainnet:
+
+```bash
+npx hardhat --network celo sourcify
+```
+
+## Deploy with [Figment Datahub](https://datahub.figment.io/)
+
+Figment Datahub provides RPC & REST APIs for Celo network. To learn more about Datahub refer this doc - [https://docs.figment.io/introduction/what-is-datahub](https://docs.figment.io/introduction/what-is-datahub). Follow these steps to deploy your smart contract with Figment datahub's RPC.
+
+- Create account on [Datahub](https://datahub.figment.io/).
+- On the dashboard, click on `Create new app` and select **Celo** from the protocol list.
+- Once you have created an app, copy the api key.
+- Edit `hardhat.config.js` and update `alfajoresDatahub` and `celoDatahub` with the API Key.
+- Run the test or deploy the contract with following commands.
+
+```bash
+npx hardhat run scripts/run.ts --network alfajoresDatahub
+
+npx hardhat run scripts/deploy.ts --network celoDatahub
+```
diff --git a/toucan-dapp/packages/hardhat/account_keys.json b/toucan-dapp/packages/hardhat/account_keys.json
new file mode 100644
index 00000000..03627dd9
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/account_keys.json
@@ -0,0 +1 @@
+{"addresses":{"0x5409ed021d9299bf6814279a6a1411a7e866a631":"0x5409ed021d9299bf6814279a6a1411a7e866a631","0x6ecbe1db9ef729cbe972c83fb886247691fb6beb":"0x6ecbe1db9ef729cbe972c83fb886247691fb6beb","0xe36ea790bc9d7ab70c55260c66d52b1eca985f84":"0xe36ea790bc9d7ab70c55260c66d52b1eca985f84","0xe834ec434daba538cd1b9fe1582052b880bd7e63":"0xe834ec434daba538cd1b9fe1582052b880bd7e63","0x78dc5d2d739606d31509c31d654056a45185ecb6":"0x78dc5d2d739606d31509c31d654056a45185ecb6","0xa8dda8d7f5310e4a9e24f8eba77e091ac264f872":"0xa8dda8d7f5310e4a9e24f8eba77e091ac264f872","0x06cef8e666768cc40cc78cf93d9611019ddcb628":"0x06cef8e666768cc40cc78cf93d9611019ddcb628","0x4404ac8bd8f9618d27ad2f1485aa1b2cfd82482d":"0x4404ac8bd8f9618d27ad2f1485aa1b2cfd82482d","0x7457d5e02197480db681d3fdf256c7aca21bdc12":"0x7457d5e02197480db681d3fdf256c7aca21bdc12","0x91c987bf62d25945db517bdaa840a6c661374402":"0x91c987bf62d25945db517bdaa840a6c661374402"},"private_keys":{"0x5409ed021d9299bf6814279a6a1411a7e866a631":"0xf2f48ee19680706196e2e339e5da3491186e0c4c5030670656b0e0164837257d","0x6ecbe1db9ef729cbe972c83fb886247691fb6beb":"0x5d862464fe9303452126c8bc94274b8c5f9874cbd219789b3eb2128075a76f72","0xe36ea790bc9d7ab70c55260c66d52b1eca985f84":"0xdf02719c4df8b9b8ac7f551fcb5d9ef48fa27eef7a66453879f4d8fdc6e78fb1","0xe834ec434daba538cd1b9fe1582052b880bd7e63":"0xff12e391b79415e941a94de3bf3a9aee577aed0731e297d5cfa0b8a1e02fa1d0","0x78dc5d2d739606d31509c31d654056a45185ecb6":"0x752dd9cf65e68cfaba7d60225cbdbc1f4729dd5e5507def72815ed0d8abc6249","0xa8dda8d7f5310e4a9e24f8eba77e091ac264f872":"0xefb595a0178eb79a8df953f87c5148402a224cdf725e88c0146727c6aceadccd","0x06cef8e666768cc40cc78cf93d9611019ddcb628":"0x83c6d2cc5ddcf9711a6d59b417dc20eb48afd58d45290099e5987e3d768f328f","0x4404ac8bd8f9618d27ad2f1485aa1b2cfd82482d":"0xbb2d3f7c9583780a7d3904a2f55d792707c345f21de1bacb2d389934d82796b2","0x7457d5e02197480db681d3fdf256c7aca21bdc12":"0xb2fd4d29c1390b71b8795ae81196bfd60293adf99f9d32a0aff06288fcdac55f","0x91c987bf62d25945db517bdaa840a6c661374402":"0x23cb7121166b9a2f93ae0b7c05bde02eae50d64449b2cbb42bc84e9d38d6cc89"}}
\ No newline at end of file
diff --git a/toucan-dapp/packages/hardhat/contracts/Greeter.sol b/toucan-dapp/packages/hardhat/contracts/Greeter.sol
new file mode 100644
index 00000000..572fe5ad
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/contracts/Greeter.sol
@@ -0,0 +1,26 @@
+//SPDX-License-Identifier: MIT
+pragma solidity ^0.8.17;
+
+// remember to remove unnecessary imports and its use when deploying your smart contract
+import "hardhat/console.sol";
+
+contract Greeter {
+ event newGreeting(string greeting, address sender);
+
+ string private greeting;
+
+ constructor(string memory _greet) {
+ console.log("Deploying a Greeter with greeting:", _greet);
+ greeting = _greet;
+ }
+
+ function greet() external view returns (string memory) {
+ return greeting;
+ }
+
+ function setGreeting(string calldata _greeting) external {
+ console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
+ greeting = _greeting;
+ emit newGreeting(_greeting, msg.sender);
+ }
+}
diff --git a/toucan-dapp/packages/hardhat/contracts/Oracle.sol b/toucan-dapp/packages/hardhat/contracts/Oracle.sol
new file mode 100644
index 00000000..5f23f6a9
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/contracts/Oracle.sol
@@ -0,0 +1,20 @@
+//SPDX-License-Identifier: MIT
+pragma solidity ^0.8.17;
+
+import "@redstone-finance/evm-connector/contracts/data-services/MainDemoConsumerBase.sol";
+
+// You can find more details about RedStone oracles here: https://tinyurl.com/redstone-celo-docs
+
+/**
+ * @title Oracle
+ * @dev Read data from RedStone oracle protocol
+ */
+contract Oracle is MainDemoConsumerBase {
+ /**
+ * Returns the latest price of STX stocks
+ */
+ function getLatestCeloPrice() public view returns (uint256) {
+ bytes32 dataFeedId = bytes32("CELO");
+ return getOracleNumericValueFromTxMsg(dataFeedId);
+ }
+}
diff --git a/toucan-dapp/packages/hardhat/contracts/SimpleERC115.sol b/toucan-dapp/packages/hardhat/contracts/SimpleERC115.sol
new file mode 100644
index 00000000..2181775f
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/contracts/SimpleERC115.sol
@@ -0,0 +1,85 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.17;
+
+import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
+import "@openzeppelin/contracts/access/Ownable.sol";
+import "@openzeppelin/contracts/utils/Strings.sol";
+
+contract SimpleERC115 is ERC1155, Ownable {
+ using Strings for uint256;
+
+ bool public publicSaleActive;
+
+ uint256 public constant MAX_SUPPLY = 10;
+
+ uint256 public mintPrice = 0.01 ether;
+
+ uint256 private _tokenIds;
+
+ string[MAX_SUPPLY] private _tokenUris;
+
+ modifier whenPublicSaleActive() {
+ require(publicSaleActive, "Public sale is not active");
+ _;
+ }
+
+ constructor() ERC1155("https://www.trashpanda.racoon/metadata/{id}.json") {}
+
+ function addTokenUri(uint256 tokenId, string memory tokenUri)
+ external
+ onlyOwner
+ {
+ _tokenUris[tokenId] = tokenUri;
+ }
+
+ function uri(uint256 _id) public view override returns (string memory) {
+ if (bytes(_tokenUris[_id]).length > 0) {
+ return _tokenUris[_id];
+ }
+
+ return string(super.uri(_id));
+ }
+
+ function startPublicSale() external onlyOwner {
+ require(!publicSaleActive, "Public sale has already begun");
+ publicSaleActive = true;
+ }
+
+ function pausePublicSale() external onlyOwner whenPublicSaleActive {
+ publicSaleActive = false;
+ }
+
+ function mint(uint256 numNfts) external payable whenPublicSaleActive {
+ require(
+ _tokenIds + numNfts <= MAX_SUPPLY,
+ "Minting would exceed max supply"
+ );
+ require(numNfts > 0, "Must mint at least one NFT");
+ require(
+ mintPrice * numNfts <= msg.value,
+ "Ether value sent is not correct"
+ );
+
+ for (uint256 i = 0; i < numNfts; i++) {
+ _mint(msg.sender, _tokenIds, 1, "");
+ _tokenIds += 1;
+ }
+ }
+
+ function mintTo(uint256 numNfts, address toAddress)
+ external
+ onlyOwner
+ whenPublicSaleActive
+ {
+ require(
+ _tokenIds + numNfts <= MAX_SUPPLY,
+ "Minting would exceed max supply"
+ );
+ require(numNfts > 0, "Must mint at least one NFT");
+
+ for (uint256 i = 0; i < numNfts; i++) {
+ _mint(toAddress, _tokenIds, 1, "");
+ _tokenIds += 1;
+ }
+ }
+}
diff --git a/toucan-dapp/packages/hardhat/contracts/SimpleERC777.sol b/toucan-dapp/packages/hardhat/contracts/SimpleERC777.sol
new file mode 100644
index 00000000..7beb6d6d
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/contracts/SimpleERC777.sol
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.17;
+import "@openzeppelin/contracts/token/ERC777/ERC777.sol";
+
+/**
+ * @title Simple777Token
+ * @dev Basic ERC777 Token example, where all tokens are pre-assigned to the creator.
+ * Note they can later distribute these tokens as they wish using `transfer` and other
+ * `ERC20` or `ERC777` functions.
+ */
+contract SimpleERC777 is ERC777 {
+ address payable owner;
+
+ /**
+ * @dev Constructor that gives msg.sender all of existing tokens.
+ */
+ constructor() ERC777("Simple777Token", "S7", new address[](0)) {
+ _mint(msg.sender, 10000 * 10**18, "", "");
+ owner = payable(msg.sender);
+ }
+}
diff --git a/toucan-dapp/packages/hardhat/contracts/SimpleProxyContract.sol b/toucan-dapp/packages/hardhat/contracts/SimpleProxyContract.sol
new file mode 100644
index 00000000..fa37e913
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/contracts/SimpleProxyContract.sol
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.17;
+import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import "@openzeppelin/contracts/access/Ownable.sol";
+import "@openzeppelin/contracts/utils/math/SafeMath.sol";
+
+contract SimpleProxyContract is Ownable {
+ using SafeMath for uint256;
+ IERC20 cont;
+ address tokenAddress;
+ address[] walletAddresses;
+
+ event ReceivedToken(address _from, uint256 _tokens);
+ event Distributed(address _owner, uint256 _token);
+ event AddedMember(address _member);
+ event SetERCToken(address token);
+
+ function setTokenAddress(address _tokenAddress)
+ external
+ onlyOwner
+ returns (bool)
+ {
+ assert(_tokenAddress != address(0));
+ tokenAddress = _tokenAddress;
+ cont = IERC20(_tokenAddress);
+ emit SetERCToken(_tokenAddress);
+ return true;
+ }
+
+ function setWalletMembers(address[] calldata members)
+ external
+ onlyOwner
+ returns (bool)
+ {
+ for (uint256 i = 0; i < members.length; i++) {
+ assert(members[i] != address(0));
+ walletAddresses.push(members[i]);
+ emit AddedMember(members[i]);
+ }
+ return true;
+ }
+
+ function sendTokens(address _from, uint256 tokens) external payable {
+ uint256 split;
+ assert(walletAddresses.length > 0);
+ assert(tokenAddress != address(0));
+ //if(tokens < walletAddresses.length) throw;
+ assert(tokens >= walletAddresses.length);
+
+ if (cont.balanceOf(_from) < tokens) revert();
+
+ split = tokens.div(walletAddresses.length);
+ for (uint256 i = 0; i < walletAddresses.length; i++) {
+ if (cont.transferFrom(_from, walletAddresses[i], split)) {
+ emit Distributed(walletAddresses[i], split);
+ }
+ }
+ }
+
+ function balanceOf(address _account) external view returns (uint256) {
+ return cont.balanceOf(_account);
+ }
+
+ function addMember(address _account) external onlyOwner returns (bool) {
+ assert(_account != address(0));
+ walletAddresses.push(_account);
+ emit AddedMember(_account);
+ return true;
+ }
+
+ function totalMembers() external view returns (uint256) {
+ return walletAddresses.length;
+ }
+
+ function getTokenAddress() external view returns (address) {
+ return tokenAddress;
+ }
+}
diff --git a/toucan-dapp/packages/hardhat/contracts/SimpleVestingWallet.sol b/toucan-dapp/packages/hardhat/contracts/SimpleVestingWallet.sol
new file mode 100644
index 00000000..40b423a1
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/contracts/SimpleVestingWallet.sol
@@ -0,0 +1,27 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.17;
+import "@openzeppelin/contracts/finance/VestingWallet.sol";
+
+contract SimpleVestingWallet is VestingWallet {
+ constructor(address beneficiaryAddress, uint64 durationSeconds)
+ VestingWallet(
+ beneficiaryAddress,
+ uint64(block.timestamp),
+ uint64(durationSeconds)
+ )
+ {}
+
+ function releaseToken() public virtual {
+ require(checkExpiry(), "Expired!");
+ release();
+ }
+
+ function checkExpiry() public view returns (bool success) {
+ uint256 x = VestingWallet.start() + VestingWallet.duration();
+ if (x >= uint256(block.timestamp)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/toucan-dapp/packages/hardhat/contracts/Storage.sol b/toucan-dapp/packages/hardhat/contracts/Storage.sol
new file mode 100644
index 00000000..80709989
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/contracts/Storage.sol
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.17;
+
+/**
+ * @title Storage
+ * @dev Store & retrieve value in a variable
+ */
+contract Storage {
+ event newNumber(uint256 number, address sender);
+
+ uint256 private number = 1;
+
+ /**
+ * @dev Store value in variable
+ * @param num value to store
+ */
+ function store(uint256 num) external {
+ number = num;
+ emit newNumber(num, msg.sender);
+ }
+
+ /**
+ * @dev Return value
+ * @return value of 'number'
+ */
+ function retrieve() public view returns (uint256) {
+ return number;
+ }
+}
diff --git a/toucan-dapp/packages/hardhat/contracts/SupportToken.sol b/toucan-dapp/packages/hardhat/contracts/SupportToken.sol
new file mode 100644
index 00000000..9ba59f2a
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/contracts/SupportToken.sol
@@ -0,0 +1,44 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.17;
+
+import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
+
+/**
+ * @notice A simple ERC20 Token implementation that also accepts donation for the project
+ */
+contract SupportToken is ERC20 {
+ uint sentIn;
+ address payable owner;
+
+ modifier onlyOwner() {
+ require(msg.sender == owner);
+ _;
+ }
+
+ constructor() ERC20("Support Token", "STT") {
+ /// @notice mint 10000 tokens to the owner
+ _mint(msg.sender, 10000e18);
+ owner = payable(msg.sender);
+ sentIn = 0;
+ }
+
+ function acceptDonation(uint amount)
+ public
+ payable
+ returns (bool accepted)
+ {
+ require(amount == msg.value, "Invalid amount!");
+
+ sentIn += msg.value;
+
+ return true;
+ }
+
+ function withdrawChest() public onlyOwner returns (bool) {
+ bool success = owner.send(address(this).balance);
+
+ if (success) return true;
+
+ return false;
+ }
+}
diff --git a/toucan-dapp/packages/hardhat/deploy/00-deploy.js b/toucan-dapp/packages/hardhat/deploy/00-deploy.js
new file mode 100644
index 00000000..6197e196
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/deploy/00-deploy.js
@@ -0,0 +1,68 @@
+// deploy/00_deploy_my_contract.js
+
+// const { ethers } = require("hardhat");
+
+// const sleep = (ms) =>
+// new Promise((r) =>
+// setTimeout(() => {
+// console.log(`waited for ${(ms / 1000).toFixed(3)} seconds`);
+// r();
+// }, ms)
+// );
+
+module.exports = async ({ getNamedAccounts, deployments }) => {
+ const { deploy } = deployments;
+ const { deployer } = await getNamedAccounts();
+
+ await deploy("Greeter", {
+ from: deployer,
+ args: ["hello world"],
+ log: true,
+ });
+
+ await deploy("Storage", {
+ // Learn more about args here: https://www.npmjs.com/package/hardhat-deploy#deploymentsdeploy
+ from: deployer,
+ //args: [ "Hello", ethers.utils.parseEther("1.5") ],
+ log: true,
+ });
+
+ await deploy("SupportToken", {
+ // Learn more about args here: https://www.npmjs.com/package/hardhat-deploy#deploymentsdeploy
+ from: deployer,
+ //args: [ "Hello", ethers.utils.parseEther("1.5") ],
+ log: true,
+ });
+
+ // Getting a previously deployed contract
+ // const Greeter = new ethers.Contract("Greeter", deployer);
+
+ // await Greeter.setGreeting("Hello Celo!");
+
+ /*
+ // If you want to send value to an address from the deployer
+
+ const deployerWallet = ethers.provider.getSigner()
+ await deployerWallet.sendTransaction({
+ to: "0x34aA3F359A9D614239015126635CE7732c18fDF3",
+ value: ethers.utils.parseEther("0.001")
+ })
+ */
+
+ /*
+ //If you want to send some CELO to a contract on deploy (make your constructor payable!)
+ const yourContract = await deploy("YourContract", [], {
+ value: ethers.utils.parseEther("0.05")
+ });
+ */
+
+ /*
+ //If you want to link a library into your contract:
+ // reference: https://github.com/austintgriffith/scaffold-eth/blob/using-libraries-example/packages/hardhat/scripts/deploy.js#L19
+ const yourContract = await deploy("YourContract", [], {}, {
+ LibraryName: **LibraryAddress**
+ });
+ */
+};
+
+module.exports.tags = ["Greeter", "Storage", "SupportToken"];
diff --git a/toucan-dapp/packages/hardhat/hardhat.config.js b/toucan-dapp/packages/hardhat/hardhat.config.js
new file mode 100644
index 00000000..a9627e55
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/hardhat.config.js
@@ -0,0 +1,98 @@
+require("@nomicfoundation/hardhat-chai-matchers");
+require("dotenv").config({ path: ".env" });
+require("hardhat-deploy");
+const { task } = require("hardhat/config");
+require("@nomiclabs/hardhat-ethers");
+require("@typechain/hardhat");
+require("hardhat-celo");
+
+const defaultNetwork = "alfajores";
+const mnemonicPath = "m/44'/52752'/0'/0"; // derivation path used by Celo
+
+// This is the mnemonic used by celo-devchain
+const DEVCHAIN_MNEMONIC =
+ "concert load couple harbor equip island argue ramp clarify fence smart topic";
+
+// You need to export an object to set up your config
+// Go to https://hardhat.org/config/ to learn more
+
+/**
+ * @type import('hardhat/config').HardhatUserConfig
+ */
+module.exports = {
+ defaultNetwork,
+ networks: {
+ localhost: {
+ url: "http://127.0.0.1:8545",
+ accounts: {
+ mnemonic: DEVCHAIN_MNEMONIC,
+ },
+ },
+ alfajores: {
+ url: "https://alfajores-forno.celo-testnet.org",
+ accounts: [process.env.PRIVATE_KEY],
+ chainId: 44787,
+ },
+ celo: {
+ url: "https://forno.celo.org",
+ accounts: [process.env.PRIVATE_KEY],
+ chainId: 42220,
+ },
+ },
+ etherscan: {
+ apiKey: {
+ alfajores: process.env.CELOSCAN_API_KEY,
+ celo: process.env.CELOSCAN_API_KEY,
+ },
+ },
+ solidity: {
+ version: "0.8.17",
+ },
+ namedAccounts: {
+ deployer: 0,
+ },
+ typechain: {
+ outDir: "types",
+ target: "web3-v1",
+ alwaysGenerateOverloads: false, // should overloads with full signatures like deposit(uint256) be generated always, even if there are no overloads?
+ externalArtifacts: ["externalArtifacts/*.json"], // optional array of glob patterns with external artifacts to process (for example external libs from node_modules)
+ },
+};
+
+// This is a sample Hardhat task. To learn how to create your own go to
+// https://hardhat.org/guides/create-task.html
+
+task("accounts", "Prints the list of accounts", async (taskArgs, hre) => {
+ const accounts = await hre.ethers.getSigners();
+
+ for (const account of accounts) {
+ console.log(account.address);
+ }
+});
+
+task(
+ "devchain-keys",
+ "Prints the private keys associated with the devchain",
+ async (taskArgs, hre) => {
+ const accounts = await hre.ethers.getSigners();
+ const hdNode = hre.ethers.utils.HDNode.fromMnemonic(DEVCHAIN_MNEMONIC);
+ for (let i = 0; i < accounts.length; i++) {
+ const account = hdNode.derivePath(`m/44'/60'/0'/0/${i}`);
+ console.log(
+ `Account ${i}\nAddress: ${account.address}\nKey: ${account.privateKey}`
+ );
+ }
+ }
+);
+
+task("create-account", "Prints a new private key", async (taskArgs, hre) => {
+ const wallet = new hre.ethers.Wallet.createRandom();
+ console.log(`PRIVATE_KEY="` + wallet.privateKey + `"`);
+ console.log();
+ console.log(`Your account address: `, wallet.address);
+});
+
+task("print-account", "Prints the address of the account", () => {
+ const wallet = new hre.ethers.Wallet(process.env.PRIVATE_KEY);
+ console.log(`Account: `, wallet.address);
+});
diff --git a/toucan-dapp/packages/hardhat/package.json b/toucan-dapp/packages/hardhat/package.json
new file mode 100644
index 00000000..4ab6afc5
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "@toucan-dapp/hardhat",
+ "version": "1.0.0",
+ "license": "MIT",
+ "scripts": {
+ "test": "hardhat test",
+ "test-local": "hardhat test --network hardhat",
+ "accounts": "hardhat accounts",
+ "devchain": "npx celo-devchain --port 8545",
+ "deploy": "hardhat deploy --export-all deployments/hardhat_contracts.json",
+ "deploy-reset-watch": "hardhat deploy --reset --watch --export-all deployments/hardhat_contracts.json",
+ "watch": "node scripts/watch.js",
+ "fork-mainnet": "ganache --fork.url https://forno.celo.org --wallet.mnemonic 'concert load couple harbor equip island argue ramp clarify fence smart topic' --wallet.accountKeysPath './account_keys.json' --gasPrice 875000000"
+ },
+ "devDependencies": {
+ "@nomicfoundation/hardhat-chai-matchers": "^1.0.0",
+ "@nomicfoundation/hardhat-network-helpers": "^1.0.0",
+ "@nomiclabs/hardhat-ethers": "^2.2.1",
+ "@nomiclabs/hardhat-etherscan": "^3.0.0",
+ "@terminal-fi/celo-devchain": "^4.0.1",
+ "@typechain/ethers-v5": "^10.1.0",
+ "@typechain/hardhat": "^6.1.3",
+ "@typechain/web3-v1": "^6.0.1",
+ "@types/mocha": "^9.1.0",
+ "bip39": "^3.0.4",
+ "chai": "^4.3.6",
+ "dotenv": "^16.0.3",
+ "ethereumjs-util": "^7.1.5",
+ "ethereumjs-wallet": "^1.0.2",
+ "ethers": "^5.7.2",
+ "hardhat": "^2.12.1",
+ "hardhat-celo": "^0.0.3",
+ "hardhat-deploy": "^0.11.19",
+ "hardhat-gas-reporter": "^1.0.8",
+ "node-watch": "^0.7.3",
+ "solidity-coverage": "^0.7.21",
+ "ts-node": ">=8.0.0",
+ "typechain": "^8.1.0"
+ },
+ "dependencies": {
+ "@ethersproject/abi": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/providers": "^5.7.2",
+ "@redstone-finance/evm-connector": "^0.0.15",
+ "ganache": "^7.5.0",
+ "source-map-support": "^0.5.21",
+ "typescript": "^4.8.4",
+ "web3": "^1.8.0",
+ "web3-core": "^1.8.0",
+ "web3-eth-contract": "^1.8.0"
+ }
+}
diff --git a/toucan-dapp/packages/hardhat/scripts/sample-script.js b/toucan-dapp/packages/hardhat/scripts/sample-script.js
new file mode 100644
index 00000000..90cd8197
--- /dev/null
+++ b/toucan-dapp/packages/hardhat/scripts/sample-script.js
@@ -0,0 +1,32 @@
+// We require the Hardhat Runtime Environment explicitly here. This is optional
+// but useful for running the script in a standalone fashion through `node