From d94253d94cbb78ae86bad2f83e04a19ed84437ae Mon Sep 17 00:00:00 2001 From: Nicolas Fazio Date: Tue, 25 Jun 2024 23:18:57 +0200 Subject: [PATCH] release: 1.2.0 (#50) * fix: ui modal round for large window * refactor: color clean * feat: add Check icon component ui * feat: add Cross icon component ui * refactor: use new component ui * refactor: use Ethereum Sepolia as default chain for Dev mode * refactor: add fake asset for sepolia testnet * feat: enable EVM erc20 wallet to wallet transfer * feat: add getTransactionsHistory provider function * refactor: add component for Token network detail * refactor: add style utilities * refactor: use new component * refactor: handle with debounce and warning msg * refactor: clean styles rules * refactor: add token alocation to desktop ui * feat: add confirmation before send tx * feat: Txs history implementation * feat: add filter logic for txs * refactor: change deploy url to dedicated subdomain * feat: add token icon * refactor: border radius changes * refactor: use link to base site * refactor: rmv welcome desktop page * refactor: defin redirection for old entry point * refactor: disable web page rte * refactor: set currentSegment as default on index path * refactor: index redirect to wallet * refactor: use proxy for txs api * refactor: bind filter to component * refactor: add padding * refactor: round percent display * feat: Firebase web3Connect integration as auth provider & wallet connector (#49) * feat: firebaseWeb3Connect integration * refactor: rmv network managment and use Web3Connector * feat: multi env implentation with services * refactor: pools network data management * refactor: init wallet with default chain * refactor: implement getSigner to use DeFi features * refactor: add tx confirmation with fees overview * fix: use correct types * chore: upd pkgs * refactor: setup initializeMagicWeb3Connect() as deprecated * feat: implement Magic migration guide * chore: upd pkgs * refactor: create index * refactor: rmv switch network to display strategy * refactor: disable non evm chain for external wallet * fix: use correct chain ID * fix: handle unexisting signer * refactor: use correct icon * feat: add backup seed * refactor: typo * refactor: add backup wallet option * fix: add missing await * refactor: rmv magic.link export option * refactor: typo * fix: use correct color-scheme value * refactor: disable auth error ui msg * refactor: clean logic & change folder * fix(ui): disable * fix(ui): alignement svg * fix(ui): border alignements * refactor: mv utils as module * refactor: change ui btn position * refactor: disable option * feat: implement NFTs overview * refactor: use light theme if enabled * chore: patch pks version * refactor: prevent multi initialize app * refactor: manage networks * fix: use correct api method * refactor: display asset wallet allocation * refactor: add chart multi interval data * refactor: use chart series data * refactor: disable load datas to test in stage mode * refactor: use minimal auth logic to allow debug standalone * refactor: dislpay log as alert * refactor: try with browser resolver * refactor: add getAdditionalUserInfo to try * refactor: back to initial code * chore:pkg v * chore:pkg v * chore:pkg v * refactor: upd pkgs * refactor: ui border * refactor: enable mobile ui for browser mobile * refactor: force reload on disconnect & clean ui * refactor: load async data without blocking ui * refactor: reflect type change * chore:pkg v * chore:pkg v * chore:pkg v * chore:pkg v * feat: add AuthWithLinkContainer * refactor: upd pkg to add ops params * fix: rmv unexported pkg module * fix: add missig call function * refactor: prevent multiple initialize & set deps manualy * refactor: enable build with success * refactor: add session storage * refactor: rmv redirection after auth this cause UI issuie when user coming from standalone to authenticate * refactor: remove loader that not be usefull * chore: upd pkg * refactor: change firebase config * refactor: import wallet lib as src * refactor: use local llib * refactor: test with npm lib & local deps * refactor: use local libs * refactor: setup local backend emulator * refactor: toggle alignement * feat: enable earn section acces to empty user wallet * fix: handle error & return empty value * feat: use txs as marker on asset page * refactor: add marker txs * refactor: unse inline html * refactor: rmv pwd input * refactor: use dedicated service to manage Coin Data provider * refactor: add provicer api key * refactor: use provider api keys * refactor: use env to manage emulator activation * refactor: change rpc endpoints * refactor: use const from workspace * refactor: disable api if not production mode * fix: use public method to enable initialize firebase * refactor: expose method from connector * refactor: use connector with exposed method * refactor: prevent wallet creation on auth with link page * refactor: disable state management for auth path * refactor: add emulators logs to ignore * refactor: clean authentication email link workflow ui * refactor: manage migration modal display flow * refactor: upd collection name * chore: Remove logs in production, excluding error logs * refactor: disable email link auth in standalone mode * refactor: add new assets icon * refactor: display txs on token detail page * refactor: only use in|out tx * refactor: use Set() in place of Map() * refactor: upd swaps deps * refactor: init * refactor: manage stte change with externalwallet * refactor: use localforage via Ionic/Storage API * refactor: enable switch mode with encryption * chore: patch v * refactor: use colorized app logo & favicon * refactor: upd ico * fix: set fail with undefined value * refactor: wrap with try catch to prevent app init crahs * refactor: add external ops to controls chart * refactor: add chart control for mobil * refactor: handle chart event to update price * refactor: color lightmode * refactor: lightmode param * refactor: rmv reload & clean small thing * chore: md --- .firebaserc | 4 +- .github/workflows/firebase-hosting-merge.yml | 1 + .../firebase-hosting-pull-request.yml | 1 + .gitignore | 1 + README.md | 6 +- environment.d.ts | 58 + example.env | 18 + firebase.config.ts | 37 +- firebase.json | 15 +- next.config.js | 4 + package-lock.json | 12673 ++++++++++------ package.json | 22 +- public/assets/app-logo/100.png | Bin 749 -> 4099 bytes public/assets/app-logo/1024.png | Bin 11401 -> 43074 bytes public/assets/app-logo/114.png | Bin 832 -> 4442 bytes public/assets/app-logo/120.png | Bin 861 -> 4636 bytes public/assets/app-logo/128.png | Bin 902 -> 4906 bytes public/assets/app-logo/144.png | Bin 1010 -> 5295 bytes public/assets/app-logo/152.png | Bin 1086 -> 5595 bytes public/assets/app-logo/16.png | Bin 283 -> 1869 bytes public/assets/app-logo/167.png | Bin 1115 -> 6012 bytes public/assets/app-logo/180.png | Bin 1159 -> 6335 bytes public/assets/app-logo/192.png | Bin 1311 -> 6713 bytes public/assets/app-logo/20.png | Bin 303 -> 1995 bytes public/assets/app-logo/256.png | Bin 1771 -> 8529 bytes public/assets/app-logo/29.png | Bin 386 -> 2250 bytes public/assets/app-logo/32.png | Bin 401 -> 2310 bytes public/assets/app-logo/40.png | Bin 447 -> 2518 bytes public/assets/app-logo/48.png | Bin 477 -> 2747 bytes public/assets/app-logo/50.png | Bin 504 -> 2798 bytes public/assets/app-logo/512.png | Bin 3884 -> 17063 bytes public/assets/app-logo/57.png | Bin 534 -> 2984 bytes public/assets/app-logo/58.png | Bin 520 -> 2986 bytes public/assets/app-logo/60.png | Bin 530 -> 3080 bytes public/assets/app-logo/64.png | Bin 567 -> 3125 bytes public/assets/app-logo/72.png | Bin 592 -> 3404 bytes public/assets/app-logo/76.png | Bin 663 -> 3459 bytes public/assets/app-logo/80.png | Bin 643 -> 3626 bytes public/assets/app-logo/87.png | Bin 724 -> 3746 bytes public/assets/app-logo/96.png | Bin 737 -> 3998 bytes public/assets/cryptocurrency-icons/oseth.svg | 1 + public/assets/cryptocurrency-icons/usde.svg | 1 + public/assets/cryptocurrency-icons/weeth.svg | 1 + public/assets/icons/bank.svg | 12 +- public/assets/icons/history-icon.svg | 5 + public/favicon.ico | Bin 15406 -> 7406 bytes public/favicon.svg | 23 +- src/components/ATOMLiquidStakingstrategy.tsx | 2 +- src/components/AppShell.tsx | 563 +- src/components/AuthBadge.tsx | 42 +- src/components/ConnectButton.tsx | 83 - src/components/CrosschainLoanForm.tsx | 74 +- src/components/ETHLiquidStakingstrategy.tsx | 23 +- .../ETHsfrxLiquidStakingstrategy.tsx | 13 +- src/components/Header.tsx | 4 +- src/components/LiFiWidgetDynamic.tsx | 2 + src/components/LoanFormModal.tsx | 227 +- src/components/MATICLiquidStakingstrategy.tsx | 19 +- src/components/MenuSlide.tsx | 2 +- src/components/NetworkButton.tsx | 9 +- src/components/ReserveDetail.tsx | 204 +- src/components/SelectNetwork.tsx | 9 +- src/components/base/WalletBaseContainer.tsx | 5 +- src/components/mobile/ActionNavButtons.tsx | 1 - src/components/mobile/WalletAssetsList.tsx | 2 - .../ui/CheckIcon/CheckIcon.module.scss | 64 + src/components/ui/CheckIcon/CheckIcon.tsx | 58 + src/components/ui/ConnectButton.tsx | 48 + .../ui/CrossIcon/CrossIcon.module.scss | 46 + src/components/ui/CrossIcon/CrossIcon.tsx | 26 + .../InputAssetWithDropDown.tsx | 195 + src/components/ui/LightChart.tsx | 175 +- src/components/ui/MenuSetting.tsx | 56 +- .../NetworkTokenDetailCard.module.scss | 48 + .../NetworkTokenDetailCard.tsx | 79 + src/components/ui/NftsList/NftsList.tsx | 110 + src/components/ui/TokenDetailDescription.tsx | 2 +- src/components/ui/TokenDetailMarketData.tsx | 2 +- src/components/ui/ToogleLightmode.tsx | 1 + src/components/ui/TsxList/TxsList.tsx | 98 + src/components/ui/WalletAssetEntity.tsx | 20 +- src/components/ui/WalletTxEntity.tsx | 241 + src/components/ui/WalletTxEntitySkeleton.tsx | 100 + src/constants/chains.ts | 363 +- src/containers/AuthWithLinkContainer.tsx | 62 + src/containers/BuyWithFiat.tsx | 2 +- src/containers/DepositContainer.tsx | 7 +- src/containers/MagicMigrationContainer.tsx | 124 + src/containers/TransferContainer.tsx | 565 +- src/containers/desktop/SwapContainer.tsx | 47 +- .../desktop/TokenDetailDesktopContainer.tsx | 354 +- .../desktop/WalletDesktopContainer.tsx | 267 +- src/containers/index.ts | 20 + src/containers/mobile/SwapMobileContainer.tsx | 32 +- .../mobile/TokenDetailMobileContainer.tsx | 246 +- .../mobile/WalletMobileContainer.tsx | 270 +- .../mobile/WelcomeMobileContainer.tsx | 10 +- src/context/LoaderContext.tsx | 4 +- src/interfaces/nft.interface.ts | 6 + src/interfaces/tx.interface.ts | 137 + src/interfaces/web3.interface.ts | 6 +- src/lib/assets/svg/download-outline.svg | 1 + .../assets/svg/extension-puzzle-outline.svg | 1 + src/lib/assets/svg/extension-puzzle.svg | 1 + src/lib/assets/svg/key-outline.svg | 1 + src/lib/assets/svg/wallet-outline.svg | 1 + src/lib/assets/svg/wallet.svg | 1 + src/lib/constant.ts | 31 + src/lib/index.ts | 6 + src/lib/interfaces/auth-provider.interface.ts | 23 + .../interfaces/dialog-element.interface.ts | 86 + src/lib/interfaces/sdk.interface.ts | 29 + .../interfaces/storage-provider.interface.ts | 8 + .../interfaces/storage-service.interface.ts | 7 + .../interfaces/walllet-provider.interface.ts | 9 + src/lib/networks/bitcoin.ts | 142 + src/lib/networks/evm.ts | 289 + src/lib/networks/solana.ts | 205 + src/lib/networks/web3-wallet.ts | 16 + src/lib/providers/auth/firebase.ts | 206 + src/lib/providers/crypto/crypto.ts | 316 + src/lib/providers/crypto/password.ts | 26 + src/lib/providers/storage/firebase.ts | 43 + src/lib/providers/storage/fleek.ts | 29 + src/lib/providers/storage/local.ts | 139 + src/lib/providers/storage/localforage.ts | 126 + src/lib/sdk.ts | 746 + src/lib/services/auth.servcie.ts | 186 + src/lib/services/backup.service.ts | 21 + src/lib/services/storage.service.ts | 94 + src/lib/services/wallet.service.ts.ts | 78 + .../ui/checkbox-element/checkbox-element.ts | 58 + src/lib/ui/dialog-element/dialogElement.css | 242 + src/lib/ui/dialog-element/dialogElement.html | 104 + src/lib/ui/dialog-element/dialogElement.ts | 834 + src/lib/ui/dialog-element/index.ts | 289 + .../prompt-download-element.css | 3 + .../prompt-download-element.ts | 81 + .../prompt-email-password-element.ts | 157 + .../prompt-import-privatekey-element.ts | 71 + .../prompt-import-seed-element.css | 31 + .../prompt-import-seed-element.ts | 79 + .../prompt-password-element.ts | 165 + .../prompt-signout-element.css | 10 + .../prompt-signout-element.ts | 103 + .../prompt-wallet-type-element.css | 14 + .../prompt-wallet-type-element.ts | 85 + src/lib/ui/spinner-element/spinner-element.ts | 103 + src/lib/utils.ts | 50 + src/lib/vite-env.d.ts | 11 + src/network/Avalanche.ts | 32 - src/network/Bitcoin.ts | 40 - src/network/Cosmos.ts | 138 - src/network/EVM.ts | 159 - src/network/MagicWallet.ts | 94 - src/network/Solana.ts | 49 - src/pages/_app.tsx | 20 +- src/pool/Aave.pool.ts | 34 +- src/pool/Market.pool.ts | 11 +- src/servcies/aave.service.ts | 118 +- src/servcies/ankr.service.ts | 268 +- src/servcies/coingecko.service.ts | 176 + src/servcies/firebase-web3-connect.ts | 209 + src/servcies/lifi.service.ts | 23 +- src/servcies/magic-web3-connect.ts | 0 src/servcies/zerion.service.ts | 113 + src/store/actions.ts | 8 + src/store/effects/pools.effect.ts | 25 +- src/store/effects/web3.effects.ts | 159 +- src/store/index.ts | 24 +- src/styles/global.scss | 119 +- src/styles/variables.scss | 24 +- src/utils/getAllocationRatioInPercent.ts | 6 + src/utils/getCoingeekoTokenId.ts | 19 - src/utils/getTokenHistoryPrice.ts | 33 - src/utils/getTokenInfo.ts | 71 - src/utils/isMobile.ts | 8 + 177 files changed, 18269 insertions(+), 7126 deletions(-) create mode 100644 example.env create mode 100644 public/assets/cryptocurrency-icons/oseth.svg create mode 100644 public/assets/cryptocurrency-icons/usde.svg create mode 100644 public/assets/cryptocurrency-icons/weeth.svg create mode 100644 public/assets/icons/history-icon.svg mode change 100755 => 100644 public/favicon.ico delete mode 100644 src/components/ConnectButton.tsx create mode 100644 src/components/ui/CheckIcon/CheckIcon.module.scss create mode 100644 src/components/ui/CheckIcon/CheckIcon.tsx create mode 100644 src/components/ui/ConnectButton.tsx create mode 100644 src/components/ui/CrossIcon/CrossIcon.module.scss create mode 100644 src/components/ui/CrossIcon/CrossIcon.tsx create mode 100644 src/components/ui/InputAssetWithDropDown/InputAssetWithDropDown.tsx create mode 100644 src/components/ui/NetworkTokenDetailCard/NetworkTokenDetailCard.module.scss create mode 100644 src/components/ui/NetworkTokenDetailCard/NetworkTokenDetailCard.tsx create mode 100644 src/components/ui/NftsList/NftsList.tsx create mode 100644 src/components/ui/TsxList/TxsList.tsx create mode 100644 src/components/ui/WalletTxEntity.tsx create mode 100644 src/components/ui/WalletTxEntitySkeleton.tsx create mode 100644 src/containers/AuthWithLinkContainer.tsx create mode 100644 src/containers/MagicMigrationContainer.tsx create mode 100644 src/containers/index.ts create mode 100644 src/interfaces/nft.interface.ts create mode 100644 src/interfaces/tx.interface.ts create mode 100644 src/lib/assets/svg/download-outline.svg create mode 100644 src/lib/assets/svg/extension-puzzle-outline.svg create mode 100644 src/lib/assets/svg/extension-puzzle.svg create mode 100644 src/lib/assets/svg/key-outline.svg create mode 100644 src/lib/assets/svg/wallet-outline.svg create mode 100644 src/lib/assets/svg/wallet.svg create mode 100644 src/lib/constant.ts create mode 100644 src/lib/index.ts create mode 100644 src/lib/interfaces/auth-provider.interface.ts create mode 100644 src/lib/interfaces/dialog-element.interface.ts create mode 100644 src/lib/interfaces/sdk.interface.ts create mode 100644 src/lib/interfaces/storage-provider.interface.ts create mode 100644 src/lib/interfaces/storage-service.interface.ts create mode 100644 src/lib/interfaces/walllet-provider.interface.ts create mode 100644 src/lib/networks/bitcoin.ts create mode 100755 src/lib/networks/evm.ts create mode 100644 src/lib/networks/solana.ts create mode 100644 src/lib/networks/web3-wallet.ts create mode 100755 src/lib/providers/auth/firebase.ts create mode 100644 src/lib/providers/crypto/crypto.ts create mode 100644 src/lib/providers/crypto/password.ts create mode 100644 src/lib/providers/storage/firebase.ts create mode 100644 src/lib/providers/storage/fleek.ts create mode 100644 src/lib/providers/storage/local.ts create mode 100644 src/lib/providers/storage/localforage.ts create mode 100644 src/lib/sdk.ts create mode 100644 src/lib/services/auth.servcie.ts create mode 100644 src/lib/services/backup.service.ts create mode 100644 src/lib/services/storage.service.ts create mode 100644 src/lib/services/wallet.service.ts.ts create mode 100644 src/lib/ui/checkbox-element/checkbox-element.ts create mode 100644 src/lib/ui/dialog-element/dialogElement.css create mode 100644 src/lib/ui/dialog-element/dialogElement.html create mode 100644 src/lib/ui/dialog-element/dialogElement.ts create mode 100644 src/lib/ui/dialog-element/index.ts create mode 100644 src/lib/ui/prompt-download-element/prompt-download-element.css create mode 100644 src/lib/ui/prompt-download-element/prompt-download-element.ts create mode 100644 src/lib/ui/prompt-email-password-element/prompt-email-password-element.ts create mode 100644 src/lib/ui/prompt-import-privatekey-element/prompt-import-privatekey-element.ts create mode 100644 src/lib/ui/prompt-import-seed-element/prompt-import-seed-element.css create mode 100644 src/lib/ui/prompt-import-seed-element/prompt-import-seed-element.ts create mode 100644 src/lib/ui/prompt-password-element/prompt-password-element.ts create mode 100644 src/lib/ui/prompt-signout-element/prompt-signout-element.css create mode 100644 src/lib/ui/prompt-signout-element/prompt-signout-element.ts create mode 100644 src/lib/ui/prompt-wallet-type-element/prompt-wallet-type-element.css create mode 100644 src/lib/ui/prompt-wallet-type-element/prompt-wallet-type-element.ts create mode 100644 src/lib/ui/spinner-element/spinner-element.ts create mode 100644 src/lib/utils.ts create mode 100755 src/lib/vite-env.d.ts delete mode 100644 src/network/Avalanche.ts delete mode 100644 src/network/Bitcoin.ts delete mode 100644 src/network/Cosmos.ts delete mode 100644 src/network/EVM.ts delete mode 100644 src/network/MagicWallet.ts delete mode 100644 src/network/Solana.ts create mode 100644 src/servcies/coingecko.service.ts create mode 100644 src/servcies/firebase-web3-connect.ts create mode 100644 src/servcies/magic-web3-connect.ts create mode 100644 src/servcies/zerion.service.ts create mode 100644 src/utils/getAllocationRatioInPercent.ts delete mode 100644 src/utils/getCoingeekoTokenId.ts delete mode 100644 src/utils/getTokenHistoryPrice.ts delete mode 100644 src/utils/getTokenInfo.ts create mode 100644 src/utils/isMobile.ts diff --git a/.firebaserc b/.firebaserc index 1f21c258..3c4254eb 100644 --- a/.firebaserc +++ b/.firebaserc @@ -2,8 +2,8 @@ "targets": { "hexaonelabs": { "hosting": { - "hexa-lite": [ - "hexa-lite" + "app-hexa-lite": [ + "app-hexa-lite" ] } } diff --git a/.github/workflows/firebase-hosting-merge.yml b/.github/workflows/firebase-hosting-merge.yml index 3383b286..4289a6d6 100644 --- a/.github/workflows/firebase-hosting-merge.yml +++ b/.github/workflows/firebase-hosting-merge.yml @@ -29,6 +29,7 @@ jobs: touch .env.local echo NEXT_PUBLIC_APP_ONBOARD_APIKEY=${{ secrets.NEXT_PUBLIC_APP_ONBOARD_APIKEY }} >> .env.local echo NEXT_PUBLIC_APP_ANKR_APIKEY=${{ secrets.NEXT_PUBLIC_APP_ANKR_APIKEY }} >> .env.local + echo NEXT_PUBLIC_APP_COINGECKO_APIKEY=${{ secrets.NEXT_PUBLIC_APP_COINGECKO_APIKEY }} >> .env.local echo NEXT_PUBLIC_APP_VERSION=${{ steps.extract_version.outputs.version }} >> .env.local echo NEXT_PUBLIC_APP_BUILD_DATE=${{ steps.version.outputs.builddate }} >> .env.local echo NEXT_PUBLIC_APP_IS_PROD=true >> .env.local diff --git a/.github/workflows/firebase-hosting-pull-request.yml b/.github/workflows/firebase-hosting-pull-request.yml index 250f5e0e..72b4442a 100644 --- a/.github/workflows/firebase-hosting-pull-request.yml +++ b/.github/workflows/firebase-hosting-pull-request.yml @@ -24,6 +24,7 @@ jobs: touch .env.local echo NEXT_PUBLIC_APP_ONBOARD_APIKEY=${{ secrets.NEXT_PUBLIC_APP_ONBOARD_APIKEY }} >> .env.local echo NEXT_PUBLIC_APP_ANKR_APIKEY=${{ secrets.NEXT_PUBLIC_APP_ANKR_APIKEY }} >> .env.local + echo NEXT_PUBLIC_APP_COINGECKO_APIKEY=${{ secrets.NEXT_PUBLIC_APP_COINGECKO_APIKEY }} >> .env.local echo NEXT_PUBLIC_APP_VERSION=${{ steps.extract_version.outputs.version }} >> .env.local echo NEXT_PUBLIC_APP_BUILD_DATE=${{ steps.version.outputs.builddate }} >> .env.local echo NEXT_PUBLIC_APP_IS_PROD=true >> .env.local diff --git a/.gitignore b/.gitignore index 9924dc0c..183fed5c 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ yarn-error.log* press-paper rfp .firebase/ +*.log diff --git a/README.md b/README.md index 97c9899a..701312c0 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,6 @@ Hexa Lite is frictionless, secure, and reliable for everyone to use and enjoy th - [Ethers.js](https://docs.ethers.io/v5/) - [Ankr](https://ankr.com/) - [LiFi](https://li.fi/) -- [Magic](https://magic.link/) - [Chain Link](https://chain.link/) - [Lido](https://lido.fi/) - [Aave](https://aave.com/) @@ -59,10 +58,7 @@ Hexa Lite is a web-based platform that can be accessed from any device with a we Hexa Lite is deployed automatically using Github Actions. The deployment process is triggered when a new push is made to the master branch. The deployment process is managed by [Firebase Hosting](https://firebase.google.com/docs/hosting) and the project is available on [IPFS](https://ipfs.io/) using [Fleek](https://fleek.co/). ## Environment Variables -Hexa Lite uses environment variables to store sensitive data and API keys. The environment variables are stored in a .env file at the root of the project. The .env file is not commited to the repository and is ignored by Git. The .env file must be created manually and the environment variables must be provided by the user. The .env file must contain the following environment variables: - -- `REACT_APP_ONBOARD_APIKEY`: Onboard API key -- `REACT_APP_ANKR_APIKEY`: Ankr API key +Hexa Lite uses environment variables to store sensitive data and API keys. The environment variables are stored in a .env file at the root of the project. The .env file is not commited to the repository and is ignored by Git. The .env file must be created manually and the environment variables must be provided by the user. Checkout `./example.env` file for more information about the environment variables that are required. ## Contributing Contributions are welcome and appreciated. To contribute to Hexa Lite, please fork the repository, create a new branch and submit a pull request. For major changes, please open an issue first to discuss what you would like to change. diff --git a/environment.d.ts b/environment.d.ts index 8f15ab61..dd53706f 100644 --- a/environment.d.ts +++ b/environment.d.ts @@ -1,13 +1,71 @@ declare namespace NodeJS { export interface ProcessEnv { + /** + * API Key for the Onboard API + * @deprecated + */ readonly NEXT_PUBLIC_APP_ONBOARD_APIKEY: string; + /** + * API Key for the Ankr API + * @description Use this key to access the Ankr API + * to get user EVM Assets List + */ readonly NEXT_PUBLIC_APP_ANKR_APIKEY: string; + /** + * APP Version + */ readonly NEXT_PUBLIC_APP_VERSION: string; + /** + * APP Build Date + */ readonly NEXT_PUBLIC_APP_BUILD_DATE: string; + /** + * APP Environment Production enabled + */ readonly NEXT_PUBLIC_APP_IS_PROD: string; + + /** + * APP Environment is Offline. + * @description This is used for development purposes. + * If this is enabled, the app will not make any API calls and + * will use the mock data instead. + */ + readonly NEXT_PUBLIC_APP_IS_LOCAL: string; + + /** + * API Key for the Zerion API + * @description Use this key to access the Zerion API + * to get User EVM Wallet History transactions + */ + readonly NEXT_PUBLIC_APP_ZERION_APIKEY: string; + + /** + * API Key for the Coingecko API + * @description Use this key to access the Coingecko API + * to get the latest token prices + */ + readonly NEXT_PUBLIC_APP_COINGECKO_APIKEY: string; + + /** + * Enable/Disable Emulator for Firebase + */ + readonly NEXT_PUBLIC_ENABLE_EMULATORS: string; + + /** + * FIREBASE Configurations for the Firebase SDK + * @description Following are the configurations required for the Firebase SDK + */ + readonly NEXT_PUBLIC_APP_FIREBASE_APIKEY: string; + readonly NEXT_PUBLIC_APP_FIREBASE_AUTHDOMAIN: string; + readonly NEXT_PUBLIC_APP_FIREBASE_PROJECTID: string; + readonly NEXT_PUBLIC_APP_FIREBASE_STORAGEBUCKET: string; + readonly NEXT_PUBLIC_APP_FIREBASE_MESSAGINGSENDERID: string; + readonly NEXT_PUBLIC_APP_FIREBASE_APPID: string; + readonly NEXT_PUBLIC_APP_FIREBASE_DATABASEURL: string; + } } \ No newline at end of file diff --git a/example.env b/example.env new file mode 100644 index 00000000..a43fa608 --- /dev/null +++ b/example.env @@ -0,0 +1,18 @@ +NEXT_PUBLIC_APP_ONBOARD_APIKEY= +NEXT_PUBLIC_APP_ANKR_APIKEY= +NEXT_PUBLIC_APP_ZERION_APIKEY= +NEXT_PUBLIC_APP_COINGECKO_APIKEY= +NEXT_PUBLIC_APP_VERSION= +NEXT_PUBLIC_APP_BUILD_DATE= +NEXT_PUBLIC_APP_IS_PROD= +NEXT_PUBLIC_APP_IS_LOCAL= +NEXT_PUBLIC_ENABLE_EMULATORS= + +NEXT_PUBLIC_APP_FIREBASE_APIKEY= +NEXT_PUBLIC_APP_FIREBASE_AUTHDOMAIN= +NEXT_PUBLIC_APP_FIREBASE_PROJECTID= +NEXT_PUBLIC_APP_FIREBASE_STORAGEBUCKET= +NEXT_PUBLIC_APP_FIREBASE_MESSAGINGSENDERID= +NEXT_PUBLIC_APP_FIREBASE_APPID= +NEXT_PUBLIC_APP_FIREBASE_DATABASEURL= + diff --git a/firebase.config.ts b/firebase.config.ts index dcef6cbf..2c3c7338 100644 --- a/firebase.config.ts +++ b/firebase.config.ts @@ -1,6 +1,16 @@ // Import the functions you need from the SDKs you need -import { initializeApp } from "firebase/app"; -import { getDatabase } from "firebase/database"; +import { FirebaseApp, getApps, initializeApp } from "firebase/app"; +import { + Auth, + browserPopupRedirectResolver, + indexedDBLocalPersistence, + initializeAuth, + browserLocalPersistence, + browserSessionPersistence, + getAuth, + connectAuthEmulator, +} from "firebase/auth"; +import { Database, connectDatabaseEmulator, getDatabase } from "firebase/database"; // TODO: Add SDKs for Firebase products that you want to use // https://firebase.google.com/docs/web/setup#available-libraries @@ -15,10 +25,23 @@ const firebaseConfig = { databaseURL: process.env.NEXT_PUBLIC_APP_FIREBASE_DATABASEURL, }; -// Initialize Firebase -const app = initializeApp(firebaseConfig); +let _app!: FirebaseApp; +let _auth!: Auth; +let _database!: Database; -// Initialize Realtime Database and get a reference to the service -const database = getDatabase(app); +if (!getApps().length) { + // Initialize Firebase + _app = initializeApp(firebaseConfig, 'hexa-lite'); + // Initialize Realtime Database and get a reference to the service + _database = getDatabase(_app); + // Initialize Auth + _auth = getAuth(_app); + // Emulator setup + if (process.env.NEXT_PUBLIC_ENABLE_EMULATORS === 'true') { + connectDatabaseEmulator(_database, 'localhost', 9000); + connectAuthEmulator(_auth, 'http://127.0.0.1:9099'); + } +} -export { database } \ No newline at end of file +export const database = _database; +export const auth = _auth; diff --git a/firebase.json b/firebase.json index 65640fd3..c6fb8a92 100644 --- a/firebase.json +++ b/firebase.json @@ -1,6 +1,6 @@ { "hosting": { - "target": "hexa-lite", + "target": "app-hexa-lite", "public": "build", "ignore": [ "firebase.json", @@ -13,5 +13,18 @@ "destination": "/index.html" } ] + }, + "emulators": { + "auth": { + "port": 9099 + }, + "database": { + "port": 9000 + }, + "ui": { + "enabled": true, + "port": 9001 + }, + "singleProjectMode": true } } diff --git a/next.config.js b/next.config.js index 9d235408..1748821b 100755 --- a/next.config.js +++ b/next.config.js @@ -12,4 +12,8 @@ module.exports = { '@lifi/wallet-management', '@0xsquid/widget' ], + compiler: { + // Remove console logs only in production, excluding error logs + removeConsole: process.env.NODE_ENV === "production" ? { exclude: ["error"] } : false + } } diff --git a/package-lock.json b/package-lock.json index bae2d402..b2e683c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@aave/math-utils": "^1.21.1", "@avalabs/avalanchejs": "^3.17.0", "@bgd-labs/aave-address-book": "^2.19.0", + "@bitcoinerlab/secp256k1": "^1.1.1", "@capacitor-community/barcode-scanner": "^4.0.1", "@capacitor/android": "^5.0.0", "@capacitor/core": "^5.0.0", @@ -21,10 +22,12 @@ "@capacitor/ios": "^5.0.0", "@capacitor/status-bar": "^5.0.0", "@cosmjs/stargate": "^0.32.1", + "@hexaonelabs/firebase-web3connect": "^0.0.9-alpha.10", "@ionic/react": "latest", "@ionic/react-router": "latest", + "@ionic/storage": "^4.0.0", "@khmyznikov/pwa-install": "^0.2.7", - "@lifi/widget": "^2.10.1", + "@lifi/widget": "^2.10.2", "@magic-ext/avalanche": "^16.4.0", "@magic-ext/bitcoin": "^16.4.0", "@magic-ext/cosmos": "^16.4.0", @@ -33,7 +36,8 @@ "@moonpay/moonpay-js": "^0.5.0", "@moonpay/moonpay-react": "^1.6.1", "@next/third-parties": "^14.1.4", - "@solana/web3.js": "^1.87.6", + "@solana/spl-token": "^0.4.6", + "@solana/web3.js": "^1.93.0", "@solendprotocol/solend-sdk": "^0.7.6", "@types/jest": "^26.0.20", "@types/node": "^12.19.15", @@ -41,9 +45,13 @@ "@types/react-dom": "^18.0.6", "@types/react-router": "^5.1.11", "@types/react-router-dom": "^5.1.7", - "bitcoinjs-lib": "^6.1.5", + "bip32": "^4.0.0", + "bip39": "^3.1.0", + "bitcoinjs-lib": "^6.1.6", + "bs58": "^5.0.0", "cors": "^2.8.5", "dayjs": "^1.11.10", + "ed25519-hd-key": "^1.3.0", "ethereum-blockies-base64": "^1.0.2", "ethers": "^5.7.2", "firebase": "^10.7.1", @@ -60,7 +68,9 @@ "react-router": "^5.3.4", "react-router-dom": "^5.3.4", "react-use-gesture": "^9.1.3", + "reflect-metadata": "^0.1.14", "reselect": "^5.0.0", + "stream-browserify": "^3.0.0", "swagger-ui-react": "^5.10.5", "swr": "^2.2.4", "uuid": "^9.0.1" @@ -75,6 +85,7 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "@types/bs58": "^4.0.4", "@types/cors": "^2.8.17", "@types/jest": "^27.5.2", "@types/node": "^16.18.36", @@ -138,7 +149,6 @@ }, "node_modules/@0xsquid/widget": { "version": "1.6.27", - "resolved": "https://registry.npmjs.org/@0xsquid/widget/-/widget-1.6.27.tgz", "integrity": "sha512-W6+xAiOSz3BS1vKGXzcriVzYvgh/QqMJTOpEwPwJesf+JGuLeq/CzF5Ycljt4AdRy7gOep2Z453+EJ50El2Utw==", "dependencies": { "@0xsquid/sdk": "1.14.8", @@ -201,6 +211,15 @@ "xstream": "^11.14.0" } }, + "node_modules/@0xsquid/widget/node_modules/cosmjs-types": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.8.0.tgz", + "integrity": "sha512-Q2Mj95Fl0PYMWEhA2LuGEIhipF7mQwd9gTQ85DdP9jjjopeoGaDxvmPa5nakNzsq7FnO1DMTatXTAx6bxMH7Lg==", + "dependencies": { + "long": "^4.0.0", + "protobufjs": "~6.11.2" + } + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -212,7 +231,6 @@ }, "node_modules/@aave/contract-helpers": { "version": "1.21.1", - "resolved": "https://registry.npmjs.org/@aave/contract-helpers/-/contract-helpers-1.21.1.tgz", "integrity": "sha512-sp5m0KZ0lInlBfTfZnbR7yh0jG1Q+5wvM42H7JBMOdjxb1jWKWkAWg0DFQJzXlDsBo+bk6BS/sBHa4Eql0IA8A==", "dependencies": { "isomorphic-unfetch": "^3.1.0" @@ -226,7 +244,6 @@ }, "node_modules/@aave/math-utils": { "version": "1.21.1", - "resolved": "https://registry.npmjs.org/@aave/math-utils/-/math-utils-1.21.1.tgz", "integrity": "sha512-oFZafJ5MeNtiqgJBEsmvvGlFtdFauWX0wI9B+wikqT//LVc0PYS0IX49UItv6yoTcd0I7IDq3Zv8V47e3lhBOw==", "peerDependencies": { "bignumber.js": "^9.x", @@ -258,7 +275,6 @@ }, "node_modules/@avalabs/avalanchejs": { "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@avalabs/avalanchejs/-/avalanchejs-3.17.0.tgz", "integrity": "sha512-Fv5Vu5hwzPNN4e7ER9TFIFU9msOZa+C28BcZUVW5TnabpglOpL46hA3iihRGTDRx1Y95cra29uctPqDRnVTMpQ==", "dependencies": { "assert": "2.0.0", @@ -315,6 +331,25 @@ "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.3.tgz", "integrity": "sha512-/xJX0/VTPcbc5xQE2VUP91y1xN8q/rDfhEzLm+vLc3hYvb5+qHCnpJRuFcrKn63zumK/sCwYYzhG8HP78JYSTA==" }, + "node_modules/@avalabs/avalanchejs/node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@avalabs/avalanchejs/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/@avalabs/avalanchejs/node_modules/ethers": { "version": "6.0.8", "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.0.8.tgz", @@ -367,774 +402,782 @@ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@aws-crypto/crc32c": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32c/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "dependencies": { - "tslib": "^1.11.1" + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@aws-crypto/sha1-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", - "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dependencies": { - "tslib": "^1.11.1" + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "dependencies": { "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.504.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.504.0.tgz", - "integrity": "sha512-J8xPsnk7EDwalFSaDxPFNT2+x99nG2uQTpsLXAV3bWbT1nD/JZ+fase9GqxM11v6WngzqRvTQg26ljMn5hQSKA==", - "dependencies": { - "@aws-crypto/sha1-browser": "3.0.0", - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.504.0", - "@aws-sdk/core": "3.496.0", - "@aws-sdk/credential-provider-node": "3.504.0", - "@aws-sdk/middleware-bucket-endpoint": "3.502.0", - "@aws-sdk/middleware-expect-continue": "3.502.0", - "@aws-sdk/middleware-flexible-checksums": "3.502.0", - "@aws-sdk/middleware-host-header": "3.502.0", - "@aws-sdk/middleware-location-constraint": "3.502.0", - "@aws-sdk/middleware-logger": "3.502.0", - "@aws-sdk/middleware-recursion-detection": "3.502.0", - "@aws-sdk/middleware-sdk-s3": "3.502.0", - "@aws-sdk/middleware-signing": "3.502.0", - "@aws-sdk/middleware-ssec": "3.502.0", - "@aws-sdk/middleware-user-agent": "3.502.0", - "@aws-sdk/region-config-resolver": "3.502.0", - "@aws-sdk/signature-v4-multi-region": "3.502.0", - "@aws-sdk/types": "3.502.0", - "@aws-sdk/util-endpoints": "3.502.0", - "@aws-sdk/util-user-agent-browser": "3.502.0", - "@aws-sdk/util-user-agent-node": "3.502.0", - "@aws-sdk/xml-builder": "3.496.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/eventstream-serde-browser": "^2.1.1", - "@smithy/eventstream-serde-config-resolver": "^2.1.1", - "@smithy/eventstream-serde-node": "^2.1.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-blob-browser": "^2.1.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/hash-stream-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/md5-js": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-stream": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "@smithy/util-waiter": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.598.0.tgz", + "integrity": "sha512-UMxftsgF6j1vzm4Qd9vQJHs2he1NQCWWV8esZfmNFq23OpUC2BPMxkqi13ZQ9tnTAZUNs7yFT/x4Zsi/wpRZEw==", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.598.0", + "@aws-sdk/client-sts": "3.598.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.598.0", + "@aws-sdk/middleware-bucket-endpoint": "3.598.0", + "@aws-sdk/middleware-expect-continue": "3.598.0", + "@aws-sdk/middleware-flexible-checksums": "3.598.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-location-constraint": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-sdk-s3": "3.598.0", + "@aws-sdk/middleware-signing": "3.598.0", + "@aws-sdk/middleware-ssec": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/signature-v4-multi-region": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@aws-sdk/xml-builder": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/eventstream-serde-browser": "^3.0.2", + "@smithy/eventstream-serde-config-resolver": "^3.0.1", + "@smithy/eventstream-serde-node": "^3.0.2", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-blob-browser": "^3.1.0", + "@smithy/hash-node": "^3.0.1", + "@smithy/hash-stream-node": "^3.1.0", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/md5-js": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-stream": "^3.0.2", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.0.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.502.0.tgz", - "integrity": "sha512-OZAYal1+PQgUUtWiHhRayDtX0OD+XpXHKAhjYgEIPbyhQaCMp3/Bq1xDX151piWXvXqXLJHFKb8DUEqzwGO9QA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.496.0", - "@aws-sdk/middleware-host-header": "3.502.0", - "@aws-sdk/middleware-logger": "3.502.0", - "@aws-sdk/middleware-recursion-detection": "3.502.0", - "@aws-sdk/middleware-user-agent": "3.502.0", - "@aws-sdk/region-config-resolver": "3.502.0", - "@aws-sdk/types": "3.502.0", - "@aws-sdk/util-endpoints": "3.502.0", - "@aws-sdk/util-user-agent-browser": "3.502.0", - "@aws-sdk/util-user-agent-node": "3.502.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz", + "integrity": "sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.504.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.504.0.tgz", - "integrity": "sha512-ODA33/nm2srhV08EW0KZAP577UgV0qjyr7Xp2yEo8MXWL4ZqQZprk1c+QKBhjr4Djesrm0VPmSD/np0mtYP68A==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.504.0", - "@aws-sdk/core": "3.496.0", - "@aws-sdk/middleware-host-header": "3.502.0", - "@aws-sdk/middleware-logger": "3.502.0", - "@aws-sdk/middleware-recursion-detection": "3.502.0", - "@aws-sdk/middleware-signing": "3.502.0", - "@aws-sdk/middleware-user-agent": "3.502.0", - "@aws-sdk/region-config-resolver": "3.502.0", - "@aws-sdk/types": "3.502.0", - "@aws-sdk/util-endpoints": "3.502.0", - "@aws-sdk/util-user-agent-browser": "3.502.0", - "@aws-sdk/util-user-agent-node": "3.502.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.598.0.tgz", + "integrity": "sha512-jfdH1pAO9Tt8Nkta/JJLoUnwl7jaRdxToQTJfUtE+o3+0JP5sA4LfC2rBkJSWcU5BdAA+kyOs5Lv776DlN04Vg==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sts": "3.598.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.598.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.504.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.504.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.504.0.tgz", - "integrity": "sha512-IESs8FkL7B/uY+ml4wgoRkrr6xYo4PizcNw6JX17eveq1gRBCPKeGMjE6HTDOcIYZZ8rqz/UeuH3JD4UhrMOnA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.496.0", - "@aws-sdk/middleware-host-header": "3.502.0", - "@aws-sdk/middleware-logger": "3.502.0", - "@aws-sdk/middleware-recursion-detection": "3.502.0", - "@aws-sdk/middleware-user-agent": "3.502.0", - "@aws-sdk/region-config-resolver": "3.502.0", - "@aws-sdk/types": "3.502.0", - "@aws-sdk/util-endpoints": "3.502.0", - "@aws-sdk/util-user-agent-browser": "3.502.0", - "@aws-sdk/util-user-agent-node": "3.502.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.598.0.tgz", + "integrity": "sha512-bXhz/cHL0iB9UH9IFtMaJJf4F8mV+HzncETCRFzZ9SyUMt5rP9j8A7VZknqGYSx/6mI8SsB1XJQkWSbhn6FiSQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.598.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.598.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.504.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/core": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.496.0.tgz", - "integrity": "sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A==", - "dependencies": { - "@smithy/core": "^1.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.598.0.tgz", + "integrity": "sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g==", + "dependencies": { + "@smithy/core": "^2.2.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/signature-v4": "^3.1.0", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.502.0.tgz", - "integrity": "sha512-KIB8Ae1Z7domMU/jU4KiIgK4tmYgvuXlhR54ehwlVHxnEoFPoPuGHFZU7oFn79jhhSLUFQ1lRYMxP0cEwb7XeQ==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz", + "integrity": "sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.503.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.503.1.tgz", - "integrity": "sha512-rTdlFFGoPPFMF2YjtlfRuSgKI+XsF49u7d98255hySwhsbwd3Xp+utTTPquxP+CwDxMHbDlI7NxDzFiFdsoZug==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz", + "integrity": "sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-stream": "^2.1.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/util-stream": "^3.0.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.504.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.504.0.tgz", - "integrity": "sha512-ODICLXfr8xTUd3wweprH32Ge41yuBa+u3j0JUcLdTUO1N9ldczSMdo8zOPlP0z4doqD3xbnqMkjNQWgN/Q+5oQ==", - "dependencies": { - "@aws-sdk/client-sts": "3.504.0", - "@aws-sdk/credential-provider-env": "3.502.0", - "@aws-sdk/credential-provider-process": "3.502.0", - "@aws-sdk/credential-provider-sso": "3.504.0", - "@aws-sdk/credential-provider-web-identity": "3.504.0", - "@aws-sdk/types": "3.502.0", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz", + "integrity": "sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.598.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.504.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.504.0.tgz", - "integrity": "sha512-6+V5hIh+tILmUjf2ZQWQINR3atxQVgH/bFrGdSR/sHSp/tEgw3m0xWL3IRslWU1e4/GtXrfg1iYnMknXy68Ikw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.502.0", - "@aws-sdk/credential-provider-http": "3.503.1", - "@aws-sdk/credential-provider-ini": "3.504.0", - "@aws-sdk/credential-provider-process": "3.502.0", - "@aws-sdk/credential-provider-sso": "3.504.0", - "@aws-sdk/credential-provider-web-identity": "3.504.0", - "@aws-sdk/types": "3.502.0", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.598.0.tgz", + "integrity": "sha512-sXTlqL5I/awlF9Dg2MQ17SfrEaABVnsj2mf4jF5qQrIRhfbvQOIYdEqdy8Rn1AWlJMz/N450SGzc0XJ5owxxqw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-ini": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.502.0.tgz", - "integrity": "sha512-fJJowOjQ4infYQX0E1J3xFVlmuwEYJAFk0Mo1qwafWmEthsBJs+6BR2RiWDELHKrSK35u4Pf3fu3RkYuCtmQFw==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz", + "integrity": "sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.504.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.504.0.tgz", - "integrity": "sha512-4MgH2or2SjPzaxM08DCW+BjaX4DSsEGJlicHKmz6fh+w9JmLh750oXcTnbvgUeVz075jcs6qTKjvUcsdGM/t8Q==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz", + "integrity": "sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA==", "dependencies": { - "@aws-sdk/client-sso": "3.502.0", - "@aws-sdk/token-providers": "3.504.0", - "@aws-sdk/types": "3.502.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/client-sso": "3.598.0", + "@aws-sdk/token-providers": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.504.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.504.0.tgz", - "integrity": "sha512-L1ljCvGpIEFdJk087ijf2ohg7HBclOeB1UgBxUBBzf4iPRZTQzd2chGaKj0hm2VVaXz7nglswJeURH5PFcS5oA==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz", + "integrity": "sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w==", "dependencies": { - "@aws-sdk/client-sts": "3.504.0", - "@aws-sdk/types": "3.502.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.598.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.502.0.tgz", - "integrity": "sha512-mUSP2DUcjhO5zM2b21CvZ9AqwI8DaAeZA6NYHOxWGTV9BUxHcdGWXEjDkcVj9CQ0gvNwTtw6B5L/q52rVAnZbw==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.598.0.tgz", + "integrity": "sha512-PM7BcFfGUSkmkT6+LU9TyJiB4S8yI7dfuKQDwK5ZR3P7MKaK4Uj4yyDiv0oe5xvkF6+O2+rShj+eh8YuWkOZ/Q==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@aws-sdk/util-arn-parser": "3.495.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.502.0.tgz", - "integrity": "sha512-DxfAuBVuPSt8as9xP57o8ks6ySVSjwO2NNNAdpLwk4KhEAPYEpHlf2yWYorYLrS+dDmwfYgOhRNoguuBdCu6ow==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.598.0.tgz", + "integrity": "sha512-ZuHW18kaeHR8TQyhEOYMr8VwiIh0bMvF7J1OTqXHxDteQIavJWA3CbfZ9sgS4XGtrBZDyHJhjZKeCfLhN2rq3w==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.502.0.tgz", - "integrity": "sha512-kCt2zQDFumz/LnJJJOSd2GW4dr8oT8YMJKgxC/pph3aRXoSHXRwhrMbFnQ8swEE9vjywxtcED8sym0b0tNhhoA==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.598.0.tgz", + "integrity": "sha512-xukAzds0GQXvMEY9G6qt+CzwVzTx8NyKKh04O2Q+nOch6QQ8Rs+2kTRy3Z4wQmXq2pK9hlOWb5nXA7HWpmz6Ng==", "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.502.0", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-sdk/types": "3.598.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.502.0.tgz", - "integrity": "sha512-EjnG0GTYXT/wJBmm5/mTjDcAkzU8L7wQjOzd3FTXuTCNNyvAvwrszbOj5FlarEw5XJBbQiZtBs+I5u9+zy560w==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz", + "integrity": "sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.502.0.tgz", - "integrity": "sha512-fLRwPuTZvEWQkPjys03m3D6tYN4kf7zU6+c8mJxwvEg+yfBuv2RBsbd+Vn2bTisUjXvIg1kyBzONlpHoIyFneg==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.598.0.tgz", + "integrity": "sha512-8oybQxN3F1ISOMULk7JKJz5DuAm5hCUcxMW9noWShbxTJuStNvuHf/WLUzXrf8oSITyYzIHPtf8VPlKR7I3orQ==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.502.0.tgz", - "integrity": "sha512-FDyv6K4nCoHxbjLGS2H8ex8I0KDIiu4FJgVRPs140ZJy6gE5Pwxzv6YTzZGLMrnqcIs9gh065Lf6DjwMelZqaw==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz", + "integrity": "sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.502.0.tgz", - "integrity": "sha512-hvbyGJbxeuezxOu8VfFmcV4ql1hKXLxHTe5FNYfEBat2KaZXVhc1Hg+4TvB06/53p+E8J99Afmumkqbxs2esUA==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz", + "integrity": "sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.502.0.tgz", - "integrity": "sha512-GbGugrfyL5bNA/zw8iQll92yXBONfWSC8Ns00DtkOU1saPXp4/7WHtyyZGYdvPa73T1IsuZy9egpoYRBmRcd5Q==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.598.0.tgz", + "integrity": "sha512-5AGtLAh9wyK6ANPYfaKTqJY1IFJyePIxsEbxa7zS6REheAqyVmgJFaGu3oQ5XlxfGr5Uq59tFTRkyx26G1HkHA==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@aws-sdk/util-arn-parser": "3.495.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/signature-v4": "^3.1.0", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.502.0.tgz", - "integrity": "sha512-4hF08vSzJ7L6sB+393gOFj3s2N6nLusYS0XrMW6wYNFU10IDdbf8Z3TZ7gysDJJHEGQPmTAesPEDBsasGWcMxg==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.598.0.tgz", + "integrity": "sha512-XKb05DYx/aBPqz6iCapsCbIl8aD8EihTuPCs51p75QsVfbQoVr4TlFfIl5AooMSITzojdAQqxt021YtvxjtxIQ==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/signature-v4": "^3.1.0", + "@smithy/types": "^3.1.0", + "@smithy/util-middleware": "^3.0.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.502.0.tgz", - "integrity": "sha512-1nidVTIba6/aVjjzD/WNqWdzSyTrXOHO3Ddz2MGD8S1yGSrYz4iYaq4Bm/uosfdr8B1L0Ws0pjdRXrNfzSw/DQ==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.598.0.tgz", + "integrity": "sha512-f0p2xP8IC1uJ5e/tND1l81QxRtRFywEdnbtKCE0H6RSn4UIt2W3Dohe1qQDbnh27okF0PkNW6BJGdSAz3p7qbA==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.502.0.tgz", - "integrity": "sha512-TxbBZbRiXPH0AUxegqiNd9aM9zNSbfjtBs5MEfcBsweeT/B2O7K1EjP9+CkB8Xmk/5FLKhAKLr19b1TNoE27rw==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz", + "integrity": "sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@aws-sdk/util-endpoints": "3.502.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.502.0.tgz", - "integrity": "sha512-mxmsX2AGgnSM+Sah7mcQCIneOsJQNiLX0COwEttuf8eO+6cLMAZvVudH3BnWTfea4/A9nuri9DLCqBvEmPrilg==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz", + "integrity": "sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.502.0.tgz", - "integrity": "sha512-NpOXtUXH0ZAgnyI3Y3s2fPrgwbsWoNMwdoXdFZvH0eDzzX80tim7Yuy6dzVA5zrxSzOYs1xjcOhM+4CmM0QZiw==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.598.0.tgz", + "integrity": "sha512-1r/EyTrO1gSa1FirnR8V7mabr7gk+l+HkyTI0fcTSr8ucB7gmYyW6WjkY8JCz13VYHFK62usCEDS7yoJoJOzTA==", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.502.0", - "@aws-sdk/types": "3.502.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/middleware-sdk-s3": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/signature-v4": "^3.1.0", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.504.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.504.0.tgz", - "integrity": "sha512-YIJWWsZi2ClUiILS1uh5L6VjmCUSTI6KKMuL9DkGjYqJ0aI6M8bd8fT9Wm7QmXCyjcArTgr/Atkhia4T7oKvzQ==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz", + "integrity": "sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA==", "dependencies": { - "@aws-sdk/client-sso-oidc": "3.504.0", - "@aws-sdk/types": "3.502.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.598.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.502.0.tgz", - "integrity": "sha512-M0DSPYe/gXhwD2QHgoukaZv5oDxhW3FfvYIrJptyqUq3OnPJBcDbihHjrE0PBtfh/9kgMZT60/fQ2NVFANfa2g==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.598.0.tgz", + "integrity": "sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.495.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz", - "integrity": "sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg==", + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", + "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.502.0.tgz", - "integrity": "sha512-6LKFlJPp2J24r1Kpfoz5ESQn+1v5fEjDB3mtUKRdpwarhm3syu7HbKlHCF3KbcCOyahobvLvhoedT78rJFEeeg==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz", + "integrity": "sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/types": "^2.9.1", - "@smithy/util-endpoints": "^1.1.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", + "@smithy/util-endpoints": "^2.0.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.495.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", - "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==", + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.502.0.tgz", - "integrity": "sha512-v8gKyCs2obXoIkLETAeEQ3AM+QmhHhst9xbM1cJtKUGsRlVIak/XyyD+kVE6kmMm1cjfudHpHKABWk9apQcIZQ==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz", + "integrity": "sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/types": "^2.9.1", + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.502.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.502.0.tgz", - "integrity": "sha512-9RjxpkGZKbTdl96tIJvAo+vZoz4P/cQh36SBUt9xfRfW0BtsaLyvSrvlR5wyUYhvRcC12Axqh/8JtnAPq//+Vw==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz", + "integrity": "sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A==", "dependencies": { - "@aws-sdk/types": "3.502.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.598.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -1145,137 +1188,126 @@ } } }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dependencies": { - "tslib": "^2.3.1" - } - }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.496.0.tgz", - "integrity": "sha512-GvEjh537IIeOw1ZkZuB37sV12u+ipS5Z1dwjEC/HAvhl5ac23ULtTr1/n+U1gLNN+BAKSWjKiQ2ksj8DiUzeyw==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.598.0.tgz", + "integrity": "sha512-ZIa2RK7CHFTZ4gwK77WRtsZ6vF7xwRXxJ8KQIxK2duhoTVcn0xYxpFLdW9WZZZvdP9GIF3Loqvf8DRdeU5Jc7Q==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dependencies": { - "color-convert": "^1.9.0" + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/types": "^7.24.7" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/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==", + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, "engines": { - "node": ">=0.8.0" + "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dependencies": { - "has-flag": "^3.0.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -1346,10 +1378,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1358,9 +1389,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", - "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1380,13 +1411,54 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1395,10 +1467,29 @@ }, "node_modules/@bgd-labs/aave-address-book": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/@bgd-labs/aave-address-book/-/aave-address-book-2.19.0.tgz", "integrity": "sha512-JrZOZqzunJqFe4+/ZpL3vD7ddtGjjlBRCnMeQ68egNBAB2CYXvkXj6pSZLJBWklkoLgh17or1IdAQHTMYtBSsg==" }, - "node_modules/@braintree/sanitize-url": { + "node_modules/@bitcoinerlab/secp256k1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@bitcoinerlab/secp256k1/-/secp256k1-1.1.1.tgz", + "integrity": "sha512-uhjW51WfVLpnHN7+G0saDcM/k9IqcyTbZ+bDgLF3AX8V/a3KXSE9vn7UPBrcdU72tp0J4YPR7BHp2m7MLAZ/1Q==", + "dependencies": { + "@noble/hashes": "^1.1.5", + "@noble/secp256k1": "^1.7.1" + } + }, + "node_modules/@bitcoinerlab/secp256k1/node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@braintree/sanitize-url": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==" @@ -1441,6 +1532,14 @@ "follow-redirects": "^1.14.7" } }, + "node_modules/@bundlr-network/client/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/@bundlr-network/client/node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -1451,7 +1550,6 @@ }, "node_modules/@capacitor-community/barcode-scanner": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@capacitor-community/barcode-scanner/-/barcode-scanner-4.0.1.tgz", "integrity": "sha512-acuhDU2mqskSeCIQMc5TGNnDszXXs4IqEES+3C2JDiq+MkJMTr+B2Dhq4k55hlkRFMOumMhlnbr2R9G6qyFPhw==", "dependencies": { "@zxing/browser": "^0.1.3", @@ -1463,7 +1561,6 @@ }, "node_modules/@capacitor/android": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-5.6.0.tgz", "integrity": "sha512-6O7xV6K6c8WvQzKxOe7fnhRyoVpS3TNDXy1FyfhvOvclBvu+1JddSdFvW4e4dSL60s2c00sCzNRgYhm+cn0/dQ==", "peerDependencies": { "@capacitor/core": "^5.6.0" @@ -1471,7 +1568,6 @@ }, "node_modules/@capacitor/cli": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-5.6.0.tgz", "integrity": "sha512-h2HLkjPn+hd95F0iOlSWROW15kxj/0qNuzXgktSNQ55Z3dCeWmelgfkbYwjo0eqiunv5zNa31H0YvrpnIVdKEA==", "dev": true, "dependencies": { @@ -1503,7 +1599,6 @@ }, "node_modules/@capacitor/core": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.6.0.tgz", "integrity": "sha512-xJhCOUGPHw0QYDA3YH+CmL6qiV9DH4Ij3yPxSenymjrtLuXI197u9ddCZwGEwgVIkh9kGZBBKzsNkn89SZ2gdQ==", "dependencies": { "tslib": "^2.1.0" @@ -1511,7 +1606,6 @@ }, "node_modules/@capacitor/dialog": { "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@capacitor/dialog/-/dialog-5.0.7.tgz", "integrity": "sha512-lWNBHXOtt7V+Jk4YiShvnb+/4Ouo+yF1NKTOFpQXfVbsjrmmlXhd3ZSXSgMukEtyr0wr0phFUKDyamY08cYBOg==", "peerDependencies": { "@capacitor/core": "^5.0.0" @@ -1519,7 +1613,6 @@ }, "node_modules/@capacitor/haptics": { "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-5.0.7.tgz", "integrity": "sha512-/j+7Qa4BxQA5aOU43cwXuiudfSXfoHFsAVfcehH5DkSjxLykZKWHEuE4uFJXqdkSIbAHjS37D0Sde6ENP6G/MA==", "peerDependencies": { "@capacitor/core": "^5.0.0" @@ -1527,7 +1620,6 @@ }, "node_modules/@capacitor/ios": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-5.6.0.tgz", "integrity": "sha512-iswpOcD5us10hIF5zS4w6k/ekW0A+2pXhDV4AHOBXR4VOkOMI8QJaavgl9JvZ/NVvVNJdEN2rOKCMNh4AH08sw==", "peerDependencies": { "@capacitor/core": "^5.6.0" @@ -1535,7 +1627,6 @@ }, "node_modules/@capacitor/status-bar": { "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-5.0.6.tgz", "integrity": "sha512-7od8CxsBnot1XMK3IeOkproFL4hgoKoWAc3pwUvmDOkQsXoxwQm4SR9mLwQavv1XfxtHbFV9Ukd7FwMxOPSViw==", "peerDependencies": { "@capacitor/core": "^5.0.0" @@ -1606,6 +1697,14 @@ "node": ">=11" } }, + "node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/@coral-xyz/anchor/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -1789,9 +1888,9 @@ } }, "node_modules/@cosmjs/socket/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -1810,7 +1909,6 @@ }, "node_modules/@cosmjs/stargate": { "version": "0.32.2", - "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.2.tgz", "integrity": "sha512-AsJa29fT7Jd4xt9Ai+HMqhyj7UQu7fyYKdXj/8+/9PD74xe6lZSYhQPcitUmMLJ1ckKPgXSk5Dd2LbsQT0IhZg==", "dependencies": { "@confio/ics23": "^0.6.8", @@ -1837,19 +1935,42 @@ } }, "node_modules/@cosmjs/stargate/node_modules/@cosmjs/crypto": { - "version": "0.32.2", - "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.32.2.tgz", - "integrity": "sha512-RuxrYKzhrPF9g6NmU7VEq++Hn1vZJjqqJpZ9Tmw9lOYOV8BUsv+j/0BE86kmWi7xVJ7EwxiuxYsKuM8IR18CIA==", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.32.3.tgz", + "integrity": "sha512-niQOWJHUtlJm2GG4F00yGT7sGPKxfUwz+2qQ30uO/E3p58gOusTcH2qjiJNVxb8vScYJhFYFqpm/OA/mVqoUGQ==", "dependencies": { - "@cosmjs/encoding": "^0.32.2", - "@cosmjs/math": "^0.32.2", - "@cosmjs/utils": "^0.32.2", + "@cosmjs/encoding": "^0.32.3", + "@cosmjs/math": "^0.32.3", + "@cosmjs/utils": "^0.32.3", "@noble/hashes": "^1", "bn.js": "^5.2.0", "elliptic": "^6.5.4", "libsodium-wrappers-sumo": "^0.7.11" } }, + "node_modules/@cosmjs/stargate/node_modules/@cosmjs/crypto/node_modules/@cosmjs/encoding": { + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.3.tgz", + "integrity": "sha512-p4KF7hhv8jBQX3MkB3Defuhz/W0l3PwWVYU2vkVuBJ13bJcXyhU9nJjiMkaIv+XP+W2QgRceqNNgFUC5chNR7w==", + "dependencies": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "node_modules/@cosmjs/stargate/node_modules/@cosmjs/crypto/node_modules/@cosmjs/math": { + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.3.tgz", + "integrity": "sha512-amumUtZs8hCCnV+lSBaJIiZkGabQm22QGg/IotYrhcmoOEOjt82n7hMNlNXRs7V6WLMidGrGYcswB5zcmp0Meg==", + "dependencies": { + "bn.js": "^5.2.0" + } + }, + "node_modules/@cosmjs/stargate/node_modules/@cosmjs/crypto/node_modules/@cosmjs/utils": { + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.32.3.tgz", + "integrity": "sha512-WCZK4yksj2hBDz4w7xFZQTRZQ/RJhBX26uFHmmQFIcNUUVAihrLO+RerqJgk0dZqC42wstM9pEUQGtPmLcIYvg==" + }, "node_modules/@cosmjs/stargate/node_modules/@cosmjs/encoding": { "version": "0.32.2", "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.2.tgz", @@ -1861,11 +1982,19 @@ } }, "node_modules/@cosmjs/stargate/node_modules/@cosmjs/json-rpc": { - "version": "0.32.2", - "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.32.2.tgz", - "integrity": "sha512-lan2lOgmz4yVE/HR8eCOSiII/1OudIulk8836koyIDCsPEpt6eKBuctnAD168vABGArKccLAo7Mr2gy9nrKrOQ==", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.32.3.tgz", + "integrity": "sha512-JwFRWZa+Y95KrAG8CuEbPVOSnXO2uMSEBcaAB/FBU3Mo4jQnDoUjXvt3vwtFWxfAytrWCn1I4YDFaOAinnEG/Q==", + "dependencies": { + "@cosmjs/stream": "^0.32.3", + "xstream": "^11.14.0" + } + }, + "node_modules/@cosmjs/stargate/node_modules/@cosmjs/json-rpc/node_modules/@cosmjs/stream": { + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.32.3.tgz", + "integrity": "sha512-J2zVWDojkynYifAUcRmVczzmp6STEpyiAARq0rSsviqjreGIfspfuws/8rmkPa6qQBZvpQOBQCm2HyZZwYplIw==", "dependencies": { - "@cosmjs/stream": "^0.32.2", "xstream": "^11.14.0" } }, @@ -1891,16 +2020,32 @@ } }, "node_modules/@cosmjs/stargate/node_modules/@cosmjs/socket": { - "version": "0.32.2", - "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.32.2.tgz", - "integrity": "sha512-Qc8jaw4uSBJm09UwPgkqe3g9TBFx4ZR9HkXpwT6Z9I+6kbLerXPR0Gy3NSJFSUgxIfTpO8O1yqoWAyf0Ay17Mw==", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.32.3.tgz", + "integrity": "sha512-F2WwNmaUPdZ4SsH6Uyreq3wQk7jpaEkb3wfOP951f5Jt6HCW/PxbxhKzHkAAf6+Sqks6SPhkbWoE8XaZpjL2KA==", "dependencies": { - "@cosmjs/stream": "^0.32.2", + "@cosmjs/stream": "^0.32.3", "isomorphic-ws": "^4.0.1", "ws": "^7", "xstream": "^11.14.0" } }, + "node_modules/@cosmjs/stargate/node_modules/@cosmjs/socket/node_modules/@cosmjs/stream": { + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.32.3.tgz", + "integrity": "sha512-J2zVWDojkynYifAUcRmVczzmp6STEpyiAARq0rSsviqjreGIfspfuws/8rmkPa6qQBZvpQOBQCm2HyZZwYplIw==", + "dependencies": { + "xstream": "^11.14.0" + } + }, + "node_modules/@cosmjs/stargate/node_modules/@cosmjs/stream": { + "version": "0.32.2", + "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.32.2.tgz", + "integrity": "sha512-gpCufLfHAD8Zp1ZKge7AHbDf4RA0TZp66wZY6JaQR5bSiEF2Drjtp4mwXZPGejtaUMnaAgff3LrUzPJfKYdQwg==", + "dependencies": { + "xstream": "^11.14.0" + } + }, "node_modules/@cosmjs/stargate/node_modules/@cosmjs/tendermint-rpc": { "version": "0.32.2", "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.2.tgz", @@ -1924,15 +2069,20 @@ "integrity": "sha512-Gg5t+eR7vPJMAmhkFt6CZrzPd0EKpAslWwk5rFVYZpJsM8JG5KT9XQ99hgNM3Ov6ScNoIWbXkpX27F6A9cXR4Q==" }, "node_modules/@cosmjs/stargate/node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, + "node_modules/@cosmjs/stargate/node_modules/axios/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/@cosmjs/stargate/node_modules/bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", @@ -1952,9 +2102,9 @@ } }, "node_modules/@cosmjs/stargate/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -1971,14 +2121,6 @@ } } }, - "node_modules/@cosmjs/stream": { - "version": "0.32.2", - "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.32.2.tgz", - "integrity": "sha512-gpCufLfHAD8Zp1ZKge7AHbDf4RA0TZp66wZY6JaQR5bSiEF2Drjtp4mwXZPGejtaUMnaAgff3LrUzPJfKYdQwg==", - "dependencies": { - "xstream": "^11.14.0" - } - }, "node_modules/@cosmjs/tendermint-rpc": { "version": "0.31.3", "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.31.3.tgz", @@ -2041,10 +2183,19 @@ "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@cyberlab/cyber-account": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@cyberlab/cyber-account/-/cyber-account-2.3.1.tgz", - "integrity": "sha512-m53xZbyn2CuhY+mABtBb0cTpHDQkjoEJk/IeufHnei9qyrZLA26trzs7/X9X+96Mqd0qm88JTwvAroftFwDsIw==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@cyberlab/cyber-account/-/cyber-account-2.3.4.tgz", + "integrity": "sha512-AVwQo5i920hsHDPO5JsJ1VWYKqTzGqoQO0VK5ZRrv6QwzQYoSwbR8giS/6uWdSET/jUYWkGxzH16kAnqLhpoog==", "dependencies": { "viem": "^1.17.2" } @@ -2343,9 +2494,9 @@ "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", "dependencies": { "@emotion/memoize": "^0.8.1" } @@ -2379,9 +2530,9 @@ } }, "node_modules/@emotion/serialize": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", - "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", + "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", "dependencies": { "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", @@ -2440,144 +2591,515 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, - "node_modules/@endo/env-options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@endo/env-options/-/env-options-0.1.4.tgz", - "integrity": "sha512-Ol8ct0aW8VK1ZaqntnUJfrYT59P6Xn36XPbHzkqQhsYkpudKDn5ILYEwGmSO/Ff+XJjv/pReNI0lhOyyrDa9mg==" + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "peer": true, + "engines": { + "node": ">=12" + } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=12" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "dev": true, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/@ethereumjs/rlp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", - "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", - "bin": { - "rlp": "bin/rlp" - }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, "engines": { - "node": ">=14" + "node": ">=12" } }, - "node_modules/@ethereumjs/tx": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", - "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", - "dependencies": { - "@ethereumjs/common": "^3.2.0", - "@ethereumjs/rlp": "^4.0.1", - "@ethereumjs/util": "^8.1.0", - "ethereum-cryptography": "^2.0.0" - }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, "engines": { - "node": ">=14" + "node": ">=12" } }, - "node_modules/@ethereumjs/tx/node_modules/@ethereumjs/common": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", - "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", - "dependencies": { - "@ethereumjs/util": "^8.1.0", - "crc-32": "^1.2.0" + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/@ethereumjs/tx/node_modules/@scure/bip32": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", - "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, "dependencies": { - "@noble/curves": "~1.3.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", + "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", + "dependencies": { + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/tx/node_modules/@ethereumjs/common": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", + "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" + } + }, + "node_modules/@ethereumjs/tx/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/tx/node_modules/@scure/base": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz", + "integrity": "sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/tx/node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@ethereumjs/tx/node_modules/@scure/bip39": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", - "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dependencies": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@ethereumjs/tx/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.0.tgz", + "integrity": "sha512-hsm9JhfytIf8QME/3B7j4bc8V+VdTU+Vas1aJlvIS96ffoNAosudXvGoEvWmc7QZYdkC8mrMJz9r0fcbw7GyCA==", "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" + "@noble/curves": "1.4.0", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, "node_modules/@ethereumjs/util": { @@ -2593,40 +3115,59 @@ "node": ">=14" } }, + "node_modules/@ethereumjs/util/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/base": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz", + "integrity": "sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", - "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dependencies": { - "@noble/curves": "~1.3.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", - "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dependencies": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.0.tgz", + "integrity": "sha512-hsm9JhfytIf8QME/3B7j4bc8V+VdTU+Vas1aJlvIS96ffoNAosudXvGoEvWmc7QZYdkC8mrMJz9r0fcbw7GyCA==", "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" + "@noble/curves": "1.4.0", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, "node_modules/@ethersproject/abi": { @@ -3185,6 +3726,25 @@ "hash.js": "1.1.7" } }, + "node_modules/@ethersproject/signing-key/node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@ethersproject/signing-key/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/@ethersproject/solidity": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", @@ -3351,22 +3911,22 @@ } }, "node_modules/@fastify/busboy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", - "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "engines": { "node": ">=14" } }, "node_modules/@firebase/analytics": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.0.tgz", - "integrity": "sha512-Locv8gAqx0e+GX/0SI3dzmBY5e9kjVDtD+3zCFLJ0tH2hJwuCAiL+5WkHuxKj92rqQj/rvkBUCfA1ewlX2hehg==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/installations": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.4.tgz", + "integrity": "sha512-OJEl/8Oye/k+vJ1zV/1L6eGpc1XzAj+WG2TPznJ7PszL7sOFLBXkL9IjHfOCGDGpXeO3btozy/cYUqv4zgNeHg==", + "dependencies": { + "@firebase/component": "0.6.7", + "@firebase/installations": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3374,14 +3934,14 @@ } }, "node_modules/@firebase/analytics-compat": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.6.tgz", - "integrity": "sha512-4MqpVLFkGK7NJf/5wPEEP7ePBJatwYpyjgJ+wQHQGHfzaCDgntOnl9rL2vbVGGKCnRqWtZDIWhctB86UWXaX2Q==", - "dependencies": { - "@firebase/analytics": "0.10.0", - "@firebase/analytics-types": "0.8.0", - "@firebase/component": "0.6.4", - "@firebase/util": "1.9.3", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.10.tgz", + "integrity": "sha512-ia68RcLQLLMFWrM10JfmFod7eJGwqr4/uyrtzHpTDnxGX/6gNCBTOuxdAbyWIqXI5XmcMQdz9hDijGKOHgDfPw==", + "dependencies": { + "@firebase/analytics": "0.10.4", + "@firebase/analytics-types": "0.8.2", + "@firebase/component": "0.6.7", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3389,30 +3949,30 @@ } }, "node_modules/@firebase/analytics-types": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.0.tgz", - "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==" + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.2.tgz", + "integrity": "sha512-EnzNNLh+9/sJsimsA/FGqzakmrAUKLeJvjRHlg8df1f97NLUlFidk9600y0ZgWOp3CAxn6Hjtk+08tixlUOWyw==" }, "node_modules/@firebase/app": { - "version": "0.9.25", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.25.tgz", - "integrity": "sha512-fX22gL5USXhOK21Hlh3oTeOzQZ6th6S2JrjXNEpBARmwzuUkqmVGVdsOCIFYIsLpK0dQE3o8xZnLrRg5wnzZ/g==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.10.5.tgz", + "integrity": "sha512-iY/fNot+hWPk9sTX8aHMqlcX9ynRvpGkskWAdUZ2eQQdLo8d1hSFYcYNwPv0Q/frGMasw8udKWMcFOEpC9fG8g==", "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", + "@firebase/component": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", "idb": "7.1.1", "tslib": "^2.1.0" } }, "node_modules/@firebase/app-check": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.1.tgz", - "integrity": "sha512-zi3vbM5tb/eGRWyiqf+1DXbxFu9Q07dnm46rweodgUpH9B8svxYkHfNwYWx7F5mjHU70SQDuaojH1We5ws9OKA==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.4.tgz", + "integrity": "sha512-2tjRDaxcM5G7BEpytiDcIl+NovV99q8yEqRMKDbn4J4i/XjjuThuB4S+4PkmTnZiCbdLXQiBhkVxNlUDcfog5Q==", "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", + "@firebase/component": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3420,15 +3980,15 @@ } }, "node_modules/@firebase/app-check-compat": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.8.tgz", - "integrity": "sha512-EaETtChR4UgMokJFw+r6jfcIyCTUZSe0a6ivF37D9MxlG9G3wzK1COyXgxoX96GzXmDPc2aubX4PxCrdVHhrnA==", - "dependencies": { - "@firebase/app-check": "0.8.1", - "@firebase/app-check-types": "0.5.0", - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.11.tgz", + "integrity": "sha512-t01zaH3RJpKEey0nGduz3Is+uSz7Sj4U5nwOV6lWb+86s5xtxpIvBJzu/lKxJfYyfZ29eJwpdjEgT1/lm4iQyA==", + "dependencies": { + "@firebase/app-check": "0.8.4", + "@firebase/app-check-types": "0.5.2", + "@firebase/component": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3436,42 +3996,58 @@ } }, "node_modules/@firebase/app-check-interop-types": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.0.tgz", - "integrity": "sha512-xAxHPZPIgFXnI+vb4sbBjZcde7ZluzPPaSK7Lx3/nmuVk4TjZvnL8ONnkd4ERQKL8WePQySU+pRcWkh8rDf5Sg==" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.2.tgz", + "integrity": "sha512-LMs47Vinv2HBMZi49C09dJxp0QT5LwDzFaVGf/+ITHe3BlIhUiLNttkATSXplc89A2lAaeTqjgqVkiRfUGyQiQ==" }, "node_modules/@firebase/app-check-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.0.tgz", - "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.2.tgz", + "integrity": "sha512-FSOEzTzL5bLUbD2co3Zut46iyPWML6xc4x+78TeaXMSuJap5QObfb+rVvZJtla3asN4RwU7elaQaduP+HFizDA==" }, "node_modules/@firebase/app-compat": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.25.tgz", - "integrity": "sha512-B/JtCp1FsTuzlh1tIGQpYM2AXps21/zlzpFsk5LRsROOTRhBcR2N45AyaONPFD06C0yS0Tw19foxADzHyOSC3A==", - "dependencies": { - "@firebase/app": "0.9.25", - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.35.tgz", + "integrity": "sha512-vgay/WRjeH0r97/Q6L6df2CMx7oyNFDsE5yPQ9oR1G+zx2eT0s8vNNh0WlKqQxUEWaOLRnXhQ8gy7uu0cBgTRg==", + "dependencies": { + "@firebase/app": "0.10.5", + "@firebase/component": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" } }, "node_modules/@firebase/app-types": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", - "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.2.tgz", + "integrity": "sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ==" }, - "node_modules/@firebase/auth": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.5.1.tgz", - "integrity": "sha512-sVi7rq2YneLGJFqHa5S6nDfCHix9yuVV3RLhj/pWPlB4a36ofXal4E6PJwpeMc8uLjWEr1aovYN1jkXWNB6Avw==", + "node_modules/@firebase/auth-compat": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.9.tgz", + "integrity": "sha512-RX8Zh/3zz2CsVbmYfgHkfUm4fAEPCl+KHVIImNygV5jTGDF6oKOhBIpf4Yigclyu8ESQKZ4elyN0MBYm9/7zGw==", + "dependencies": { + "@firebase/auth": "1.7.4", + "@firebase/auth-types": "0.12.2", + "@firebase/component": "0.6.7", + "@firebase/util": "1.9.6", + "tslib": "^2.1.0", + "undici": "5.28.4" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/auth-compat/node_modules/@firebase/auth": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.7.4.tgz", + "integrity": "sha512-d2Fw17s5QesojwebrA903el20Li9/YGgkoOGJjagM4I1qAT36APa/FcZ+OX86KxbYKCtQKTMqraU8pxG7C2JWA==", "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", + "@firebase/component": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0", - "undici": "5.26.5" + "undici": "5.28.4" }, "peerDependencies": { "@firebase/app": "0.x", @@ -3483,116 +4059,78 @@ } } }, - "node_modules/@firebase/auth-compat": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.1.tgz", - "integrity": "sha512-rgDZnrDoekRvtzXVji8Z61wxxkof6pTkjYEkybILrjM8tGP9tx4xa9qGpF4ax3AzF+rKr7mIa9NnoXEK4UNqmQ==", - "dependencies": { - "@firebase/auth": "1.5.1", - "@firebase/auth-types": "0.12.0", - "@firebase/component": "0.6.4", - "@firebase/util": "1.9.3", - "tslib": "^2.1.0", - "undici": "5.26.5" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/auth-compat/node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, "node_modules/@firebase/auth-interop-types": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", - "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==" + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.3.tgz", + "integrity": "sha512-Fc9wuJGgxoxQeavybiuwgyi+0rssr76b+nHpj+eGhXFYAdudMWyfBHvFL/I5fEHniUM/UQdFzi9VXJK2iZF7FQ==" }, "node_modules/@firebase/auth-types": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.0.tgz", - "integrity": "sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA==", + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.2.tgz", + "integrity": "sha512-qsEBaRMoGvHO10unlDJhaKSuPn4pyoTtlQuP1ghZfzB6rNQPuhp/N/DcFZxm9i4v0SogjCbf9reWupwIvfmH6w==", "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, - "node_modules/@firebase/auth/node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, "node_modules/@firebase/component": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.4.tgz", - "integrity": "sha512-rLMyrXuO9jcAUCaQXCMjCMUsWrba5fzHlNK24xz5j2W6A/SRmK8mZJ/hn7V0fViLbxC0lPMtrK1eYzk6Fg03jA==", + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.7.tgz", + "integrity": "sha512-baH1AA5zxfaz4O8w0vDwETByrKTQqB5CDjRls79Sa4eAGAoERw4Tnung7XbMl3jbJ4B/dmmtsMrdki0KikwDYA==", "dependencies": { - "@firebase/util": "1.9.3", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" } }, "node_modules/@firebase/database": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.2.tgz", - "integrity": "sha512-8X6NBJgUQzDz0xQVaCISoOLINKat594N2eBbMR3Mu/MH/ei4WM+aAMlsNzngF22eljXu1SILP5G3evkyvsG3Ng==", - "dependencies": { - "@firebase/app-check-interop-types": "0.3.0", - "@firebase/auth-interop-types": "0.2.1", - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.5.tgz", + "integrity": "sha512-cAfwBqMQuW6HbhwI3Cb/gDqZg7aR0OmaJ85WUxlnoYW2Tm4eR0hFl5FEijI3/gYPUiUcUPQvTkGV222VkT7KPw==", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.2", + "@firebase/auth-interop-types": "0.2.3", + "@firebase/component": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", "faye-websocket": "0.11.4", "tslib": "^2.1.0" } }, "node_modules/@firebase/database-compat": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-1.0.2.tgz", - "integrity": "sha512-09ryJnXDvuycsxn8aXBzLhBTuCos3HEnCOBWY6hosxfYlNCGnLvG8YMlbSAt5eNhf7/00B095AEfDsdrrLjxqA==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/database": "1.0.2", - "@firebase/database-types": "1.0.0", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-1.0.5.tgz", + "integrity": "sha512-NDSMaDjQ+TZEMDMmzJwlTL05kh1+0Y84C+kVMaOmNOzRGRM7VHi29I6YUhCetXH+/b1Wh4ZZRyp1CuWkd8s6hg==", + "dependencies": { + "@firebase/component": "0.6.7", + "@firebase/database": "1.0.5", + "@firebase/database-types": "1.0.3", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" } }, "node_modules/@firebase/database-types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.0.tgz", - "integrity": "sha512-SjnXStoE0Q56HcFgNQ+9SsmJc0c8TqGARdI/T44KXy+Ets3r6x/ivhQozT66bMnCEjJRywYoxNurRTMlZF8VNg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.3.tgz", + "integrity": "sha512-39V/Riv2R3O/aUjYKh0xypj7NTNXNAK1bcgY5Kx+hdQPRS/aPTS8/5c0CGFYKgVuFbYlnlnhrCTYsh2uNhGwzA==", "dependencies": { - "@firebase/app-types": "0.9.0", - "@firebase/util": "1.9.3" + "@firebase/app-types": "0.9.2", + "@firebase/util": "1.9.6" } }, "node_modules/@firebase/firestore": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.4.0.tgz", - "integrity": "sha512-VeDXD9PUjvcWY1tInBOMTIu2pijR3YYy+QAe5cxCo1Q1vW+aA/mpQHhebPM1J6b4Zd1MuUh8xpBRvH9ujKR56A==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", - "@firebase/webchannel-wrapper": "0.10.5", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.6.3.tgz", + "integrity": "sha512-d/+N2iUsiJ/Dc7fApdpdmmTXzwuTCromsdA1lKwYfZtMIOd1fI881NSLwK2wV4I38wkLnvfKJUV6WpU1f3/ONg==", + "dependencies": { + "@firebase/component": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", + "@firebase/webchannel-wrapper": "1.0.0", "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", "tslib": "^2.1.0", - "undici": "5.26.5" + "undici": "5.28.4" }, "engines": { "node": ">=10.10.0" @@ -3602,14 +4140,14 @@ } }, "node_modules/@firebase/firestore-compat": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.23.tgz", - "integrity": "sha512-uUTBiP0GLVBETaOCfB11d33OWB8x1r2G1Xrl0sRK3Va0N5LJ/GRvKVSGfM7VScj+ypeHe8RpdwKoCqLpN1e+uA==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/firestore": "4.4.0", - "@firebase/firestore-types": "3.0.0", - "@firebase/util": "1.9.3", + "version": "0.3.32", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.32.tgz", + "integrity": "sha512-at71mwK7a/mUXH0OgyY0+gUzedm/EUydDFYSFsBoO8DYowZ23Mgd6P4Rzq/Ll3zI/3xJN7LGe7Qp4iE/V/3Arg==", + "dependencies": { + "@firebase/component": "0.6.7", + "@firebase/firestore": "4.6.3", + "@firebase/firestore-types": "3.0.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3617,18 +4155,18 @@ } }, "node_modules/@firebase/firestore-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.0.tgz", - "integrity": "sha512-Meg4cIezHo9zLamw0ymFYBD4SMjLb+ZXIbuN7T7ddXN6MGoICmOTq3/ltdCGoDCS2u+H1XJs2u/cYp75jsX9Qw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.2.tgz", + "integrity": "sha512-wp1A+t5rI2Qc/2q7r2ZpjUXkRVPtGMd6zCLsiWurjsQpqPgFin3AhNibKcIzoF2rnToNa/XYtyWXuifjOOwDgg==", "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "node_modules/@firebase/firestore/node_modules/@grpc/grpc-js": { - "version": "1.9.13", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.13.tgz", - "integrity": "sha512-OEZZu9v9AA+7/tghMDE8o5DAMD5THVnwSqDWuh7PPYO5287rTyqy0xEHT6/e4pbqSrhyLPdQFsam4TwFQVVIIw==", + "version": "1.9.15", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz", + "integrity": "sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==", "dependencies": { "@grpc/proto-loader": "^0.7.8", "@types/node": ">=12.12.47" @@ -3637,43 +4175,40 @@ "node": "^8.13.0 || >=10.10.0" } }, - "node_modules/@firebase/firestore/node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", + "node_modules/@firebase/firestore/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" + "undici-types": "~5.26.4" } }, "node_modules/@firebase/functions": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.11.0.tgz", - "integrity": "sha512-n1PZxKnJ++k73Q8khTPwihlbeKo6emnGzE0hX6QVQJsMq82y/XKmNpw2t/q30VJgwaia3ZXU1fd1C5wHncL+Zg==", - "dependencies": { - "@firebase/app-check-interop-types": "0.3.0", - "@firebase/auth-interop-types": "0.2.1", - "@firebase/component": "0.6.4", - "@firebase/messaging-interop-types": "0.2.0", - "@firebase/util": "1.9.3", + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.11.5.tgz", + "integrity": "sha512-qrHJ+l62mZiU5UZiVi84t/iLXZlhRuSvBQsa2qvNLgPsEWR7wdpWhRmVdB7AU8ndkSHJjGlMICqrVnz47sgU7Q==", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.2", + "@firebase/auth-interop-types": "0.2.3", + "@firebase/component": "0.6.7", + "@firebase/messaging-interop-types": "0.2.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0", - "undici": "5.26.5" + "undici": "5.28.4" }, "peerDependencies": { "@firebase/app": "0.x" } }, "node_modules/@firebase/functions-compat": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.6.tgz", - "integrity": "sha512-RQpO3yuHtnkqLqExuAT2d0u3zh8SDbeBYK5EwSCBKI9mjrFeJRXBnd3pEG+x5SxGJLy56/5pQf73mwt0OuH5yg==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/functions": "0.11.0", - "@firebase/functions-types": "0.6.0", - "@firebase/util": "1.9.3", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.11.tgz", + "integrity": "sha512-Qn+ts/M6Lj2/6i1cp5V5TRR+Hi9kyXyHbo+w9GguINJ87zxrCe6ulx3TI5AGQkoQa8YFHUhT3DMGmLFiJjWTSQ==", + "dependencies": { + "@firebase/component": "0.6.7", + "@firebase/functions": "0.11.5", + "@firebase/functions-types": "0.6.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3681,29 +4216,18 @@ } }, "node_modules/@firebase/functions-types": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.0.tgz", - "integrity": "sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw==" - }, - "node_modules/@firebase/functions/node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.2.tgz", + "integrity": "sha512-0KiJ9lZ28nS2iJJvimpY4nNccV21rkQyor5Iheu/nq8aKXJqtJdeSlZDspjPSBBiHRzo7/GMUttegnsEITqR+w==" }, "node_modules/@firebase/installations": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.4.tgz", - "integrity": "sha512-u5y88rtsp7NYkCHC3ElbFBrPtieUybZluXyzl7+4BsIz4sqb4vSAuwHEUgCgCeaQhvsnxDEU6icly8U9zsJigA==", + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.7.tgz", + "integrity": "sha512-i6iGoXRu5mX4rTsiMSSKrgh9pSEzD4hwBEzRh5kEhOTr8xN/wvQcCPZDSMVYKwM2XyCPBLVq0JzjyerwL0Rihg==", "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/util": "1.9.3", - "idb": "7.0.1", + "@firebase/component": "0.6.7", + "@firebase/util": "1.9.6", + "idb": "7.1.1", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3711,14 +4235,14 @@ } }, "node_modules/@firebase/installations-compat": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.4.tgz", - "integrity": "sha512-LI9dYjp0aT9Njkn9U4JRrDqQ6KXeAmFbRC0E7jI7+hxl5YmRWysq5qgQl22hcWpTk+cm3es66d/apoDU/A9n6Q==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.7.tgz", + "integrity": "sha512-RPcbD+3nqHbnhVjIOpWK2H5qzZ8pAAAScceiWph0VNTqpKyPQ5tDcp4V5fS0ELpfgsHYvroMLDKfeHxpfvm8cw==", "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/installations": "0.6.4", - "@firebase/installations-types": "0.5.0", - "@firebase/util": "1.9.3", + "@firebase/component": "0.6.7", + "@firebase/installations": "0.6.7", + "@firebase/installations-types": "0.5.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3726,35 +4250,30 @@ } }, "node_modules/@firebase/installations-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.0.tgz", - "integrity": "sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.2.tgz", + "integrity": "sha512-que84TqGRZJpJKHBlF2pkvc1YcXrtEDOVGiDjovP/a3s6W4nlbohGXEsBJo0JCeeg/UG9A+DEZVDUV9GpklUzA==", "peerDependencies": { "@firebase/app-types": "0.x" } }, - "node_modules/@firebase/installations/node_modules/idb": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", - "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==" - }, "node_modules/@firebase/logger": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", - "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.2.tgz", + "integrity": "sha512-Q1VuA5M1Gjqrwom6I6NUU4lQXdo9IAQieXlujeHZWvRt1b7qQ0KwBaNAjgxG27jgF9/mUwsNmO8ptBCGVYhB0A==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@firebase/messaging": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.5.tgz", - "integrity": "sha512-i/rrEI2k9ueFhdIr8KQsptWGskrsnkC5TkohCTrJKz9P0C/PbNv14IAMkwhMJTqIur5VwuOnrUkc9Kdz7awekw==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/installations": "0.6.4", - "@firebase/messaging-interop-types": "0.2.0", - "@firebase/util": "1.9.3", + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.9.tgz", + "integrity": "sha512-IH+JJmzbFGZXV3+TDyKdqqKPVfKRqBBg2BfYYOy7cm7J+SwV+uJMe8EnDKYeQLEQhtpwciPfJ3qQXJs2lbxDTw==", + "dependencies": { + "@firebase/component": "0.6.7", + "@firebase/installations": "0.6.7", + "@firebase/messaging-interop-types": "0.2.2", + "@firebase/util": "1.9.6", "idb": "7.1.1", "tslib": "^2.1.0" }, @@ -3763,13 +4282,13 @@ } }, "node_modules/@firebase/messaging-compat": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.5.tgz", - "integrity": "sha512-qHQZxm4hEG8/HFU/ls5/bU+rpnlPDoZoqi3ATMeb6s4hovYV9+PfV5I7ZrKV5eFFv47Hx1PWLe5uPnS4e7gMwQ==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.9.tgz", + "integrity": "sha512-5jN6wyhwPgBH02zOtmmoOeyfsmoD7ty48D1m0vVPsFg55RqN2Z3Q9gkZ5GmPklFPjTPLcxB1ObcHOZvThTkm7g==", "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/messaging": "0.12.5", - "@firebase/util": "1.9.3", + "@firebase/component": "0.6.7", + "@firebase/messaging": "0.12.9", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3777,19 +4296,19 @@ } }, "node_modules/@firebase/messaging-interop-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz", - "integrity": "sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.2.tgz", + "integrity": "sha512-l68HXbuD2PPzDUOFb3aG+nZj5KA3INcPwlocwLZOzPp9rFM9yeuI9YLl6DQfguTX5eAGxO0doTR+rDLDvQb5tA==" }, "node_modules/@firebase/performance": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.4.tgz", - "integrity": "sha512-HfTn/bd8mfy/61vEqaBelNiNnvAbUtME2S25A67Nb34zVuCSCRIX4SseXY6zBnOFj3oLisaEqhVcJmVPAej67g==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/installations": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.7.tgz", + "integrity": "sha512-d+Q4ltjdJZqjzcdms5i0UC9KLYX7vKGcygZ+7zHA/Xk+bAbMD2CPU0nWTnlNFWifZWIcXZ/2mAMvaGMW3lypUA==", + "dependencies": { + "@firebase/component": "0.6.7", + "@firebase/installations": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3797,15 +4316,15 @@ } }, "node_modules/@firebase/performance-compat": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.4.tgz", - "integrity": "sha512-nnHUb8uP9G8islzcld/k6Bg5RhX62VpbAb/Anj7IXs/hp32Eb2LqFPZK4sy3pKkBUO5wcrlRWQa6wKOxqlUqsg==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/performance": "0.6.4", - "@firebase/performance-types": "0.2.0", - "@firebase/util": "1.9.3", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.7.tgz", + "integrity": "sha512-cb8ge/5iTstxfIGW+iiY+7l3FtN8gobNh9JSQNZgLC9xmcfBYWEs8IeEWMI6S8T+At0oHc3lv+b2kpRMUWr8zQ==", + "dependencies": { + "@firebase/component": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/performance": "0.6.7", + "@firebase/performance-types": "0.2.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3813,19 +4332,19 @@ } }, "node_modules/@firebase/performance-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.0.tgz", - "integrity": "sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.2.tgz", + "integrity": "sha512-gVq0/lAClVH5STrIdKnHnCo2UcPLjJlDUoEB/tB4KM+hAeHUxWKnpT0nemUPvxZ5nbdY/pybeyMe8Cs29gEcHA==" }, "node_modules/@firebase/remote-config": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.4.tgz", - "integrity": "sha512-x1ioTHGX8ZwDSTOVp8PBLv2/wfwKzb4pxi0gFezS5GCJwbLlloUH4YYZHHS83IPxnua8b6l0IXUaWd0RgbWwzQ==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/installations": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.7.tgz", + "integrity": "sha512-5oPNrPFLsbsjpq0lUEIXoDF2eJK7vAbyXe/DEuZQxnwJlfR7aQbtUlEkRgQWcicXpyDmAmDLo7q7lDbCYa6CpA==", + "dependencies": { + "@firebase/component": "0.6.7", + "@firebase/installations": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3833,15 +4352,15 @@ } }, "node_modules/@firebase/remote-config-compat": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.4.tgz", - "integrity": "sha512-FKiki53jZirrDFkBHglB3C07j5wBpitAaj8kLME6g8Mx+aq7u9P7qfmuSRytiOItADhWUj7O1JIv7n9q87SuwA==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/remote-config": "0.4.4", - "@firebase/remote-config-types": "0.3.0", - "@firebase/util": "1.9.3", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.7.tgz", + "integrity": "sha512-Fq0oneQ4SluLnfr5/HfzRS1TZf1ANj1rWbCCW3+oC98An3nE+sCdp+FSuHsEVNwgMg4Tkwx9Oom2lkKeU+Vn+w==", + "dependencies": { + "@firebase/component": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/remote-config": "0.4.7", + "@firebase/remote-config-types": "0.3.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3849,33 +4368,33 @@ } }, "node_modules/@firebase/remote-config-types": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz", - "integrity": "sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA==" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.2.tgz", + "integrity": "sha512-0BC4+Ud7y2aPTyhXJTMTFfrGGLqdYXrUB9sJVAB8NiqJswDTc4/2qrE/yfUbnQJhbSi6ZaTTBKyG3n1nplssaA==" }, "node_modules/@firebase/storage": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.12.0.tgz", - "integrity": "sha512-SGs02Y/mmWBRsqZiYLpv4Sf7uZYZzMWVNN+aKiDqPsFBCzD6hLvGkXz+u98KAl8FqcjgB8BtSu01wm4pm76KHA==", + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.12.5.tgz", + "integrity": "sha512-nGWBOGFNr10j0LA4NJ3/Yh3us/lb0Q1xSIKZ38N6FcS+vY54nqJ7k3zE3PENregHC8+8txRow++A568G3v8hOA==", "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/util": "1.9.3", + "@firebase/component": "0.6.7", + "@firebase/util": "1.9.6", "tslib": "^2.1.0", - "undici": "5.26.5" + "undici": "5.28.4" }, "peerDependencies": { "@firebase/app": "0.x" } }, "node_modules/@firebase/storage-compat": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.3.tgz", - "integrity": "sha512-WNtjYPhpOA1nKcRu5lIodX0wZtP8pI0VxDJnk6lr+av7QZNS1s6zvr+ERDTve+Qu4Hq/ZnNaf3kBEQR2ccXn6A==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.8.tgz", + "integrity": "sha512-qDfY9kMb6Ch2hZb40sBjDQ8YPxbjGOxuT+gU1Z0iIVSSpSX0f4YpGJCypUXiA0T11n6InCXB+T/Dknh2yxVTkg==", "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/storage": "0.12.0", - "@firebase/storage-types": "0.8.0", - "@firebase/util": "1.9.3", + "@firebase/component": "0.6.7", + "@firebase/storage": "0.12.5", + "@firebase/storage-types": "0.8.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -3883,46 +4402,68 @@ } }, "node_modules/@firebase/storage-types": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.0.tgz", - "integrity": "sha512-isRHcGrTs9kITJC0AVehHfpraWFui39MPaU7Eo8QfWlqW7YPymBmRgjDrlOgFdURh6Cdeg07zmkLP5tzTKRSpg==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.2.tgz", + "integrity": "sha512-0vWu99rdey0g53lA7IShoA2Lol1jfnPovzLDUBuon65K7uKG9G+L5uO05brD9pMw+l4HRFw23ah3GwTGpEav6g==", "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, - "node_modules/@firebase/storage/node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", + "node_modules/@firebase/util": { + "version": "1.9.6", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.6.tgz", + "integrity": "sha512-IBr1MZbp4d5MjBCXL3TW1dK/PDXX4yOGbiwRNh1oAbE/+ci5Uuvy9KIrsFYY80as1I0iOaD5oOMA9Q8j4TJWcw==", "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" + "tslib": "^2.1.0" } }, - "node_modules/@firebase/util": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.3.tgz", - "integrity": "sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==", + "node_modules/@firebase/vertexai-preview": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@firebase/vertexai-preview/-/vertexai-preview-0.0.2.tgz", + "integrity": "sha512-NOOL63kFQRq45ioi5P+hlqj/4LNmvn1URhGjQdvyV54c1Irvoq26aW861PRRLjrSMIeNeiLtCLD5pe+ediepAg==", "dependencies": { + "@firebase/app-check-interop-types": "0.3.2", + "@firebase/component": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@firebase/app-types": "0.x" } }, "node_modules/@firebase/webchannel-wrapper": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.5.tgz", - "integrity": "sha512-eSkJsnhBWv5kCTSU1tSUVl9mpFu+5NXXunZc83le8GMjMlsWwQArSc7cJJ4yl+aDFY0NGLi0AjZWMn1axOrkRg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.0.tgz", + "integrity": "sha512-zuWxyfXNbsKbm96HhXzainONPFqRcoZblQ++e9cAIGUuHfl2cFSBzW01jtesqWG/lqaUyX3H8O1y9oWboGNQBA==" + }, + "node_modules/@fleekxyz/sdk": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@fleekxyz/sdk/-/sdk-0.7.3.tgz", + "integrity": "sha512-iYaKOltqXLKBbg0HRlnQrPIlnzgesSz4PwWFOErE/Ygu+D93WN7owxvjgyK5JbsylLp4wDpgdsFVCM0Ql0/bAg==", + "deprecated": "Package no longer supported. Please use the new package @fleek-platform/sdk at https://www.npmjs.com/package/@fleek-platform/sdk.", + "engines": { + "node": ">=18.0.0" + } }, "node_modules/@floating-ui/core": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.2.tgz", - "integrity": "sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", + "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", "dependencies": { - "@floating-ui/utils": "^0.1.3" + "@floating-ui/utils": "^0.2.0" } }, + "node_modules/@floating-ui/core/node_modules/@floating-ui/utils": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", + "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + }, "node_modules/@floating-ui/dom": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", @@ -4006,69 +4547,29 @@ }, "node_modules/@google-cloud/pubsub": { "version": "3.7.5", - "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-3.7.5.tgz", - "integrity": "sha512-4Qrry4vIToth5mqduVslltWVsyb7DR8OhnkBA3F7XiE0jgQsiuUfwp/RB2F559aXnRbwcfmjvP4jSuEaGcjrCQ==", - "dev": true, - "dependencies": { - "@google-cloud/paginator": "^4.0.0", - "@google-cloud/precise-date": "^3.0.0", - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^2.0.0", - "@opentelemetry/api": "^1.6.0", - "@opentelemetry/semantic-conventions": "~1.3.0", - "@types/duplexify": "^3.6.0", - "@types/long": "^4.0.0", - "arrify": "^2.0.0", - "extend": "^3.0.2", - "google-auth-library": "^8.0.2", - "google-gax": "^3.6.1", - "heap-js": "^2.2.0", - "is-stream-ended": "^0.1.4", - "lodash.snakecase": "^4.1.1", - "p-defer": "^3.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/pubsub/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/@google-cloud/pubsub/node_modules/gaxios": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", - "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", - "dev": true, - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/pubsub/node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-3.7.5.tgz", + "integrity": "sha512-4Qrry4vIToth5mqduVslltWVsyb7DR8OhnkBA3F7XiE0jgQsiuUfwp/RB2F559aXnRbwcfmjvP4jSuEaGcjrCQ==", "dev": true, "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" + "@google-cloud/paginator": "^4.0.0", + "@google-cloud/precise-date": "^3.0.0", + "@google-cloud/projectify": "^3.0.0", + "@google-cloud/promisify": "^2.0.0", + "@opentelemetry/api": "^1.6.0", + "@opentelemetry/semantic-conventions": "~1.3.0", + "@types/duplexify": "^3.6.0", + "@types/long": "^4.0.0", + "arrify": "^2.0.0", + "extend": "^3.0.2", + "google-auth-library": "^8.0.2", + "google-gax": "^3.6.1", + "heap-js": "^2.2.0", + "is-stream-ended": "^0.1.4", + "lodash.snakecase": "^4.1.1", + "p-defer": "^3.0.0" }, "engines": { - "node": ">=12" + "node": ">=12.0.0" } }, "node_modules/@google-cloud/pubsub/node_modules/google-auth-library": { @@ -4091,48 +4592,6 @@ "node": ">=12" } }, - "node_modules/@google-cloud/pubsub/node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "dev": true, - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/pubsub/node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dev": true, - "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/pubsub/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@google-cloud/pubsub/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4146,9 +4605,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.8.21", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", - "integrity": "sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==", + "version": "1.8.22", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.22.tgz", + "integrity": "sha512-oAjDdN7fzbUi+4hZjKG96MR6KTEubAeMpQEb+77qy+3r0Ua5xTFuie6JOLr4ZZgl5g+W5/uRTS2M1V8mVAFPuA==", "dev": true, "dependencies": { "@grpc/proto-loader": "^0.7.0", @@ -4158,14 +4617,23 @@ "node": "^8.13.0 || >=10.10.0" } }, + "node_modules/@grpc/grpc-js/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@grpc/proto-loader": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", - "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", - "protobufjs": "^7.2.4", + "protobufjs": "^7.2.5", "yargs": "^17.7.2" }, "bin": { @@ -4175,15 +4643,23 @@ "node": ">=6" } }, + "node_modules/@grpc/proto-loader/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@grpc/proto-loader/node_modules/long": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, "node_modules/@grpc/proto-loader/node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", + "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -4216,10 +4692,40 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@hexaonelabs/firebase-web3connect": { + "version": "0.0.9-alpha.10", + "integrity": "sha512-AH92y8Za787LdDsrS1H/fbdniFNNpxHIj8shKEVoEs4bbb7TwC/M4Z7c6/z6Qv5YSdxsEYeytOYh234HkhtGfg==", + "dependencies": { + "@bitcoinerlab/secp256k1": "^1.1.1", + "@fleekxyz/sdk": "^0.7.3", + "@solana/spl-token": "^0.4.6", + "@solana/web3.js": "^1.91.8", + "bip32": "^4.0.0", + "bip39": "^3.1.0", + "bitcoinjs-lib": "^6.1.5", + "bs58": "^5.0.0", + "buffer": "^6.0.3", + "ed25519-hd-key": "^1.3.0", + "ethers": "^5.7.2", + "firebase": "^10.10.0", + "stream-browserify": "^3.0.0", + "vite-plugin-node-polyfills": "^0.21.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "bip39": "^3.1.0", + "buffer": "^6.0.3", + "ethers": "^5.7.2", + "firebase": "^10.10.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.13", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.1", @@ -4244,9 +4750,10 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true }, "node_modules/@ionic/cli-framework-output": { @@ -4264,21 +4771,21 @@ } }, "node_modules/@ionic/core": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", - "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "dependencies": { - "@stencil/core": "^4.8.2", - "ionicons": "^7.2.1", + "@stencil/core": "^4.17.2", + "ionicons": "^7.2.2", "tslib": "^2.1.0" } }, "node_modules/@ionic/react": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.6.2.tgz", - "integrity": "sha512-c2dD/ATMDf70GAp6z6QLzmRNZVBZl9B6zcCGJlYhxSHReNOAln3PWYwxy8v/7MuTyclG4rnNQxiSBd3XQbqKTw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.2.2.tgz", + "integrity": "sha512-uf369EYjgEU88u65QdOBaTlEv0fy/v5H6ICpaPHNRHgvppkQSE9uWZitZdeBuXQq8+k9OCo1Wn0vzL3znP3nHA==", "dependencies": { - "@ionic/core": "7.6.2", + "@ionic/core": "8.2.2", "ionicons": "^7.0.0", "tslib": "*" }, @@ -4288,11 +4795,11 @@ } }, "node_modules/@ionic/react-router": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@ionic/react-router/-/react-router-7.6.2.tgz", - "integrity": "sha512-1dd8jGAGqbTWFF0FhTkn5MMxlGA/66Vl8MuBWMRt8/cZVe+TNm40UkhrcwBXcH8+PxRkZbuI4YUHwMJZWKUE2w==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/react-router/-/react-router-8.2.2.tgz", + "integrity": "sha512-I8bEPiru2PtqQfBPbanjJw6iKl+wqpcv84bNqdux6kgpGTt0R+YKeJkkaaHxkZpLO4ZAxyB2Yxjvp1win07hMw==", "dependencies": { - "@ionic/react": "7.6.2", + "@ionic/react": "8.2.2", "tslib": "*" }, "peerDependencies": { @@ -4302,6 +4809,14 @@ "react-router-dom": "^5.0.1" } }, + "node_modules/@ionic/storage": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@ionic/storage/-/storage-4.0.0.tgz", + "integrity": "sha512-3N21P19Xk6cICLnSXZ3ilRqbSXAGSFeIF3HNqz+1kARcm0UFT/vwmZreaXtFyq437vvEWOfJ2enlj3JHLKS0FA==", + "dependencies": { + "localforage": "^1.9.0" + } + }, "node_modules/@ionic/utils-array": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz", @@ -4452,11 +4967,6 @@ "node": ">=16.0.0" } }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -4553,10 +5063,31 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } @@ -4567,12 +5098,12 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@jsdevtools/ono": { @@ -4582,9 +5113,9 @@ "dev": true }, "node_modules/@jsdoc/salty": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.7.tgz", - "integrity": "sha512-mh8LbS9d4Jq84KLw8pzho7XC2q2/IJGiJss3xwRoLD1A+EE16SjN4PfaG4jRCzKegTFLlN0Zd8SdUPE6XdoPFg==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.8.tgz", + "integrity": "sha512-5e+SFVavj1ORKlKaKr2BmTOekmXbelU7dC0cDkQLqag7xfuTPuGMUFx7KWJuv4bYZrTsoL2Z18VVCOKYxzoHcg==", "dev": true, "dependencies": { "lodash": "^4.17.21" @@ -4614,9 +5145,9 @@ } }, "node_modules/@json-rpc-tools/provider/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -4671,7 +5202,6 @@ }, "node_modules/@khmyznikov/pwa-install": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@khmyznikov/pwa-install/-/pwa-install-0.2.7.tgz", "integrity": "sha512-QA+rRsIyQcCuFz9JTTrvctrfYylapKcKpsfl4G492pp6hbqC8d/o4sJchQKZFAMkG8t1Y8fw6be2c71ylCpn/A==", "dependencies": { "@lit/localize": "^0.11.4", @@ -4692,9 +5222,9 @@ } }, "node_modules/@lifi/sdk": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@lifi/sdk/-/sdk-2.5.0.tgz", - "integrity": "sha512-wx/3Ff0DAfYyV8VSWSQ/Qiy3DlwdrIfG841hbwqJK3AGxK0ulunLl1rKpMQrRdEEwkqAFNKZuJ8by0lGf9YccQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lifi/sdk/-/sdk-2.5.2.tgz", + "integrity": "sha512-LljyEU3OARdHp+PJstWhI/ZdRDeBrd0MOYDeecTUp3Ox+B2WaZlz/qCd3HsaW9Rqr1RWP6Sge8t5BjjZaXXfsQ==", "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/contracts": "^5.7.0", @@ -4713,9 +5243,9 @@ } }, "node_modules/@lifi/wallet-management": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@lifi/wallet-management/-/wallet-management-2.6.0.tgz", - "integrity": "sha512-XyjV5uVRerGcQdnTbU6cjz2z8N/6wUy7rVrNypJ9ILi5QLUh2eyE9OBku3zuTvri1SCvc04L6C1RnecFuNcPrA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@lifi/wallet-management/-/wallet-management-2.6.1.tgz", + "integrity": "sha512-UatA51tZn4ZpiAtJtPHUzt7e7lw3Ulb4eyUTN2O5jgDiAMaMHGqHchIIFuu8oeQqbqQv+hBXjSpLE8sLGB8vsg==", "dependencies": { "@coinbase/wallet-sdk": "^3.9.1", "@cyberlab/cyber-account": "^2.2.5", @@ -4726,16 +5256,16 @@ "@lifi/sdk": "^2.5.0", "@safe-global/safe-apps-provider": "^0.18.1", "@safe-global/safe-apps-sdk": "^8.1.0", - "@walletconnect/ethereum-provider": "^2.10.6", + "@walletconnect/ethereum-provider": "^2.12.2", "@walletconnect/modal": "^2.6.2", "events": "^3.3.0", "react": "^18.2.0" } }, "node_modules/@lifi/widget": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/@lifi/widget/-/widget-2.10.1.tgz", - "integrity": "sha512-Tn/pq7/fh9aAHnnwuPYYznJ6IN+/5oUKP1qlCc/0iB3lJfeTq23ybkmNEqF90JrGGRkX6zvhs73Cl3vBJskg0w==", + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@lifi/widget/-/widget-2.10.2.tgz", + "integrity": "sha512-Ny4f/hx+27e1UKg2OgoV9IZ5jfNCIb717nS1cKsWgri1r3wBLcHamg4MHdCyJ3n7p9mhrgvzj8pW+DcMv9xwoA==", "dependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", @@ -4744,7 +5274,7 @@ "@ethersproject/experimental": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@lifi/sdk": "^2.5.0", - "@lifi/wallet-management": "^2.6.0", + "@lifi/wallet-management": "^2.6.1", "@mui/icons-material": "^5.14.14", "@mui/lab": "^5.0.0-alpha.149", "@mui/material": "^5.14.14", @@ -4806,10 +5336,26 @@ "react-dom": ">=16.8" } }, + "node_modules/@lifi/widget/node_modules/react-router-dom/node_modules/@remix-run/router": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.1.tgz", + "integrity": "sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@lifi/widget/node_modules/react-router/node_modules/@remix-run/router": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.1.tgz", + "integrity": "sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", - "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz", + "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==" }, "node_modules/@lit/localize": { "version": "0.11.4", @@ -4841,27 +5387,22 @@ }, "node_modules/@magic-ext/avalanche": { "version": "16.4.1", - "resolved": "https://registry.npmjs.org/@magic-ext/avalanche/-/avalanche-16.4.1.tgz", "integrity": "sha512-o3q4brIqQiUGe0wcmSnevg77mO6OWVkTq01cHVOvX8+HMdZ6XAyh5flghkOQAxWJaVFQoQX+sdLr8Is6v7RTzw==" }, "node_modules/@magic-ext/bitcoin": { "version": "16.4.1", - "resolved": "https://registry.npmjs.org/@magic-ext/bitcoin/-/bitcoin-16.4.1.tgz", "integrity": "sha512-aQmi4hoPIs4MXXkiejJt9uWjMbNjxEtuRkONjcvs0EFSOa+o7HgQMP026NihJdBfR2hFI+LMHvc2qSWAGam82A==" }, "node_modules/@magic-ext/cosmos": { "version": "16.4.1", - "resolved": "https://registry.npmjs.org/@magic-ext/cosmos/-/cosmos-16.4.1.tgz", "integrity": "sha512-Nmw0UpONybLDjwycLZgg+XHqlv5q9nk65r7lC8aeLkliCZ6eANdudOBR6RSDbIDD65JQALB8Sr23JqVJEsBxoA==" }, "node_modules/@magic-ext/polkadot": { "version": "16.4.1", - "resolved": "https://registry.npmjs.org/@magic-ext/polkadot/-/polkadot-16.4.1.tgz", "integrity": "sha512-0eSbYLiS24XVmkwkNShR9Vhfw0rpCMr5hmiluBdRaBxoeoKo5Qhjp2+6p7dL0cHOWFiMOJLBM3za1iXZ+3QZQA==" }, "node_modules/@magic-ext/solana": { "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@magic-ext/solana/-/solana-18.3.0.tgz", "integrity": "sha512-+dtK41plTd1FH6tGj2Wbi1XU4gPBb9EwrLcrpoNzKwSmyyzo7hugNgAv/97IEkaz0fNsZqPriig23rwsN4NwAw==", "dependencies": { "@solana/web3.js": "^1.87.2" @@ -4975,19 +5516,6 @@ "base-x": "^3.0.2" } }, - "node_modules/@marinade.finance/marinade-ts-sdk/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "dependencies": { - "base-x": "^4.0.0" - } - }, - "node_modules/@marinade.finance/marinade-ts-sdk/node_modules/bs58/node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, "node_modules/@metamask/eth-json-rpc-provider": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-json-rpc-provider/-/eth-json-rpc-provider-1.0.1.tgz", @@ -5002,11 +5530,11 @@ } }, "node_modules/@metamask/json-rpc-engine": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-7.3.2.tgz", - "integrity": "sha512-dVjBPlni4CoiBpESVqrxh6k4OR14w6GRXKSSXHFuITjuhALE42gNCkXTpL4cjNeOBUgTba3eGe5EI8cyc2QLRg==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-7.3.3.tgz", + "integrity": "sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg==", "dependencies": { - "@metamask/rpc-errors": "^6.1.0", + "@metamask/rpc-errors": "^6.2.1", "@metamask/safe-event-emitter": "^3.0.0", "@metamask/utils": "^8.3.0" }, @@ -5015,37 +5543,30 @@ } }, "node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.3.0.tgz", - "integrity": "sha512-WFVcMPEkKKRCJ8DDkZUTVbLlpwgRn98F4VM/WzN89HM8PmHMnCyk/oG0AmK/seOxtik7uC7Bbi2YBC5Z5XB2zw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.5.0.tgz", + "integrity": "sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==", "dependencies": { "@ethereumjs/tx": "^4.2.0", + "@metamask/superstruct": "^3.0.0", "@noble/hashes": "^1.3.1", "@scure/base": "^1.1.3", "@types/debug": "^4.1.7", "debug": "^4.3.4", "pony-cause": "^2.1.10", "semver": "^7.5.4", - "superstruct": "^1.0.3" + "uuid": "^9.0.1" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@metamask/json-rpc-engine/node_modules/superstruct": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.3.tgz", - "integrity": "sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@metamask/rpc-errors": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-6.1.0.tgz", - "integrity": "sha512-JQElKxai26FpDyRKO/yH732wI+BV90i1u6pOuDOpdADSbppB2g1pPh3AGST1zkZqEE9eIKIUw8UdBQ4rp3VTSg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-6.3.0.tgz", + "integrity": "sha512-B1UIG/0xWkaDs/d6xrxsRf7kmFLdk8YE0HUToaFumjwQM36AjBsqEzVyemPTQv0SIrAPFnSmkLt053JOWcu5iw==", "dependencies": { - "@metamask/utils": "^8.1.0", + "@metamask/utils": "^8.3.0", "fast-safe-stringify": "^2.0.6" }, "engines": { @@ -5053,37 +5574,38 @@ } }, "node_modules/@metamask/rpc-errors/node_modules/@metamask/utils": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.3.0.tgz", - "integrity": "sha512-WFVcMPEkKKRCJ8DDkZUTVbLlpwgRn98F4VM/WzN89HM8PmHMnCyk/oG0AmK/seOxtik7uC7Bbi2YBC5Z5XB2zw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.5.0.tgz", + "integrity": "sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==", "dependencies": { "@ethereumjs/tx": "^4.2.0", + "@metamask/superstruct": "^3.0.0", "@noble/hashes": "^1.3.1", "@scure/base": "^1.1.3", "@types/debug": "^4.1.7", "debug": "^4.3.4", "pony-cause": "^2.1.10", "semver": "^7.5.4", - "superstruct": "^1.0.3" + "uuid": "^9.0.1" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@metamask/rpc-errors/node_modules/superstruct": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.3.tgz", - "integrity": "sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==", + "node_modules/@metamask/safe-event-emitter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.1.tgz", + "integrity": "sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw==", "engines": { - "node": ">=14.0.0" + "node": ">=12.0.0" } }, - "node_modules/@metamask/safe-event-emitter": { + "node_modules/@metamask/superstruct": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.0.0.tgz", - "integrity": "sha512-j6Z47VOmVyGMlnKXZmL0fyvWfEYtKWCA9yGZkU3FCsGZUT5lHGmvaV9JA5F2Y+010y7+ROtR3WMXIkvl/nVzqQ==", + "resolved": "https://registry.npmjs.org/@metamask/superstruct/-/superstruct-3.0.0.tgz", + "integrity": "sha512-TOm+Lt/lCJk9j/3QT2LucrPewRmqI7/GKT+blK2IIOAkBMS+9TmeNjd2Y+TlfpSSYstaYsGZyz1XwpiTCg6RLA==", "engines": { - "node": ">=12.0.0" + "node": ">=16.0.0" } }, "node_modules/@metamask/utils": { @@ -5102,9 +5624,9 @@ } }, "node_modules/@metamask/utils/node_modules/superstruct": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.3.tgz", - "integrity": "sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", + "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", "engines": { "node": ">=14.0.0" } @@ -5177,19 +5699,6 @@ "node": ">= 14" } }, - "node_modules/@metaplex-foundation/js/node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, - "node_modules/@metaplex-foundation/js/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "dependencies": { - "base-x": "^4.0.0" - } - }, "node_modules/@metaplex-foundation/js/node_modules/mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", @@ -5240,17 +5749,21 @@ "debug": "^4.3.4" } }, - "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, - "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", "dependencies": { - "base-x": "^4.0.0" + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" } }, "node_modules/@metaplex-foundation/mpl-candy-machine": { @@ -5286,19 +5799,6 @@ "debug": "^4.3.4" } }, - "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, - "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "dependencies": { - "base-x": "^4.0.0" - } - }, "node_modules/@metaplex-foundation/mpl-core": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-core/-/mpl-core-0.6.1.tgz", @@ -5309,6 +5809,14 @@ "bs58": "^4.0.1" } }, + "node_modules/@metaplex-foundation/mpl-core/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/@metaplex-foundation/mpl-token-metadata": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz", @@ -5345,6 +5853,23 @@ "debug": "^4.3.4" } }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/assert": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", @@ -5357,19 +5882,6 @@ "util": "^0.12.5" } }, - "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, - "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "dependencies": { - "base-x": "^4.0.0" - } - }, "node_modules/@mithraic-labs/psy-american": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@mithraic-labs/psy-american/-/psy-american-0.2.3.tgz", @@ -5399,57 +5911,55 @@ }, "node_modules/@moonpay/moonpay-js": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@moonpay/moonpay-js/-/moonpay-js-0.5.0.tgz", "integrity": "sha512-Q//d9kfGEQYOAxHIdXvnDrBONMR1uc2b/R48UP8uM//9f6tmUOOe5wXKnWJtK1Fh1/w3EDzigtYf8FNFiSco/w==" }, "node_modules/@moonpay/moonpay-react": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@moonpay/moonpay-react/-/moonpay-react-1.6.1.tgz", "integrity": "sha512-v2cx7W1ESrvzBf8Wj1If+poTiTX7OwZYUY0PLfDMuiCnu+di++GyI+R6VeAWUaH20KAQGiD54pFaoE7naNZrew==", "peerDependencies": { "react": ">=16" } }, "node_modules/@motionone/animation": { - "version": "10.16.3", - "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.16.3.tgz", - "integrity": "sha512-QUGWpLbMFLhyqKlngjZhjtxM8IqiJQjLK0DF+XOF6od9nhSvlaeEpOY/UMCRVcZn/9Tr2rZO22EkuCIjYdI74g==", + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.18.0.tgz", + "integrity": "sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==", "dependencies": { - "@motionone/easing": "^10.16.3", - "@motionone/types": "^10.16.3", - "@motionone/utils": "^10.16.3", + "@motionone/easing": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", "tslib": "^2.3.1" } }, "node_modules/@motionone/dom": { - "version": "10.16.4", - "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.16.4.tgz", - "integrity": "sha512-HPHlVo/030qpRj9R8fgY50KTN4Ko30moWRTA3L3imrsRBmob93cTYmodln49HYFbQm01lFF7X523OkKY0DX6UA==", - "dependencies": { - "@motionone/animation": "^10.16.3", - "@motionone/generators": "^10.16.4", - "@motionone/types": "^10.16.3", - "@motionone/utils": "^10.16.3", + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.18.0.tgz", + "integrity": "sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==", + "dependencies": { + "@motionone/animation": "^10.18.0", + "@motionone/generators": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", "hey-listen": "^1.0.8", "tslib": "^2.3.1" } }, "node_modules/@motionone/easing": { - "version": "10.16.3", - "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.16.3.tgz", - "integrity": "sha512-HWTMZbTmZojzwEuKT/xCdvoMPXjYSyQvuVM6jmM0yoGU6BWzsmYMeB4bn38UFf618fJCNtP9XeC/zxtKWfbr0w==", + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.18.0.tgz", + "integrity": "sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==", "dependencies": { - "@motionone/utils": "^10.16.3", + "@motionone/utils": "^10.18.0", "tslib": "^2.3.1" } }, "node_modules/@motionone/generators": { - "version": "10.16.4", - "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.16.4.tgz", - "integrity": "sha512-geFZ3w0Rm0ZXXpctWsSf3REGywmLLujEjxPYpBR0j+ymYwof0xbV6S5kGqqsDKgyWKVWpUInqQYvQfL6fRbXeg==", + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.18.0.tgz", + "integrity": "sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==", "dependencies": { - "@motionone/types": "^10.16.3", - "@motionone/utils": "^10.16.3", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", "tslib": "^2.3.1" } }, @@ -5463,16 +5973,16 @@ } }, "node_modules/@motionone/types": { - "version": "10.16.3", - "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.16.3.tgz", - "integrity": "sha512-W4jkEGFifDq73DlaZs3HUfamV2t1wM35zN/zX7Q79LfZ2sc6C0R1baUHZmqc/K5F3vSw3PavgQ6HyHLd/MXcWg==" + "version": "10.17.1", + "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.17.1.tgz", + "integrity": "sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==" }, "node_modules/@motionone/utils": { - "version": "10.16.3", - "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.16.3.tgz", - "integrity": "sha512-WNWDksJIxQkaI9p9Z9z0+K27xdqISGNFy1SsWVGaiedTHq0iaT6iZujby8fT/ZnZxj1EOaxJtSfUPCFNU5CRoA==", + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.18.0.tgz", + "integrity": "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==", "dependencies": { - "@motionone/types": "^10.16.3", + "@motionone/types": "^10.17.1", "hey-listen": "^1.0.8", "tslib": "^2.3.1" } @@ -5481,6 +5991,7 @@ "version": "10.16.4", "resolved": "https://registry.npmjs.org/@motionone/vue/-/vue-10.16.4.tgz", "integrity": "sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==", + "deprecated": "Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion", "dependencies": { "@motionone/dom": "^10.16.4", "tslib": "^2.3.1" @@ -5518,11 +6029,11 @@ } }, "node_modules/@mui/base/node_modules/@floating-ui/react-dom": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz", - "integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz", + "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==", "dependencies": { - "@floating-ui/dom": "^1.5.1" + "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", @@ -5530,17 +6041,17 @@ } }, "node_modules/@mui/base/node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "engines": { "node": ">=6" } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.1.tgz", - "integrity": "sha512-y/nUEsWHyBzaKYp9zLtqJKrLod/zMNEWpMj488FuQY9QTmqBiyUhI2uh7PVaLqLewXRtdmG6JV0b6T5exyuYRw==", + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.20.tgz", + "integrity": "sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" @@ -5612,9 +6123,9 @@ } }, "node_modules/@mui/lab/node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "engines": { "node": ">=6" } @@ -5664,20 +6175,20 @@ } }, "node_modules/@mui/material/node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "engines": { "node": ">=6" } }, "node_modules/@mui/private-theming": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.1.tgz", - "integrity": "sha512-wTbzuy5KjSvCPE9UVJktWHJ0b/tD5biavY9wvF+OpYDLPpdXK52vc1hTDxSbdkHIFMkJExzrwO9GvpVAHZBnFQ==", + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.20.tgz", + "integrity": "sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==", "dependencies": { - "@babel/runtime": "^7.23.5", - "@mui/utils": "^5.15.1", + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.15.20", "prop-types": "^15.8.1" }, "engines": { @@ -5698,13 +6209,13 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.1.tgz", - "integrity": "sha512-7WDZTJLqGexWDjqE9oAgjU8ak6hEtUw2yQU7SIYID5kLVO2Nj/Wi/KicbLsXnTsJNvSqePIlUIWTBSXwWJCPZw==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", + "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", "dependencies": { - "@babel/runtime": "^7.23.5", + "@babel/runtime": "^7.23.9", "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { @@ -5729,17 +6240,17 @@ } }, "node_modules/@mui/system": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.1.tgz", - "integrity": "sha512-LAnP0ls69rqW9eBgI29phIx/lppv+WDGI7b3EJN7VZIqw0RezA0GD7NRpV12BgEYJABEii6z5Q9B5tg7dsX0Iw==", - "dependencies": { - "@babel/runtime": "^7.23.5", - "@mui/private-theming": "^5.15.1", - "@mui/styled-engine": "^5.15.1", - "@mui/types": "^7.2.11", - "@mui/utils": "^5.15.1", - "clsx": "^2.0.0", - "csstype": "^3.1.2", + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.20.tgz", + "integrity": "sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.15.20", + "@mui/styled-engine": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.20", + "clsx": "^2.1.0", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { @@ -5768,17 +6279,17 @@ } }, "node_modules/@mui/system/node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "engines": { "node": ">=6" } }, "node_modules/@mui/types": { - "version": "7.2.11", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.11.tgz", - "integrity": "sha512-KWe/QTEsFFlFSH+qRYf3zoFEj3z67s+qAuSnMMg+gFwbxG7P96Hm6g300inQL1Wy///gSRb8juX7Wafvp93m3w==", + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", + "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0" }, @@ -5789,11 +6300,11 @@ } }, "node_modules/@mui/utils": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.1.tgz", - "integrity": "sha512-V1/d0E3Bju5YdB59HJf2G0tnHrFEvWLN+f8hAXp9+JSNy/LC2zKyqUfPPahflR6qsI681P8G9r4mEZte/SrrYA==", + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.20.tgz", + "integrity": "sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==", "dependencies": { - "@babel/runtime": "^7.23.5", + "@babel/runtime": "^7.23.9", "@types/prop-types": "^15.7.11", "prop-types": "^15.8.1", "react-is": "^18.2.0" @@ -5966,7 +6477,6 @@ }, "node_modules/@next/third-parties": { "version": "14.1.4", - "resolved": "https://registry.npmjs.org/@next/third-parties/-/third-parties-14.1.4.tgz", "integrity": "sha512-e/kpEFq5/ZPhHkxpJkvhMfLp3OC6KCBou0/BV8BvgjXAPgEo6sa0ZXe0l4ZEb3wcA7NIEHIpqCmjU5Z7QAHcKQ==", "dependencies": { "third-party-capital": "1.0.20" @@ -5977,11 +6487,11 @@ } }, "node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", + "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", "dependencies": { - "@noble/hashes": "1.3.3" + "@noble/hashes": "1.4.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -5999,9 +6509,9 @@ ] }, "node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "engines": { "node": ">= 16" }, @@ -6056,9 +6566,9 @@ } }, "node_modules/@npmcli/agent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.0.tgz", - "integrity": "sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", "dev": true, "optional": true, "dependencies": { @@ -6066,16 +6576,16 @@ "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.3" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dev": true, "optional": true, "dependencies": { @@ -6095,16 +6605,16 @@ } }, "node_modules/@octokit/core": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.2.tgz", - "integrity": "sha512-cZUy1gUvd4vttMic7C0lwPed8IYXWYp8kHIMatyhY8t8n3Cpw2ILczkV5pGMPqef7v0bLo0pOHrEHarsau2Ydg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", + "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dev": true, "dependencies": { "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, @@ -6113,12 +6623,12 @@ } }, "node_modules/@octokit/endpoint": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", - "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", "dev": true, "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -6126,13 +6636,13 @@ } }, "node_modules/@octokit/graphql": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", - "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", + "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", "dev": true, "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^12.0.0", + "@octokit/request": "^8.3.0", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -6140,24 +6650,39 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz", - "integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==", + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.5.tgz", - "integrity": "sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", "dev": true, "dependencies": { - "@octokit/types": "^12.4.0" + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/@octokit/plugin-retry": { @@ -6177,10 +6702,25 @@ "@octokit/core": ">=5" } }, + "node_modules/@octokit/plugin-retry/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true + }, + "node_modules/@octokit/plugin-retry/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/plugin-throttling": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.1.3.tgz", - "integrity": "sha512-pfyqaqpc0EXh5Cn4HX9lWYsZ4gGbjnSmUILeu4u2gnuM50K/wIk9s1Pxt3lVeVwekmITgN/nJdoh43Ka+vye8A==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz", + "integrity": "sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==", "dev": true, "dependencies": { "@octokit/types": "^12.2.0", @@ -6193,15 +6733,30 @@ "@octokit/core": "^5.0.0" } }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true + }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/request": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.6.tgz", - "integrity": "sha512-YhPaGml3ncZC1NfXpP3WZ7iliL1ap6tLkAp6MvbK2fTTPytzVUyUesBBogcdMm86uRYO5rHaM1xIWxigWZ17MQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", "dev": true, "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -6209,12 +6764,12 @@ } }, "node_modules/@octokit/request-error": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", - "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", "dev": true, "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -6223,18 +6778,18 @@ } }, "node_modules/@octokit/types": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.4.0.tgz", - "integrity": "sha512-FLWs/AvZllw/AGVs+nJ+ELCDZZJk+kY0zMen118xhL2zD0s1etIUHm1odgjP7epxYU1ln7SZxEUWYop5bhsdgQ==", + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", + "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^19.1.0" + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/@opentelemetry/api": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz", - "integrity": "sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "devOptional": true, "engines": { "node": ">=8.0.0" @@ -6250,10 +6805,9 @@ } }, "node_modules/@parcel/watcher": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.3.0.tgz", - "integrity": "sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==", - "hasInstallScript": true, + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", + "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", @@ -6268,24 +6822,24 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.3.0", - "@parcel/watcher-darwin-arm64": "2.3.0", - "@parcel/watcher-darwin-x64": "2.3.0", - "@parcel/watcher-freebsd-x64": "2.3.0", - "@parcel/watcher-linux-arm-glibc": "2.3.0", - "@parcel/watcher-linux-arm64-glibc": "2.3.0", - "@parcel/watcher-linux-arm64-musl": "2.3.0", - "@parcel/watcher-linux-x64-glibc": "2.3.0", - "@parcel/watcher-linux-x64-musl": "2.3.0", - "@parcel/watcher-win32-arm64": "2.3.0", - "@parcel/watcher-win32-ia32": "2.3.0", - "@parcel/watcher-win32-x64": "2.3.0" + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1" } }, "node_modules/@parcel/watcher-android-arm64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.3.0.tgz", - "integrity": "sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", + "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", "cpu": [ "arm64" ], @@ -6302,9 +6856,9 @@ } }, "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.3.0.tgz", - "integrity": "sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", + "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", "cpu": [ "arm64" ], @@ -6321,9 +6875,9 @@ } }, "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.3.0.tgz", - "integrity": "sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", + "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", "cpu": [ "x64" ], @@ -6340,9 +6894,9 @@ } }, "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.3.0.tgz", - "integrity": "sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", + "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", "cpu": [ "x64" ], @@ -6359,9 +6913,9 @@ } }, "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.3.0.tgz", - "integrity": "sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", + "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", "cpu": [ "arm" ], @@ -6378,9 +6932,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.3.0.tgz", - "integrity": "sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", + "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", "cpu": [ "arm64" ], @@ -6397,9 +6951,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.3.0.tgz", - "integrity": "sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", + "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", "cpu": [ "arm64" ], @@ -6416,9 +6970,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.3.0.tgz", - "integrity": "sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", + "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", "cpu": [ "x64" ], @@ -6435,9 +6989,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.3.0.tgz", - "integrity": "sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", + "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", "cpu": [ "x64" ], @@ -6454,9 +7008,9 @@ } }, "node_modules/@parcel/watcher-wasm": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.3.0.tgz", - "integrity": "sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.1.tgz", + "integrity": "sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA==", "bundleDependencies": [ "napi-wasm" ], @@ -6479,9 +7033,9 @@ "license": "MIT" }, "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.3.0.tgz", - "integrity": "sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", + "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", "cpu": [ "arm64" ], @@ -6498,9 +7052,9 @@ } }, "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.3.0.tgz", - "integrity": "sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", + "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", "cpu": [ "ia32" ], @@ -6517,9 +7071,9 @@ } }, "node_modules/@parcel/watcher-win32-x64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.3.0.tgz", - "integrity": "sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", + "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", "cpu": [ "x64" ], @@ -6547,9 +7101,12 @@ } }, "node_modules/@parcel/watcher/node_modules/node-addon-api": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", - "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", + "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", + "engines": { + "node": "^16 || ^18 || >= 20" + } }, "node_modules/@pedrouid/environment": { "version": "1.0.1", @@ -6640,6 +7197,14 @@ "node": ">=11" } }, + "node_modules/@project-serum/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/@project-serum/borsh": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.5.tgz", @@ -6710,6 +7275,14 @@ "node": ">= 10" } }, + "node_modules/@project-serum/serum/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -6759,44 +7332,286 @@ "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@pythnetwork/client": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/@pythnetwork/client/-/client-2.19.0.tgz", + "integrity": "sha512-0VSQ0NqBOa5EtloXbOVYZ6Wpu8CLP3oaOKVTaUMSX/HXbB00S6G+xdwF7stxo6emgrAMopotx3icEVug5Lpomg==", + "dependencies": { + "@coral-xyz/anchor": "^0.28.1-beta.1", + "@coral-xyz/borsh": "^0.28.0", + "buffer": "^6.0.1" + }, + "peerDependencies": { + "@solana/web3.js": "^1.30.2" + } + }, + "node_modules/@randlabs/communication-bridge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@randlabs/communication-bridge/-/communication-bridge-1.0.1.tgz", + "integrity": "sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==" + }, + "node_modules/@randlabs/myalgo-connect": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@randlabs/myalgo-connect/-/myalgo-connect-1.4.2.tgz", + "integrity": "sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==", + "dependencies": { + "@randlabs/communication-bridge": "1.0.1" + } + }, + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true }, - "node_modules/@pythnetwork/client": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/@pythnetwork/client/-/client-2.19.0.tgz", - "integrity": "sha512-0VSQ0NqBOa5EtloXbOVYZ6Wpu8CLP3oaOKVTaUMSX/HXbB00S6G+xdwF7stxo6emgrAMopotx3icEVug5Lpomg==", - "dependencies": { - "@coral-xyz/anchor": "^0.28.1-beta.1", - "@coral-xyz/borsh": "^0.28.0", - "buffer": "^6.0.1" - }, - "peerDependencies": { - "@solana/web3.js": "^1.30.2" - } + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true }, - "node_modules/@randlabs/communication-bridge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@randlabs/communication-bridge/-/communication-bridge-1.0.1.tgz", - "integrity": "sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==" + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true }, - "node_modules/@randlabs/myalgo-connect": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@randlabs/myalgo-connect/-/myalgo-connect-1.4.2.tgz", - "integrity": "sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==", - "dependencies": { - "@randlabs/communication-bridge": "1.0.1" - } + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true }, - "node_modules/@remix-run/router": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.1.tgz", - "integrity": "sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow==", - "engines": { - "node": ">=14.0.0" - } + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true }, "node_modules/@rushstack/eslint-patch": { "version": "1.6.1", @@ -6805,21 +7620,126 @@ "dev": true }, "node_modules/@safe-global/safe-apps-provider": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/@safe-global/safe-apps-provider/-/safe-apps-provider-0.18.2.tgz", - "integrity": "sha512-yHHAcppwE7aIUWEeZiYAClQzZCdP5l0Kbd0CBlhKAsTcqZnx4Gh3G3G3frY5LlWcGzp9qmQ5jv+J1GBpaZLDgw==", + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@safe-global/safe-apps-provider/-/safe-apps-provider-0.18.3.tgz", + "integrity": "sha512-f/0cNv3S4v7p8rowAjj0hDCg8Q8P/wBjp5twkNWeBdvd0RDr7BuRBPPk74LCqmjQ82P+1ltLlkmVFSmxTIT7XQ==", "dependencies": { - "@safe-global/safe-apps-sdk": "^9.0.0", + "@safe-global/safe-apps-sdk": "^9.1.0", "events": "^3.3.0" } }, + "node_modules/@safe-global/safe-apps-provider/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@safe-global/safe-apps-provider/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@safe-global/safe-apps-provider/node_modules/@safe-global/safe-apps-sdk": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@safe-global/safe-apps-sdk/-/safe-apps-sdk-9.0.0.tgz", - "integrity": "sha512-fEqmQBU3JqTjORSl3XYrcaxdxkUqeeM39qsQjqCzzTHioN8DEfg3JCLq6EBoXzcKTVOYi8SPzLV7KJccdDw+4w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@safe-global/safe-apps-sdk/-/safe-apps-sdk-9.1.0.tgz", + "integrity": "sha512-N5p/ulfnnA2Pi2M3YeWjULeWbjo7ei22JwU/IXnhoHzKq3pYCN6ynL9mJBOlvDVv892EgLPCWCOwQk/uBT2v0Q==", "dependencies": { "@safe-global/safe-gateway-typescript-sdk": "^3.5.3", - "viem": "^1.6.0" + "viem": "^2.1.1" + } + }, + "node_modules/@safe-global/safe-apps-provider/node_modules/abitype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.0.tgz", + "integrity": "sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@safe-global/safe-apps-provider/node_modules/isows": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.4.tgz", + "integrity": "sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/@safe-global/safe-apps-provider/node_modules/viem": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.15.1.tgz", + "integrity": "sha512-Vrveen3vDOJyPf8Q8TDyWePG2pTdK6IpSi4P6qlvAP+rXkAeqRvwYBy9AmGm+BeYpCETAyTT0SrCP6458XSt+w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@scure/bip32": "1.3.2", + "@scure/bip39": "1.2.1", + "abitype": "1.0.0", + "isows": "1.0.4", + "ws": "8.17.1" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@safe-global/safe-apps-provider/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/@safe-global/safe-apps-sdk": { @@ -6871,7 +7791,7 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "node_modules/@scure/bip32/node_modules/@noble/curves/node_modules/@noble/hashes": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", @@ -6882,6 +7802,17 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@scure/bip39": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", @@ -6894,6 +7825,17 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@semantic-release/commit-analyzer": { "version": "10.0.4", "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.4.tgz", @@ -6926,7 +7868,6 @@ }, "node_modules/@semantic-release/git": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", "dev": true, "dependencies": { @@ -7214,9 +8155,9 @@ } }, "node_modules/@semantic-release/npm/node_modules/npm-run-path": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", - "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { "path-key": "^4.0.0" @@ -7312,6 +8253,18 @@ "node": ">=16" } }, + "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", @@ -7331,9 +8284,9 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sindresorhus/merge-streams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", - "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, "engines": { "node": ">=18" @@ -7343,648 +8296,743 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.1.tgz", - "integrity": "sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.0.1.tgz", + "integrity": "sha512-Jb7jg4E+C+uvrUQi+h9kbILY6ts6fglKZzseMCHlH9ayq+1f5QdpYf8MV/xppuiN6DAMJAmwGz53GwP3213dmA==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/chunked-blob-reader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz", - "integrity": "sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", + "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.1.tgz", - "integrity": "sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", + "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", "dependencies": { - "@smithy/util-base64": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/config-resolver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.1.tgz", - "integrity": "sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.2.tgz", + "integrity": "sha512-wUyG6ezpp2sWAvfqmSYTROwFUmJqKV78GLf55WODrosBcT0BAMd9bOLO4HRhynWBgAobPml2cF9ZOdgCe00r+g==", "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.1.tgz", - "integrity": "sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.1.tgz", + "integrity": "sha512-R8Pzrr2v2oGUoj4CTZtKPr87lVtBsz7IUBGhSwS1kc6Cj0yPwNdYbkzhFsxhoDE9+BPl09VN/6rFsW9GJzWnBA==", "dependencies": { - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/util-middleware": "^3.0.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz", - "integrity": "sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.1.tgz", + "integrity": "sha512-htndP0LwHdE3R3Nam9ZyVWhwPYOmD4xCL79kqvNxy8u/bv0huuy574CSiRY4cvEICgimv8jlVfLeZ7zZqbnB2g==", "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-codec": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz", - "integrity": "sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.0.tgz", + "integrity": "sha512-XFDl70ZY+FabSnTX3oQGGYvdbEaC8vPEFkCEOoBkumqaZIwR1WjjJCDu2VMXlHbKWKshefWXdT0NYteL5v6uFw==", "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.9.1", - "@smithy/util-hex-encoding": "^2.1.1", - "tslib": "^2.5.0" + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^3.1.0", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.1.tgz", - "integrity": "sha512-JvEdCmGlZUay5VtlT8/kdR6FlvqTDUiJecMjXsBb0+k1H/qc9ME5n2XKPo8q/MZwEIA1GmGgYMokKGjVvMiDow==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.2.tgz", + "integrity": "sha512-6147vdedQGaWn3Nt4P1KV0LuV8IH4len1SAeycyko0p8oRLWFyYyx0L8JHGclePDSphkjxZqBHtyIfyupCaTGg==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/eventstream-serde-universal": "^3.0.2", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.1.tgz", - "integrity": "sha512-EqNqXYp3+dk//NmW3NAgQr9bEQ7fsu/CcxQmTiq07JlaIcne/CBWpMZETyXm9w5LXkhduBsdXdlMscfDUDn2fA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.1.tgz", + "integrity": "sha512-6+B8P+5Q1mll4u7IoI7mpmYOSW3/c2r3WQoYLdqOjbIKMixJFGmN79ZjJiNMy4X2GZ4We9kQ6LfnFuczSlhcyw==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.1.tgz", - "integrity": "sha512-LF882q/aFidFNDX7uROAGxq3H0B7rjyPkV6QDn6/KDQ+CG7AFkRccjxRf1xqajq/Pe4bMGGr+VKAaoF6lELIQw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.2.tgz", + "integrity": "sha512-DLtmGAfqxZAql8rB+HqyPlUne22u3EEVj+hxlUjgXk0hXt+SfLGK0ljzRFmiWQ3qGpHu1NdJpJA9e5JE/dJxFw==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/eventstream-serde-universal": "^3.0.2", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.1.tgz", - "integrity": "sha512-LR0mMT+XIYTxk4k2fIxEA1BPtW3685QlqufUEUAX1AJcfFfxNDKEvuCRZbO8ntJb10DrIFVJR9vb0MhDCi0sAQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.2.tgz", + "integrity": "sha512-d3SgAIQ/s4EbU8HAHJ8m2MMJPAL30nqJktyVgvqZWNznA8PJl61gJw5gj/yjIt/Fvs3d4fU8FmPPAhdp2yr/7A==", "dependencies": { - "@smithy/eventstream-codec": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/eventstream-codec": "^3.1.0", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz", - "integrity": "sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.2.tgz", + "integrity": "sha512-0nW6tLK0b7EqSsfKvnOmZCgJqnodBAnvqcrlC5dotKfklLedPTRGsQamSVbVDWyuU/QGg+YbZDJUQ0CUufJXZQ==", + "dependencies": { + "@smithy/protocol-http": "^4.0.1", + "@smithy/querystring-builder": "^3.0.1", + "@smithy/types": "^3.1.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.0.tgz", + "integrity": "sha512-lKEHDN6bLzYdx5cFmdMHfYVmmTZTmjphwPBSumgkaniEYwRAXnbDEGETeuzfquS9Py1aH6cmqzXWxxkD7mV3sA==", + "dependencies": { + "@smithy/chunked-blob-reader": "^3.0.0", + "@smithy/chunked-blob-reader-native": "^3.0.0", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-node": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.1.tgz", + "integrity": "sha512-w2ncjgk2EYO2+WhAsSQA8owzoOSY7IL1qVytlwpnL1pFGWTjIoIh5nROkEKXY51unB63bMGZqDiVoXaFbyKDlg==", "dependencies": { - "@smithy/protocol-http": "^3.1.1", - "@smithy/querystring-builder": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-base64": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@smithy/hash-blob-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.1.tgz", - "integrity": "sha512-jizu1+2PAUjiGIfRtlPEU8Yo6zn+d78ti/ZHDesdf1SUn2BuZW433JlPoCOLH3dBoEEvTgLvQ8tUGSoTTALA+A==", + "node_modules/@smithy/hash-node/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "@smithy/chunked-blob-reader": "^2.1.1", - "@smithy/chunked-blob-reader-native": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@smithy/hash-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.1.tgz", - "integrity": "sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==", + "node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/hash-stream-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.1.1.tgz", - "integrity": "sha512-VgDaKcfCy0iHcmtAZgZ3Yw9g37Gkn2JsQiMtFQXUh8Wmo3GfNgDwLOtdhJ272pOT7DStzpe9cNr+eV5Au8KfQA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.0.tgz", + "integrity": "sha512-OkU9vjN17yYsXTSrouctZn2iYwG4z8WSc7F50+9ogG2crOtMopkop+22j35tX2ry2i/vLRCYgnqEmBWfvnYT2g==", "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz", - "integrity": "sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.1.tgz", + "integrity": "sha512-RSNF/32BKygXKKMyS7koyuAq1rcdW5p5c4EFa77QenBFze9As+JiRnV9OWBh2cB/ejGZalEZjvIrMLHwJl7aGA==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/is-array-buffer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz", - "integrity": "sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/md5-js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.1.1.tgz", - "integrity": "sha512-L3MbIYBIdLlT+MWTYrdVSv/dow1+6iZ1Ad7xS0OHxTTs17d753ZcpOV4Ro7M7tRAVWML/sg2IAp/zzCb6aAttg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.1.tgz", + "integrity": "sha512-wQa0YGsR4Zb1GQLGwOOgRAbkj22P6CFGaFzu5bKk8K4HVNIC2dBlIxqZ/baF0pLiSZySAPdDZT7CdZ7GkGXt5A==", "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz", - "integrity": "sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.1.tgz", + "integrity": "sha512-6QdK/VbrCfXD5/QolE2W/ok6VqxD+SM28Ds8iSlEHXZwv4buLsvWyvoEEy0322K/g5uFgPzBmZjGqesTmPL+yQ==", "dependencies": { - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz", - "integrity": "sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.2.tgz", + "integrity": "sha512-gWEaGYB3Bei17Oiy/F2IlUPpBazNXImytoOdJ1xbrUOaJKAOiUhx8/4FOnYLLJHdAwa9PlvJ2ULda2f/Dnwi9w==", "dependencies": { - "@smithy/middleware-serde": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/middleware-serde": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-middleware": "^3.0.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-retry": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz", - "integrity": "sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/service-error-classification": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.4.tgz", + "integrity": "sha512-Tu+FggbLNF5G9L6Wi8o32Mg4bhlBInWlhhaFKyytGRnkfxGopxFVXJQn7sjZdFYJyTz6RZZa06tnlvavUgtoVg==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/service-error-classification": "^3.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-retry/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-serde": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz", - "integrity": "sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.1.tgz", + "integrity": "sha512-ak6H/ZRN05r5+SR0/IUc5zOSyh2qp3HReg1KkrnaSLXmncy9lwOjNqybX4L4x55/e5mtVDn1uf/gQ6bw5neJPw==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-stack": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz", - "integrity": "sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.1.tgz", + "integrity": "sha512-fS5uT//y1SlBdkzIvgmWQ9FufwMXrHSSbuR25ygMy1CRDIZkcBMoF4oTMYNfR9kBlVBcVzlv7joFdNrFuQirPA==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/node-config-provider": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz", - "integrity": "sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.1.tgz", + "integrity": "sha512-z5G7+ysL4yUtMghUd2zrLkecu0mTfnYlt5dR76g/HsFqf7evFazwiZP1ag2EJenGxNBDwDM5g8nm11NPogiUVA==", "dependencies": { - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/node-http-handler": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz", - "integrity": "sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.0.1.tgz", + "integrity": "sha512-hlBI6MuREA4o1wBMEt+QNhUzoDtFFvwR6ecufimlx9D79jPybE/r8kNorphXOi91PgSO9S2fxRjcKCLk7Jw8zA==", "dependencies": { - "@smithy/abort-controller": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/querystring-builder": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/querystring-builder": "^3.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/property-provider": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.1.tgz", - "integrity": "sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.1.tgz", + "integrity": "sha512-YknOMZcQkB5on+MU0DvbToCmT2YPtTETMXW0D3+/Iln7ezT+Zm1GMHhCW1dOH/X/+LkkQD9aXEoCX/B10s4Xdw==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/protocol-http": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.1.1.tgz", - "integrity": "sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.1.tgz", + "integrity": "sha512-eBhm9zwcFPEazc654c0BEWtxYAzrw+OhoSf5pkwKzfftWKXRoqEhwOE2Pvn30v0iAdo7Mfsfb6pi1NnZlGCMpg==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/querystring-builder": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz", - "integrity": "sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.1.tgz", + "integrity": "sha512-vKitpnG/2KOMVlx3x1S3FkBH075EROG3wcrcDaNerQNh8yuqnSL23btCD2UyX4i4lpPzNW6VFdxbn2Z25b/g5Q==", "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-uri-escape": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/querystring-parser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz", - "integrity": "sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.1.tgz", + "integrity": "sha512-Qt8DMC05lVS8NcQx94lfVbZSX+2Ym7032b/JR8AlboAa/D669kPzqb35dkjkvAG6+NWmUchef3ENtrD6F+5n8Q==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/service-error-classification": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz", - "integrity": "sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.1.tgz", + "integrity": "sha512-ubFUvIePjDCyIzZ+pLETqNC6KXJ/fc6g+/baqel7Zf6kJI/kZKgjwkCI7zbUhoUuOZ/4eA/87YasVu40b/B4bA==", "dependencies": { - "@smithy/types": "^2.9.1" + "@smithy/types": "^3.1.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz", - "integrity": "sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.1.tgz", + "integrity": "sha512-nD6tXIX2126/P9e3wqRY1bm9dTtPZwRDyjVOd18G28o+1UOG+kOVgUwujE795HslSuPlEgqzsH5sgNP1hDjj9g==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/signature-v4": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.1.tgz", - "integrity": "sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.1.0.tgz", + "integrity": "sha512-m0/6LW3IQ3/JBcdhqjpkpABPTPhcejqeAn0U877zxBdNLiWAnG2WmCe5MfkUyVuvpFTPQnQwCo/0ZBR4uF5kxg==", "dependencies": { - "@smithy/eventstream-codec": "^2.1.1", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-uri-escape": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/types": "^3.1.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@smithy/smithy-client": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.3.1.tgz", - "integrity": "sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.2.tgz", + "integrity": "sha512-f3eQpczBOFUtdT/ptw2WpUKu1qH1K7xrssrSiHYtd9TuLXkvFqb88l9mz9FHeUVNSUxSnkW1anJnw6rLwUKzQQ==", "dependencies": { - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-stream": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "@smithy/util-stream": "^3.0.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/types": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.9.1.tgz", - "integrity": "sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.1.0.tgz", + "integrity": "sha512-qi4SeCVOUPjhSSZrxxB/mB8DrmuSFUcJnD9KXjuP+7C3LV/KFV4kpuUSH3OHDZgQB9TEH/1sO/Fq/5HyaK9MPw==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/url-parser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.1.tgz", - "integrity": "sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.1.tgz", + "integrity": "sha512-G140IlNFlzYWVCedC4E2d6NycM1dCUbe5CnsGW1hmGt4hYKiGOw0v7lVru9WAn5T2w09QEjl4fOESWjGmCvVmg==", "dependencies": { - "@smithy/querystring-parser": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/querystring-parser": "^3.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-base64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.1.1.tgz", - "integrity": "sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-base64/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@smithy/util-body-length-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz", - "integrity": "sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-body-length-node": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz", - "integrity": "sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-buffer-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz", - "integrity": "sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dependencies": { - "@smithy/is-array-buffer": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-config-provider": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz", - "integrity": "sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz", - "integrity": "sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.4.tgz", + "integrity": "sha512-sXtin3Mue3A3xo4+XkozpgPptgmRwvNPOqTvb3ANGTCzzoQgAPBNjpE+aXCINaeSMXwHmv7E2oEn2vWdID+SAQ==", "dependencies": { - "@smithy/property-provider": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz", - "integrity": "sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.4.tgz", + "integrity": "sha512-CUF6TyxLh3CgBRVYgZNOPDfzHQjeQr0vyALR6/DkQkOm7rNfGEzW1BRFi88C73pndmfvoiIT7ochuT76OPz9Dw==", "dependencies": { - "@smithy/config-resolver": "^2.1.1", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/config-resolver": "^3.0.2", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, "node_modules/@smithy/util-endpoints": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz", - "integrity": "sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.2.tgz", + "integrity": "sha512-4zFOcBFQvifd2LSD4a1dKvfIWWwh4sWNtS3oZ7mpob/qPPmJseqKB148iT+hWCDsG//TmI+8vjYPgZdvnkYlTg==", "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-hex-encoding": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz", - "integrity": "sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-middleware": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.1.tgz", - "integrity": "sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.1.tgz", + "integrity": "sha512-WRODCQtUsO7vIvfrdxS8RFPeLKcewYtaCglZsBsedIKSUGIIvMlZT5oh+pCe72I+1L+OjnZuqRNpN2LKhWA4KQ==", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-retry": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.1.tgz", - "integrity": "sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.1.tgz", + "integrity": "sha512-5lRtYm+8fNFEUTdqZXg5M4ppVp40rMIJfR1TpbHAhKQgPIDpWT+iYMaqgnwEbtpi9U1smyUOPv5Sg+M1neOBgw==", "dependencies": { - "@smithy/service-error-classification": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/service-error-classification": "^3.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-stream": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.1.tgz", - "integrity": "sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.2.tgz", + "integrity": "sha512-n5Obp5AnlI6qHo8sbupwrcpBe6vFp4qkl0SRNuExKPNrH3ABAMG2ZszRTIUIv2b4AsFrCO+qiy4uH1Q3z1dxTA==", "dependencies": { - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/types": "^3.1.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-stream/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@smithy/util-uri-escape": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz", - "integrity": "sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.1.1.tgz", - "integrity": "sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-utf8/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@smithy/util-waiter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.1.1.tgz", - "integrity": "sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.0.1.tgz", + "integrity": "sha512-wwnrVQdjQxvWGOAiLmqlEhENGCcDIN+XJ/+usPOgSZObAslrCXgKlkX7rNVwIWW2RhPguTKthvF+4AoO0Z6KpA==", "dependencies": { - "@smithy/abort-controller": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@solana/buffer-layout": { @@ -8012,83 +9060,144 @@ "node": ">= 10" } }, + "node_modules/@solana/codecs": { + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-preview.2.tgz", + "integrity": "sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==", + "dependencies": { + "@solana/codecs-core": "2.0.0-preview.2", + "@solana/codecs-data-structures": "2.0.0-preview.2", + "@solana/codecs-numbers": "2.0.0-preview.2", + "@solana/codecs-strings": "2.0.0-preview.2", + "@solana/options": "2.0.0-preview.2" + } + }, "node_modules/@solana/codecs-core": { - "version": "2.0.0-experimental.8618508", - "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-experimental.8618508.tgz", - "integrity": "sha512-JCz7mKjVKtfZxkuDtwMAUgA7YvJcA2BwpZaA1NOLcted4OMC4Prwa3DUe3f3181ixPYaRyptbF0Ikq2MbDkYEA==" + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-preview.2.tgz", + "integrity": "sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==", + "dependencies": { + "@solana/errors": "2.0.0-preview.2" + } }, "node_modules/@solana/codecs-data-structures": { - "version": "2.0.0-experimental.8618508", - "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-experimental.8618508.tgz", - "integrity": "sha512-sLpjL9sqzaDdkloBPV61Rht1tgaKq98BCtIKRuyscIrmVPu3wu0Bavk2n/QekmUzaTsj7K1pVSniM0YqCdnEBw==", + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-preview.2.tgz", + "integrity": "sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==", "dependencies": { - "@solana/codecs-core": "2.0.0-experimental.8618508", - "@solana/codecs-numbers": "2.0.0-experimental.8618508" + "@solana/codecs-core": "2.0.0-preview.2", + "@solana/codecs-numbers": "2.0.0-preview.2", + "@solana/errors": "2.0.0-preview.2" } }, "node_modules/@solana/codecs-numbers": { - "version": "2.0.0-experimental.8618508", - "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-experimental.8618508.tgz", - "integrity": "sha512-EXQKfzFr3CkKKNzKSZPOOOzchXsFe90TVONWsSnVkonO9z+nGKALE0/L9uBmIFGgdzhhU9QQVFvxBMclIDJo2Q==", + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-preview.2.tgz", + "integrity": "sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==", "dependencies": { - "@solana/codecs-core": "2.0.0-experimental.8618508" + "@solana/codecs-core": "2.0.0-preview.2", + "@solana/errors": "2.0.0-preview.2" } }, "node_modules/@solana/codecs-strings": { - "version": "2.0.0-experimental.8618508", - "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-experimental.8618508.tgz", - "integrity": "sha512-b2yhinr1+oe+JDmnnsV0641KQqqDG8AQ16Z/x7GVWO+AWHMpRlHWVXOq8U1yhPMA4VXxl7i+D+C6ql0VGFp0GA==", + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-preview.2.tgz", + "integrity": "sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==", "dependencies": { - "@solana/codecs-core": "2.0.0-experimental.8618508", - "@solana/codecs-numbers": "2.0.0-experimental.8618508" + "@solana/codecs-core": "2.0.0-preview.2", + "@solana/codecs-numbers": "2.0.0-preview.2", + "@solana/errors": "2.0.0-preview.2" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22" } }, + "node_modules/@solana/errors": { + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-preview.2.tgz", + "integrity": "sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==", + "dependencies": { + "chalk": "^5.3.0", + "commander": "^12.0.0" + }, + "bin": { + "errors": "bin/cli.js" + } + }, + "node_modules/@solana/errors/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@solana/errors/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "engines": { + "node": ">=18" + } + }, "node_modules/@solana/options": { - "version": "2.0.0-experimental.8618508", - "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-experimental.8618508.tgz", - "integrity": "sha512-fy/nIRAMC3QHvnKi63KEd86Xr/zFBVxNW4nEpVEU2OT0gCEKwHY4Z55YHf7XujhyuM3PNpiBKg/YYw5QlRU4vg==", + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-preview.2.tgz", + "integrity": "sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==", "dependencies": { - "@solana/codecs-core": "2.0.0-experimental.8618508", - "@solana/codecs-numbers": "2.0.0-experimental.8618508" + "@solana/codecs-core": "2.0.0-preview.2", + "@solana/codecs-numbers": "2.0.0-preview.2" } }, "node_modules/@solana/spl-token": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.10.tgz", - "integrity": "sha512-YFCtV8yC64Ef2w2HKOSNYwcsMt70e/GLMZYkZbdD6tYOlp4NnjUkY1EYxtIbVhsm3LSXoJV43u5chnMni+gr7w==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.6.tgz", + "integrity": "sha512-1nCnUqfHVtdguFciVWaY/RKcQz1IF4b31jnKgAmjU9QVN1q7dRUkTEWJZgTYIEtsULjVnC9jRqlhgGN39WbKKA==", "dependencies": { "@solana/buffer-layout": "^4.0.0", "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-metadata": "^0.1.2", + "@solana/spl-token-group": "^0.0.4", + "@solana/spl-token-metadata": "^0.1.4", "buffer": "^6.0.3" }, "engines": { "node": ">=16" }, "peerDependencies": { - "@solana/web3.js": "^1.87.6" + "@solana/web3.js": "^1.91.6" + } + }, + "node_modules/@solana/spl-token-group": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.4.tgz", + "integrity": "sha512-7+80nrEMdUKlK37V6kOe024+T7J4nNss0F8LQ9OOPYdWCCfJmsGUzVx2W3oeizZR4IHM6N4yC9v1Xqwc3BTPWw==", + "dependencies": { + "@solana/codecs": "2.0.0-preview.2", + "@solana/spl-type-length-value": "0.1.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.91.6" } }, "node_modules/@solana/spl-token-metadata": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.2.tgz", - "integrity": "sha512-hJYnAJNkDrtkE2Q41YZhCpeOGU/0JgRFXbtrtOuGGeKc3pkEUHB9DDoxZAxx+XRno13GozUleyBi0qypz4c3bw==", - "dependencies": { - "@solana/codecs-core": "2.0.0-experimental.8618508", - "@solana/codecs-data-structures": "2.0.0-experimental.8618508", - "@solana/codecs-numbers": "2.0.0-experimental.8618508", - "@solana/codecs-strings": "2.0.0-experimental.8618508", - "@solana/options": "2.0.0-experimental.8618508", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.4.tgz", + "integrity": "sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==", + "dependencies": { + "@solana/codecs": "2.0.0-preview.2", "@solana/spl-type-length-value": "0.1.0" }, "engines": { "node": ">=16" }, "peerDependencies": { - "@solana/web3.js": "^1.87.6" + "@solana/web3.js": "^1.91.6" } }, "node_modules/@solana/spl-type-length-value": { @@ -8132,15 +9241,15 @@ } }, "node_modules/@solana/web3.js": { - "version": "1.87.6", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.87.6.tgz", - "integrity": "sha512-LkqsEBgTZztFiccZZXnawWa8qNCATEqE97/d0vIwjTclmVlc8pBpD1DmjfVHtZ1HS5fZorFlVhXfpwnCNDZfyg==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@noble/curves": "^1.2.0", - "@noble/hashes": "^1.3.1", - "@solana/buffer-layout": "^4.0.0", - "agentkeepalive": "^4.3.0", + "version": "1.93.0", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.93.0.tgz", + "integrity": "sha512-suf4VYwWxERz4tKoPpXCRHFRNst7jmcFUaD65kII+zg9urpy5PeeqgLV6G5eWGzcVzA9tZeXOju1A1Y+0ojEVw==", + "dependencies": { + "@babel/runtime": "^7.24.7", + "@noble/curves": "^1.4.0", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "agentkeepalive": "^4.5.0", "bigint-buffer": "^1.1.5", "bn.js": "^5.2.1", "borsh": "^0.7.0", @@ -8148,14 +9257,21 @@ "buffer": "6.0.3", "fast-stable-stringify": "^1.0.0", "jayson": "^4.1.0", - "node-fetch": "^2.6.12", - "rpc-websockets": "^7.5.1", - "superstruct": "^0.14.2" + "node-fetch": "^2.7.0", + "rpc-websockets": "^9.0.0", + "superstruct": "^1.0.4" + } + }, + "node_modules/@solana/web3.js/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" } }, "node_modules/@solendprotocol/solend-sdk": { "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@solendprotocol/solend-sdk/-/solend-sdk-0.7.6.tgz", "integrity": "sha512-03jJabwZo/Sb0vDy4kL6rzV+OsQrr9ga/BmxE++fk8tDZK7tcwF/iznAmzQzWgBDZzYR2TXUnKXT6qfuG4Pzqw==", "dependencies": { "@marinade.finance/marinade-ts-sdk": "^3.1.1", @@ -8180,6 +9296,23 @@ "typedoc-plugin-cname": "^1.0.1" } }, + "node_modules/@solendprotocol/solend-sdk/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, "node_modules/@solendprotocol/solend-sdk/node_modules/@types/bn.js": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", @@ -8188,6 +9321,14 @@ "@types/node": "*" } }, + "node_modules/@solendprotocol/solend-sdk/node_modules/@types/bn.js/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@solendprotocol/solend-sdk/node_modules/axios": { "version": "0.24.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", @@ -8196,76 +9337,6 @@ "follow-redirects": "^1.14.4" } }, - "node_modules/@solendprotocol/solend-sdk/node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "peer": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@solendprotocol/solend-sdk/node_modules/marked": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.7.tgz", - "integrity": "sha512-BJXxkuIfJchcXOJWTT2DOL+yFWifFv2yGYOUzvXg8Qz610QKw+sHCvTMYwA+qWGhlA2uivBezChZ/pBy1tWdkQ==", - "peer": true, - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">= 8.16.2" - } - }, - "node_modules/@solendprotocol/solend-sdk/node_modules/typedoc": { - "version": "0.20.37", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.20.37.tgz", - "integrity": "sha512-9+qDhdc4X00qTNOtii6QX2z7ndAeWVOso7w3MPSoSJdXlVhpwPfm1yEp4ooKuWA9fiQILR8FKkyjmeqa13hBbw==", - "peer": true, - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^9.1.0", - "handlebars": "^4.7.7", - "lodash": "^4.17.21", - "lunr": "^2.3.9", - "marked": "~2.0.3", - "minimatch": "^3.0.0", - "progress": "^2.0.3", - "shelljs": "^0.8.4", - "shiki": "^0.9.3", - "typedoc-default-themes": "^0.12.10" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 10.8.0" - }, - "peerDependencies": { - "typescript": "3.9.x || 4.0.x || 4.1.x || 4.2.x" - } - }, - "node_modules/@solendprotocol/solend-sdk/node_modules/typedoc-plugin-cname": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typedoc-plugin-cname/-/typedoc-plugin-cname-1.0.1.tgz", - "integrity": "sha512-f97SS5RzDCVBa7Frg1VketIMAkEl3OTvBs9wM8lLEkJVWCIG2yXnszglA82on39gFwQ1tyq8tiuxRgb4569GpA==", - "peerDependencies": { - "typedoc": "^0.20.27" - } - }, - "node_modules/@solendprotocol/solend-sdk/node_modules/typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, "node_modules/@solflare-wallet/utl-sdk": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@solflare-wallet/utl-sdk/-/utl-sdk-1.4.0.tgz", @@ -8432,9 +9503,9 @@ } }, "node_modules/@stencil/core": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.9.0.tgz", - "integrity": "sha512-aWSkhBmk3yPwRAkUwBbzRwmdhb8hKiQ/JMr9m5jthpBZLjtppYbzz6PN2MhSMDfRp6K93eQw5WogSEH4HHuB6w==", + "version": "4.18.3", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.18.3.tgz", + "integrity": "sha512-8yoG5AFQYEPocVtuoc5kvRS0Hku0MoDWDUpADRaXPVHsOFLmxR16LJENj25ucCz5GEfeTGQ/tCE8JAypPmr/fQ==", "bin": { "stencil": "bin/stencil" }, @@ -8452,409 +9523,454 @@ } }, "node_modules/@swagger-api/apidom-ast": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-0.89.0.tgz", - "integrity": "sha512-Rqfzqo8On7ddhmsKFWsCLsfCJRlOYbIM1itYnxpnj2wxrxQ8v0b91ecFU/Hs/NgDuncvbZYf7gD+71g0QAJrww==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-0.99.2.tgz", + "integrity": "sha512-poNlXWAU2XBl192+lo5sC6loB3qGvwK30V1pta6Hs200KeTayVsMMRL4R6wDDYEtsbv7M3vQaFKcRGbYUk/SgA==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-error": "^0.89.0", + "@swagger-api/apidom-error": "^0.99.0", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "unraw": "^3.0.0" } }, "node_modules/@swagger-api/apidom-core": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-0.89.0.tgz", - "integrity": "sha512-GVjcvNEh1aPeWZHoVxPx9jMwff0nKPkKjuKyTOrMCCCGIO92J5o42qYxcerW4FTKlnpXvc2vObl0B5X5yh2jIA==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-0.99.2.tgz", + "integrity": "sha512-deudG9eCxqgPnZyIcZzpmDxF0cja0hdPFS2hB0Op6aB4TKc9mOP1+1iEIDI3Tlx/nzgIayyAl1bblyhK3yH5fQ==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^0.89.0", - "@swagger-api/apidom-error": "^0.89.0", + "@swagger-api/apidom-ast": "^0.99.2", + "@swagger-api/apidom-error": "^0.99.0", "@types/ramda": "~0.29.6", "minim": "~0.23.8", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "short-unique-id": "^5.0.2", "stampit": "^4.3.2" } }, "node_modules/@swagger-api/apidom-error": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-0.89.0.tgz", - "integrity": "sha512-e2xt6Mjf58yfotElZUvM1aglvlTGN8pcJR/kotNc+JmYBTw9gzB8mDjBya4z1Ze0Z++Cp2FMTVpd8n0QceQqKQ==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-0.99.0.tgz", + "integrity": "sha512-ZdFdn+GeIo23X2GKFrfH4Y5KY8yTzVF1l/Mqjs8+nD30LTbYg6f3ITHn429dk8fDT3NT69fG+gGm60FAFaKkeQ==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7" } }, "node_modules/@swagger-api/apidom-json-pointer": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-0.89.0.tgz", - "integrity": "sha512-42D4HG2hsBU3qYX2yKW743/4dGp0rKyjtal3s+Rdae46rQuqXOItU7PQLYyORpM4Pka6wTwAKlhnz3raYH4zPQ==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-0.99.2.tgz", + "integrity": "sha512-bZENmE3H2si1yP38VLUAdhoMWNxkh98+/dCOESaw3R5zXHG04di3ShbYsCG0StkigF+eCfCdaj6XoikQOGSkiA==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-error": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-error": "^0.99.0", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-ns-api-design-systems": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-0.89.0.tgz", - "integrity": "sha512-RQzXwWi0GXIo1Y89KfgaCA8B/vic094YRtZbj/Y7tzxTvFwhtBdpHn0ur/Nm+zSb+FlFq0YZZS7jIJ/ekPB1FQ==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-0.99.2.tgz", + "integrity": "sha512-854ioZ/FB5DNiJcMinD9/a6dj6h/poOsKcb4POhPTzMSM0fHLIQUp//Ufhx7qL6qsepwtLapkgZ3/hAYN7lnBg==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-error": "^0.89.0", - "@swagger-api/apidom-ns-openapi-3-1": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-error": "^0.99.0", + "@swagger-api/apidom-ns-openapi-3-1": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-ns-asyncapi-2": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-0.89.0.tgz", - "integrity": "sha512-3JMHw/cyqHSTKpAGWtC0jjnlhI2qqhd3nBdlDbWCk329bVoLncSzUaXk3ozmRb9qeZdnrEHYb0H9WaeByT0lGA==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-0.99.2.tgz", + "integrity": "sha512-HF38kCszKYQqhQ6VMEMqd5r7gPGBRpHwPcoYaRJSDeOST/qLLG78xpoCJKQEyL3PQprea0gXKz1LG1uslDHgtQ==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-json-schema-draft-7": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-json-schema-draft-7": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-0.89.0.tgz", - "integrity": "sha512-7gXy3BPLkS7p7dmz9Hbf7ia4lH0NAaW2i7GcQdpX48pAUTR0/7Y+BPd38sgRxIOpebReWxnoAcKAfkak/KCQ3A==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-0.99.2.tgz", + "integrity": "sha512-vgCRaqDLI/SmTECZeKO47RGFFx6MCpOcbSm60sV0/ZJxeK+TgkNjIRJTyuRQNts44K863CWgY+bwzzn1zhNqUg==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^0.89.0", - "@swagger-api/apidom-core": "^0.89.0", + "@swagger-api/apidom-ast": "^0.99.2", + "@swagger-api/apidom-core": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.4" } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-6": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-0.89.0.tgz", - "integrity": "sha512-Ed3hpPAhHJHs25HoBt4ySrfbfUSlOdU4uXyVsumjLSHSSQxd6NfIovKOSdYllSRYXrTmkfE50DrentYozDpBfQ==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-0.99.2.tgz", + "integrity": "sha512-ayKGsd65a6p/k4s5L2el+vMoMi8kc/bLXVszWszFDET1eZNvhKwEMLylGzKMfnwAFgpj+kJOKn4MZsD6PK6U/A==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-error": "^0.89.0", - "@swagger-api/apidom-ns-json-schema-draft-4": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-error": "^0.99.0", + "@swagger-api/apidom-ns-json-schema-draft-4": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.4" } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-7": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-0.89.0.tgz", - "integrity": "sha512-VF33y3qettfHiS7FtenRfqYpGkZSlXb+KqSNKefuPvp7l1EjR3lnl+pszCKcIIXXTcz5Cgt6OVx9dHsdjsNW1g==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-0.99.2.tgz", + "integrity": "sha512-Rn2YeQKxj6hSijQAzGRRxMYDRIedqHjE69z9xigVbvm+iDXxLJIwasuzFa7BIMRDZF5eAJkBPHXTiU9cXVsl6w==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-error": "^0.89.0", - "@swagger-api/apidom-ns-json-schema-draft-6": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-error": "^0.99.0", + "@swagger-api/apidom-ns-json-schema-draft-6": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.4" } }, "node_modules/@swagger-api/apidom-ns-openapi-2": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-0.89.0.tgz", - "integrity": "sha512-M9k9heFnVGbuo36oiynOULk6ROWDHBpInftmZUSYvsfvgsQDCLK+rZvMr9lrk4cSUV7OcqSG9r4NdrXt7dZxYg==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-0.99.2.tgz", + "integrity": "sha512-4YlBvMkxSJIWrOQmsHiVuQ2VkbcWgUnOm7uiRq+8d88ur9mKI5XbP5iUvxCASuONmCqlaSU2+qoM1qesy73XPw==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-error": "^0.89.0", - "@swagger-api/apidom-ns-json-schema-draft-4": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-error": "^0.99.0", + "@swagger-api/apidom-ns-json-schema-draft-4": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-ns-openapi-3-0": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-0.89.0.tgz", - "integrity": "sha512-9kbGRhjt+cpN6eqrwJ3GktoEGLXP2/9wDTQIUiII8jpjSRDwX8fzKMCvaQgGU3Id0gIG3KFVscvv15Z+n8PHMw==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-0.99.2.tgz", + "integrity": "sha512-fcT597Ty3kqTkoBr1jeZ3Lfbu0a+CKd1l2ojY6RBF/5+dWNux+CRZ9qosax2XZbN+nJhSdvGLLvGvuKaV3Ybug==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-error": "^0.89.0", - "@swagger-api/apidom-ns-json-schema-draft-4": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-error": "^0.99.0", + "@swagger-api/apidom-ns-json-schema-draft-4": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-ns-openapi-3-1": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-0.89.0.tgz", - "integrity": "sha512-QlmETSbV6XL+AutyEvXcw78paizZSFgGWsqxMJKj9nZgdh217dLvvt0V5vWdE5fK5p4hlzHfRR7kO0Ong8sGSw==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-0.99.2.tgz", + "integrity": "sha512-ubO8vi1dYpIV2a3IKhTkBCf125udoCeUZIc9wrhOFwwHHIKeInGR5L6yxlNhOQm0/doYCth77vEqcuTBpxaIrw==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^0.89.0", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-openapi-3-0": "^0.89.0", + "@swagger-api/apidom-ast": "^0.99.2", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-openapi-3-0": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" + } + }, + "node_modules/@swagger-api/apidom-ns-workflows-1": { + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-workflows-1/-/apidom-ns-workflows-1-0.99.2.tgz", + "integrity": "sha512-lm8G7cbCRXukN4UOb/bPszUiSbvN1ymvwQ2PEkyZN+DzJvYfgRuAxXt7xd2EDKJcxeH4igpAnkKoIoBoSOHg+w==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-openapi-3-1": "^0.99.2", + "@types/ramda": "~0.29.6", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-0.89.0.tgz", - "integrity": "sha512-sYr5E0RKZqupgMzvUCM0nDMskl8YPrzYJ0MFW91NJvL3rBzeShBqZ+dB62UzDIAXwjZEtvEEaC9eGIPf7IxvEg==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-0.99.2.tgz", + "integrity": "sha512-7WPbiUJEWggVmxsssFfW/8JGk8Yu4C9ELneh805kMsgl/DOm6hcHxqT5gXXSwamH0ZQlTmSnHl2OZSlG+U5KKQ==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-api-design-systems": "^0.89.0", - "@swagger-api/apidom-parser-adapter-json": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-api-design-systems": "^0.99.2", + "@swagger-api/apidom-parser-adapter-json": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-0.89.0.tgz", - "integrity": "sha512-mbl2wOMY62S2GgGMon1IpsosPQ5zn+rwW8xnZAX/LDUMB5YLmk2THghckyxjxdSBqkJ9jJMEuoHk+RInT6qBzQ==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-0.99.2.tgz", + "integrity": "sha512-ezOA1fjBAQPQ5X0DGYnuFyZMBSBCsaT6k9KDRr7B37Do9yj8YKa/lTlg5usXOrcLm4VgcyJGTKhAJi9kfzCKcA==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-api-design-systems": "^0.89.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-api-design-systems": "^0.99.2", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-0.89.0.tgz", - "integrity": "sha512-0p4/HuGfp4xiddfJw9FrMTEaRikhOZLkR7it+U2P1X3LagrVqI3dTivT/TMMA4xaVuczoKrBC/A1SySboarU/w==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-0.99.2.tgz", + "integrity": "sha512-b1ncaIc4dD0FGqty3iRCDUA/uHdd7nH271C06blQ+S9Id4D/xXxzd84z8LeNIJNLhCcnueuMKgUkGzvXP+raAA==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-asyncapi-2": "^0.89.0", - "@swagger-api/apidom-parser-adapter-json": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-asyncapi-2": "^0.99.2", + "@swagger-api/apidom-parser-adapter-json": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-0.89.0.tgz", - "integrity": "sha512-t14f5RtN6eD37JknahpQpNnrv68QqvA0EQc1cJPskxclh1MRqmvT+oo9R0rXPh2isqr9nhG8UfySdj+5jS5qVA==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-0.99.2.tgz", + "integrity": "sha512-NuwuwdORyZPhEpxwyEgslyGfVnwIuyDvF5TDT0cLCMOIFDqbE/n77c4FAh/nQUARDEXRthiDb5pdMo/+rOxjFg==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-asyncapi-2": "^0.89.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-asyncapi-2": "^0.99.2", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-json": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-0.89.0.tgz", - "integrity": "sha512-UREIb9iLcthuk76iqkFggEdaxYrGNhMOUxU8q/K085bSd+2emLC5yI0yWauEufZPcyTnhu6ZIAsR1lCs6dXkIA==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-0.99.2.tgz", + "integrity": "sha512-wy2WF71bLX1wEJkgmPRCEnXicV155KCelPQhCtzAGGo/B3+OuhknovBWXZNStvoJqZ/2A4a5pvYrgHoVoIKchg==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^0.89.0", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-error": "^0.89.0", + "@swagger-api/apidom-ast": "^0.99.2", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-error": "^0.99.0", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "tree-sitter": "=0.20.4", - "tree-sitter-json": "=0.20.1", + "tree-sitter-json": "=0.20.2", "web-tree-sitter": "=0.20.3" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-2": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-0.89.0.tgz", - "integrity": "sha512-thpuSntNPIKxaY7RcrCyick4946HcYGokw2ie/iRYIM9GbHZPBjcJMEl3+UTq/WsvBxQWIcrVrY0G7VKC/ZwDQ==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-0.99.2.tgz", + "integrity": "sha512-z+ATszNWaO2JlixM9h4QpTAW2fE5nPCY4IDcScuWbch8gtKBmv61+53nahYb7tc3W/X0mMqhc1LyTCy5QC2L/w==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-openapi-2": "^0.89.0", - "@swagger-api/apidom-parser-adapter-json": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-openapi-2": "^0.99.2", + "@swagger-api/apidom-parser-adapter-json": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-0.89.0.tgz", - "integrity": "sha512-t+VkLdxnt55Wao+lHgA975W3KO7+jNiGFlwbLJO89wRgBcJz9Y1wG267/S+UjwdDHqjdVZvPK8w2uKODRohLTA==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-0.99.2.tgz", + "integrity": "sha512-78PFDsF67tWDjPCGAD9cNHage8p5Vs2+zili1AF2zch3JkJA/KxBt+5va4A8w1fYaUaXi8LnMkM8VvEIAsNaOw==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-openapi-3-0": "^0.89.0", - "@swagger-api/apidom-parser-adapter-json": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-openapi-3-0": "^0.99.2", + "@swagger-api/apidom-parser-adapter-json": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-0.89.0.tgz", - "integrity": "sha512-46vdRGoBVgiDTb5iMWBT7+19HlY0jkX/KRA828K/cXF/huThGlcfQkq3UEneHFPGV2KpMETrzSC9Pk6UBB1rJA==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-0.99.2.tgz", + "integrity": "sha512-WQmm14C0EH0dcMzvgrGPeLkWKXyFwyunK9rrRt7xRLn8sL1Em0dC31hiVdgypo3DLrz9YW3PStpSQjEedJaWUQ==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-openapi-3-1": "^0.89.0", - "@swagger-api/apidom-parser-adapter-json": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-openapi-3-1": "^0.99.2", + "@swagger-api/apidom-parser-adapter-json": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-2": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-0.89.0.tgz", - "integrity": "sha512-CYzFa2nsTn8FFDa8xfFIxx1APKbJohPtcv5b4sHE7rU+Xj1Yw3EQhedbVN1d/RK+1zI8p8oo7CY/Ed93GoXZLQ==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-0.99.2.tgz", + "integrity": "sha512-rEoE54T8KKRxtdxXgvaYba+GX8853mwcw5nzdrrvOy2tNKqsJANPeJcrQmjVYqJX7SU0HuZPK3zBvyqMyKoNsg==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-openapi-2": "^0.89.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-openapi-2": "^0.99.2", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-0.89.0.tgz", - "integrity": "sha512-yf7mwRAlAPz+EDJfrVFKz73cQ6BJsS+HQZkoyeF2xfK3UA4Y9NxfEaF6/7qY9WWw6NVO2XHJ+cgWXAacLxNqag==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-0.99.2.tgz", + "integrity": "sha512-l7ve45cfAj+imE8flypjdo49zpfp0m29stpOO/q2fCD5/46wT3Z4Ve3aKhil8/TRFEX26VOKoYVNjpeUWzUMaw==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-openapi-3-0": "^0.89.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-openapi-3-0": "^0.99.2", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-0.89.0.tgz", - "integrity": "sha512-nf01AYWcMHjA4RK1lGJxUftNn+ISS12u0yn2hWRx/epIFz2vbUoNwe5+9XdxVPDZ0sUlrcMcUz9ZweHOUo/t9w==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-0.99.2.tgz", + "integrity": "sha512-1ab06o/M6MAJ0Js4C1bifpj/R0T0mw26Qk4dR7qKzel9dDuEkIRMQF7JHnf2pojZE+aR59Eb4iAMKmxzokHZdA==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-openapi-3-1": "^0.99.2", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.99.2", + "@types/ramda": "~0.29.6", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-workflows-json-1": { + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-json-1/-/apidom-parser-adapter-workflows-json-1-0.99.2.tgz", + "integrity": "sha512-VsFVmwTX/OfsXyBmIEp5Y+adqBF4Cj/cM/55KPM3mIEmKbc+PK3M08TIotMk1FdCiTafe+I28OZL+WMVujNm1A==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-workflows-1": "^0.99.2", + "@swagger-api/apidom-parser-adapter-json": "^0.99.2", + "@types/ramda": "~0.29.6", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-workflows-yaml-1": { + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-yaml-1/-/apidom-parser-adapter-workflows-yaml-1-0.99.2.tgz", + "integrity": "sha512-yK+48YcllFc8mY711ZJ7uTfPVZmJdujIHbvGLOMxMODmETkZlEjfoTAwNTWvutcuA6cxK70tKUD8vz5572ALQA==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-ns-openapi-3-1": "^0.89.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-ns-workflows-1": "^0.99.2", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.99.2", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-0.89.0.tgz", - "integrity": "sha512-q94xmhPznSQRMl7MC+LsCb/n+Az7HlYTblYOv88dZBwmHJKvpSdmaAzRFhoJUMwbBFXN6Qr0w40a80dX0FD62g==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-0.99.2.tgz", + "integrity": "sha512-eU6Rd58WzzcOYOajwp9UCURhXVO8SUCrau14W6BuF1DbJCr85FmOigy4yu2b9UWsK44ZPzH8KeyhSYwTkqkgLA==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^0.89.0", - "@swagger-api/apidom-core": "^0.89.0", - "@swagger-api/apidom-error": "^0.89.0", + "@swagger-api/apidom-ast": "^0.99.2", + "@swagger-api/apidom-core": "^0.99.2", + "@swagger-api/apidom-error": "^0.99.0", "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "tree-sitter": "=0.20.4", "tree-sitter-yaml": "=0.5.0", "web-tree-sitter": "=0.20.3" } }, "node_modules/@swagger-api/apidom-reference": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-0.89.0.tgz", - "integrity": "sha512-o5305pzG3LOli/D8gybR3M4BZRFbefSNos1nTGHrWIFFLjH9ZHa1sUc76WVvNAqwCFfs/j2IXjuIHiQkeJL2Ow==", + "version": "0.99.2", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-0.99.2.tgz", + "integrity": "sha512-QwAnCCEUbicPAVPWYOOpSI8rcj2e7TTybn1chGfdogV+NMLprGXBk/A86hO9CaSLMXkCA2rERUznSNSZWC996g==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.89.0", + "@swagger-api/apidom-core": "^0.99.2", "@types/ramda": "~0.29.6", "axios": "^1.4.0", "minimatch": "^7.4.3", "process": "^0.11.10", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "stampit": "^4.3.2" }, "optionalDependencies": { - "@swagger-api/apidom-error": "^0.89.0", - "@swagger-api/apidom-json-pointer": "^0.89.0", - "@swagger-api/apidom-ns-asyncapi-2": "^0.89.0", - "@swagger-api/apidom-ns-openapi-2": "^0.89.0", - "@swagger-api/apidom-ns-openapi-3-0": "^0.89.0", - "@swagger-api/apidom-ns-openapi-3-1": "^0.89.0", - "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^0.89.0", - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^0.89.0", - "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^0.89.0", - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^0.89.0", - "@swagger-api/apidom-parser-adapter-json": "^0.89.0", - "@swagger-api/apidom-parser-adapter-openapi-json-2": "^0.89.0", - "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^0.89.0", - "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^0.89.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^0.89.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^0.89.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^0.89.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.89.0" + "@swagger-api/apidom-error": "^0.99.0", + "@swagger-api/apidom-json-pointer": "^0.99.2", + "@swagger-api/apidom-ns-asyncapi-2": "^0.99.2", + "@swagger-api/apidom-ns-openapi-2": "^0.99.2", + "@swagger-api/apidom-ns-openapi-3-0": "^0.99.2", + "@swagger-api/apidom-ns-openapi-3-1": "^0.99.2", + "@swagger-api/apidom-ns-workflows-1": "^0.99.2", + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^0.99.2", + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^0.99.2", + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^0.99.2", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^0.99.2", + "@swagger-api/apidom-parser-adapter-json": "^0.99.2", + "@swagger-api/apidom-parser-adapter-openapi-json-2": "^0.99.2", + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^0.99.2", + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^0.99.2", + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^0.99.2", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^0.99.2", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^0.99.2", + "@swagger-api/apidom-parser-adapter-workflows-json-1": "^0.99.2", + "@swagger-api/apidom-parser-adapter-workflows-yaml-1": "^0.99.2", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.99.2" } }, "node_modules/@swagger-api/apidom-reference/node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -8927,6 +10043,14 @@ "node": ">=11" } }, + "node_modules/@switchboard-xyz/sbv2-lite/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/@switchboard-xyz/sbv2-lite/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -8944,18 +10068,18 @@ "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" }, "node_modules/@tanstack/match-sorter-utils": { - "version": "8.8.4", - "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.8.4.tgz", - "integrity": "sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw==", + "version": "8.15.1", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.15.1.tgz", + "integrity": "sha512-PnVV3d2poenUM31ZbZi/yXkBu3J7kd5k2u51CGwwNojag451AjTH9N6n41yjXz2fpLeewleyLBmNS6+HcGDlXw==", "dependencies": { - "remove-accents": "0.4.2" + "remove-accents": "0.5.0" }, "engines": { "node": ">=12" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/kentcdodds" + "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/query-core": { @@ -9077,28 +10201,37 @@ } }, "node_modules/@testing-library/dom": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", - "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.1.0.tgz", + "integrity": "sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==", "dev": true, "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", + "aria-query": "5.3.0", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", "pretty-format": "^27.0.2" }, "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "peer": true, + "dependencies": { + "dequal": "^2.0.3" } }, "node_modules/@testing-library/jest-dom": { "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", "dev": true, "dependencies": { @@ -9133,7 +10266,6 @@ }, "node_modules/@testing-library/react": { "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", "dev": true, "dependencies": { @@ -9170,7 +10302,6 @@ }, "node_modules/@testing-library/user-event": { "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", "dev": true, "dependencies": { @@ -9191,9 +10322,9 @@ "dev": true }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", @@ -9224,6 +10355,24 @@ "@types/node": "*" } }, + "node_modules/@types/bn.js/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/bs58": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/bs58/-/bs58-4.0.4.tgz", + "integrity": "sha512-0IEpMFXXQi2zXaXl9GJ3sRwQo0uEkD+yFOv+FnAU5lkPtcu6h61xb7jc2CFPEZ5BUOaiP13ThuGc9HD4R8lR5g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "base-x": "^3.0.6" + } + }, "node_modules/@types/color": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/color/-/color-3.0.6.tgz", @@ -9241,9 +10390,9 @@ } }, "node_modules/@types/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-87W6MJCKZYDhLAx/J1ikW8niMvmGRyY+rpUxWpL1cO7F8Uu5CHuQoFv+R0/L5pgNdW4jTyda42kv60uwVIPjLw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-hulKeREDdLFesGQjl96+4aoJSHY5b2GRjagzzcqCfIrWhe5vkCqIvrLbqzBaI1q94Vg8DNJZZqTR5ocdWmWclg==" }, "node_modules/@types/connect": { "version": "3.4.38", @@ -9253,15 +10402,31 @@ "@types/node": "*" } }, + "node_modules/@types/connect/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/cors": { "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dev": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/cors/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -9279,6 +10444,20 @@ "@types/node": "*" } }, + "node_modules/@types/duplexify/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, "node_modules/@types/fs-extra": { "version": "8.1.5", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz", @@ -9288,6 +10467,15 @@ "@types/node": "*" } }, + "node_modules/@types/fs-extra/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", @@ -9298,10 +10486,19 @@ "@types/node": "*" } }, + "node_modules/@types/glob/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/hast": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.8.tgz", - "integrity": "sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==", + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", "dependencies": { "@types/unist": "^2" } @@ -9343,9 +10540,9 @@ "dev": true }, "node_modules/@types/linkify-it": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", - "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", "dev": true }, "node_modules/@types/lodash": { @@ -9359,19 +10556,19 @@ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==", "dev": true, "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" + "@types/linkify-it": "^5", + "@types/mdurl": "^2" } }, "node_modules/@types/mdurl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", - "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", "dev": true }, "node_modules/@types/minimatch": { @@ -9392,9 +10589,9 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "16.18.68", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.68.tgz", - "integrity": "sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==" + "version": "16.18.98", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.98.tgz", + "integrity": "sha512-fpiC20NvLpTLAzo3oVBKIqBGR6Fx/8oAK/SSf7G+fydnXMY1x4x9RZ6sBXhqKlCU21g2QapUsbLlhv3+a7wS+Q==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", @@ -9415,6 +10612,14 @@ "@types/node": "*" } }, + "node_modules/@types/pbkdf2/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/prop-types": { "version": "15.7.11", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", @@ -9422,35 +10627,42 @@ }, "node_modules/@types/qrcode": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.5.tgz", "integrity": "sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==", "dev": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/qrcode/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/ramda": { - "version": "0.29.9", - "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.29.9.tgz", - "integrity": "sha512-X3yEG6tQCWBcUAql+RPC/O1Hm9BSU+MXu2wJnCETuAgUlrEDwTA1kIOdEEE4YXDtf0zfQLHa9CCE7WYp9kqPIQ==", + "version": "0.29.12", + "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.29.12.tgz", + "integrity": "sha512-sgIEjpJhdQPB52gDF4aphs9nl0xe54CR22DPdWqT8gQHjZYmVApgA0R3/CpMbl0Y8az2TEZrPNL2zy0EvjbkLA==", "dependencies": { - "types-ramda": "^0.29.6" + "types-ramda": "^0.29.10" } }, "node_modules/@types/react": { - "version": "18.2.45", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.45.tgz", - "integrity": "sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==", + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.2.18", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", - "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", "devOptional": true, "dependencies": { "@types/react": "*" @@ -9467,7 +10679,6 @@ }, "node_modules/@types/react-router-dom": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", "dependencies": { "@types/history": "^4.7.11", @@ -9493,10 +10704,14 @@ "@types/node": "*" } }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + "node_modules/@types/rimraf/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/secp256k1": { "version": "4.0.6", @@ -9506,6 +10721,14 @@ "@types/node": "*" } }, + "node_modules/@types/secp256k1/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -9514,7 +10737,6 @@ }, "node_modules/@types/swagger-ui-react": { "version": "4.18.3", - "resolved": "https://registry.npmjs.org/@types/swagger-ui-react/-/swagger-ui-react-4.18.3.tgz", "integrity": "sha512-Mo/R7IjDVwtiFPs84pWvh5pI9iyNGBjmfielxqbOh2Jv+8WVSDVe8Nu25kb5BOuV2xmGS3o33jr6nwDJMBcX+Q==", "dev": true, "dependencies": { @@ -9553,7 +10775,6 @@ }, "node_modules/@types/uuid": { "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", "dev": true }, @@ -9565,6 +10786,14 @@ "@types/node": "*" } }, + "node_modules/@types/ws/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@typescript-eslint/parser": { "version": "6.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.15.0.tgz", @@ -9905,23 +11134,6 @@ "uint8arrays": "^3.1.0" } }, - "node_modules/@wagmi/connectors/node_modules/query-string": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.1.tgz", - "integrity": "sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w==", - "dependencies": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@wagmi/core": { "version": "0.10.17", "resolved": "https://registry.npmjs.org/@wagmi/core/-/core-0.10.17.tgz", @@ -10167,9 +11379,9 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@wagmi/core/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -10206,27 +11418,64 @@ } }, "node_modules/@walletconnect/core": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.11.1.tgz", - "integrity": "sha512-T57Vd7YdbHPsy3tthBuwrhaZNafN0+PqjISFRNeJy/bsKdXxpJg2hGSARuOTpCO7V6VcaatqlaSMuG3DrnG5rA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.13.3.tgz", + "integrity": "sha512-TdF+rC6rONJGyOUtt/nLkbyQWjnkwbD3kXq3ZA0Q7+tYtmSjTDE4wbArlLbHIbtf69g+9/DpEVEQimWWcEOn2g==", "dependencies": { - "@walletconnect/heartbeat": "1.2.1", - "@walletconnect/jsonrpc-provider": "1.0.13", - "@walletconnect/jsonrpc-types": "1.0.3", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.14", - "@walletconnect/keyvaluestorage": "^1.1.1", - "@walletconnect/logger": "^2.0.1", - "@walletconnect/relay-api": "^1.0.9", - "@walletconnect/relay-auth": "^1.0.4", - "@walletconnect/safe-json": "^1.0.2", - "@walletconnect/time": "^1.0.2", - "@walletconnect/types": "2.11.1", - "@walletconnect/utils": "2.11.1", - "events": "^3.3.0", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "@walletconnect/relay-api": "1.0.10", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.13.3", + "@walletconnect/utils": "2.13.3", + "events": "3.3.0", "isomorphic-unfetch": "3.1.0", "lodash.isequal": "4.5.0", - "uint8arrays": "^3.1.0" + "uint8arrays": "3.1.0" + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/heartbeat": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz", + "integrity": "sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==", + "dependencies": { + "@walletconnect/events": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/jsonrpc-provider": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz", + "integrity": "sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/safe-json": "^1.0.2", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz", + "integrity": "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==", + "dependencies": { + "events": "^3.3.0", + "keyvaluestorage-interface": "^1.0.0" + } + }, + "node_modules/@walletconnect/core/node_modules/uint8arrays": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz", + "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==", + "dependencies": { + "multiformats": "^9.4.2" } }, "node_modules/@walletconnect/crypto": { @@ -10276,22 +11525,41 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@walletconnect/ethereum-provider": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/@walletconnect/ethereum-provider/-/ethereum-provider-2.11.1.tgz", - "integrity": "sha512-UfQH0ho24aa2M1xYmanbJv2ggQPebKmQytp2j20QEvURJ2R0v7YKWZ+0PfwOs6o6cuGw6gGxy/0WQXQRZSAsfg==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@walletconnect/ethereum-provider/-/ethereum-provider-2.13.3.tgz", + "integrity": "sha512-gThsYguFJ7XZp18GP23W6TooQaS6XlF4faFDXPCQVqlWjzEatkkQ2R6Hhv4a4qk4D21qNXirCFnI59Xhbj0KJQ==", + "dependencies": { + "@walletconnect/jsonrpc-http-connection": "1.0.8", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/modal": "2.6.2", + "@walletconnect/sign-client": "2.13.3", + "@walletconnect/types": "2.13.3", + "@walletconnect/universal-provider": "2.13.3", + "@walletconnect/utils": "2.13.3", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/ethereum-provider/node_modules/@walletconnect/jsonrpc-provider": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz", + "integrity": "sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==", "dependencies": { - "@walletconnect/jsonrpc-http-connection": "^1.0.7", - "@walletconnect/jsonrpc-provider": "^1.0.13", - "@walletconnect/jsonrpc-types": "^1.0.3", "@walletconnect/jsonrpc-utils": "^1.0.8", - "@walletconnect/modal": "^2.6.2", - "@walletconnect/sign-client": "2.11.1", - "@walletconnect/types": "2.11.1", - "@walletconnect/universal-provider": "2.11.1", - "@walletconnect/utils": "2.11.1", + "@walletconnect/safe-json": "^1.0.2", "events": "^3.3.0" } }, + "node_modules/@walletconnect/ethereum-provider/node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz", + "integrity": "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==", + "dependencies": { + "events": "^3.3.0", + "keyvaluestorage-interface": "^1.0.0" + } + }, "node_modules/@walletconnect/events": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@walletconnect/events/-/events-1.0.1.tgz", @@ -10322,20 +11590,15 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@walletconnect/jsonrpc-http-connection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.7.tgz", - "integrity": "sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.8.tgz", + "integrity": "sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw==", "dependencies": { "@walletconnect/jsonrpc-utils": "^1.0.6", "@walletconnect/safe-json": "^1.0.1", "cross-fetch": "^3.1.4", - "tslib": "1.14.1" - } - }, - "node_modules/@walletconnect/jsonrpc-http-connection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "events": "^3.3.0" + } }, "node_modules/@walletconnect/jsonrpc-provider": { "version": "1.0.13", @@ -10393,9 +11656,9 @@ } }, "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -10447,6 +11710,23 @@ "query-string": "^6.13.5" } }, + "node_modules/@walletconnect/legacy-client/node_modules/query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@walletconnect/legacy-modal": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@walletconnect/legacy-modal/-/legacy-modal-2.0.0.tgz", @@ -10495,19 +11775,31 @@ "query-string": "^6.13.5" } }, - "node_modules/@walletconnect/logger": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.0.1.tgz", - "integrity": "sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ==", + "node_modules/@walletconnect/legacy-utils/node_modules/query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", "dependencies": { - "pino": "7.11.0", - "tslib": "1.14.1" + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@walletconnect/logger/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@walletconnect/logger": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.1.2.tgz", + "integrity": "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==", + "dependencies": { + "@walletconnect/safe-json": "^1.0.2", + "pino": "7.11.0" + } }, "node_modules/@walletconnect/modal": { "version": "2.6.2", @@ -10554,19 +11846,13 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@walletconnect/relay-api": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.9.tgz", - "integrity": "sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.10.tgz", + "integrity": "sha512-tqrdd4zU9VBNqUaXXQASaexklv6A54yEyQQEXYOCr+Jz8Ket0dmPBDyg19LVSNUN2cipAghQc45/KVmfFJ0cYw==", "dependencies": { - "@walletconnect/jsonrpc-types": "^1.0.2", - "tslib": "1.14.1" + "@walletconnect/jsonrpc-types": "^1.0.2" } }, - "node_modules/@walletconnect/relay-api/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@walletconnect/relay-auth": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz", @@ -10599,18 +11885,28 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@walletconnect/sign-client": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.11.1.tgz", - "integrity": "sha512-s3oKSx6/F5X2WmkV1jfJImBFACf9Km5HpTb+n5q+mobJVpUQw/clvoVyIrNNppLhm1V1S/ylHXh0qCrDppDpCA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.13.3.tgz", + "integrity": "sha512-3Pcq6trHWdBZn5X0VUFQ3zJaaqyEbMW9WNVKcZ2SakIpQAwySd08Mztvq48G98jfucdgP3tjGPbBvzHX9vJX7w==", "dependencies": { - "@walletconnect/core": "2.11.1", - "@walletconnect/events": "^1.0.1", - "@walletconnect/heartbeat": "1.2.1", + "@walletconnect/core": "2.13.3", + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/logger": "^2.0.1", + "@walletconnect/logger": "2.1.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.13.3", + "@walletconnect/utils": "2.13.3", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/heartbeat": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz", + "integrity": "sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==", + "dependencies": { + "@walletconnect/events": "^1.0.1", "@walletconnect/time": "^1.0.2", - "@walletconnect/types": "2.11.1", - "@walletconnect/utils": "2.11.1", "events": "^3.3.0" } }, @@ -10628,53 +11924,91 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@walletconnect/types": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.11.1.tgz", - "integrity": "sha512-UbdbX+d6MOK0AXKxt5imV3KvAcLVpZUHylaRDIP5ffwVylM/p4DHnKppil1Qq5N+IGDr3RsUwLGFkKjqsQYRKw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.13.3.tgz", + "integrity": "sha512-9UdtLoQqwGFfepCPprUAXeUbKg9zyDarPRmEJVco51OWXHCOpvRgroWk54fQHDhCUIfDELjObY6XNAzNrmNYUA==", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/types/node_modules/@walletconnect/heartbeat": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz", + "integrity": "sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==", "dependencies": { "@walletconnect/events": "^1.0.1", - "@walletconnect/heartbeat": "1.2.1", - "@walletconnect/jsonrpc-types": "1.0.3", - "@walletconnect/keyvaluestorage": "^1.1.1", - "@walletconnect/logger": "^2.0.1", + "@walletconnect/time": "^1.0.2", "events": "^3.3.0" } }, + "node_modules/@walletconnect/types/node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz", + "integrity": "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==", + "dependencies": { + "events": "^3.3.0", + "keyvaluestorage-interface": "^1.0.0" + } + }, "node_modules/@walletconnect/universal-provider": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/@walletconnect/universal-provider/-/universal-provider-2.11.1.tgz", - "integrity": "sha512-BJvPYByIfbBYF4x8mqDV79ebQX0tD54pp8itsqrHWn0qKZeJyIH8sQ69yY0GnbJrzoFS3ZLULdC0yDxWDeuRGw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@walletconnect/universal-provider/-/universal-provider-2.13.3.tgz", + "integrity": "sha512-2tuV2d8AdB4Fg/uMs8IdNHrjYy1Tz1uT5kzaT8X1/wx5DHHa/oaheoY5kDZHI0L1oNIg/OlM0/ovonGIcI5ddw==", "dependencies": { - "@walletconnect/jsonrpc-http-connection": "^1.0.7", - "@walletconnect/jsonrpc-provider": "1.0.13", - "@walletconnect/jsonrpc-types": "^1.0.2", - "@walletconnect/jsonrpc-utils": "^1.0.7", - "@walletconnect/logger": "^2.0.1", - "@walletconnect/sign-client": "2.11.1", - "@walletconnect/types": "2.11.1", - "@walletconnect/utils": "2.11.1", + "@walletconnect/jsonrpc-http-connection": "1.0.8", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/logger": "2.1.2", + "@walletconnect/sign-client": "2.13.3", + "@walletconnect/types": "2.13.3", + "@walletconnect/utils": "2.13.3", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/universal-provider/node_modules/@walletconnect/jsonrpc-provider": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz", + "integrity": "sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/safe-json": "^1.0.2", "events": "^3.3.0" } }, + "node_modules/@walletconnect/universal-provider/node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz", + "integrity": "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==", + "dependencies": { + "events": "^3.3.0", + "keyvaluestorage-interface": "^1.0.0" + } + }, "node_modules/@walletconnect/utils": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.11.1.tgz", - "integrity": "sha512-wRFDHN86dZ05mCET1H3912odIeQa8j7cZKxl1FlWRpV2YsILj9HCYSX6Uq2brwO02Kv2vryke44G1r8XI/LViA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.13.3.tgz", + "integrity": "sha512-hjyyNhnhTCezGNr6OCfKRzqRsiak+p+YP57iRo1Tsf222fsj/9JD++MP97YiDwc4e4xXaZp/boiLB+8hJHsCog==", "dependencies": { "@stablelib/chacha20poly1305": "1.0.1", "@stablelib/hkdf": "1.0.1", - "@stablelib/random": "^1.0.2", + "@stablelib/random": "1.0.2", "@stablelib/sha256": "1.0.1", - "@stablelib/x25519": "^1.0.3", - "@walletconnect/relay-api": "^1.0.9", - "@walletconnect/safe-json": "^1.0.2", - "@walletconnect/time": "^1.0.2", - "@walletconnect/types": "2.11.1", - "@walletconnect/window-getters": "^1.0.1", - "@walletconnect/window-metadata": "^1.0.1", + "@stablelib/x25519": "1.0.3", + "@walletconnect/relay-api": "1.0.10", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.13.3", + "@walletconnect/window-getters": "1.0.1", + "@walletconnect/window-metadata": "1.0.1", "detect-browser": "5.3.0", "query-string": "7.1.3", - "uint8arrays": "^3.1.0" + "uint8arrays": "3.1.0" } }, "node_modules/@walletconnect/utils/node_modules/query-string": { @@ -10694,6 +12028,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@walletconnect/utils/node_modules/uint8arrays": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz", + "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==", + "dependencies": { + "multiformats": "^9.4.2" + } + }, "node_modules/@walletconnect/window-getters": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", @@ -10904,9 +12246,12 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -10986,15 +12331,15 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -11136,6 +12481,15 @@ "tmp-promise": "^3.0.2" } }, + "node_modules/arbundles/node_modules/avsc": { + "version": "5.4.7", + "resolved": "git+ssh://git@github.com/Irys-xyz/avsc.git#a730cc8018b79e114b6a3381bbb57760a24c6cef", + "integrity": "sha512-yL4FBUl4sGJwowM+ZV6NcBSHHFTL4IP0rhbKQi/BE1etp5AgaEMb22c8EbvkJOfGMIb+GCzbc3dhLkPbSKbq2Q==", + "license": "MIT", + "engines": { + "node": ">=0.11" + } + }, "node_modules/arbundles/node_modules/axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", @@ -11144,24 +12498,13 @@ "follow-redirects": "^1.14.0" } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "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/arbundles/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } }, "node_modules/archiver": { "version": "5.3.2", @@ -11263,9 +12606,9 @@ "dev": true }, "node_modules/aria-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", - "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", "dependencies": { "tslib": "^2.0.0" }, @@ -11308,15 +12651,16 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -11326,6 +12670,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-includes/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -11335,26 +12698,37 @@ "node": ">=8" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "node_modules/array.prototype.findlastindex/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -11400,30 +12774,52 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "node_modules/array.prototype.tosorted/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -11433,6 +12829,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arraybuffer.prototype.slice/node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice/node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -11443,9 +12869,9 @@ } }, "node_modules/arweave": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/arweave/-/arweave-1.14.4.tgz", - "integrity": "sha512-tmqU9fug8XAmFETYwgUhLaD3WKav5DaM4p1vgJpEj/Px2ORPPMikwnSySlFymmL2qgRh2ZBcZsg11+RXPPGLsA==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/arweave/-/arweave-1.15.1.tgz", + "integrity": "sha512-rT7FOwqdudd5npqp4xOYdDT2035LtpcqePjwirh4wjRiEtVsz1FZkRiM2Yj+fOAwYzOm/hNG0GDOipDSaiEGGQ==", "dependencies": { "arconnect": "^0.4.2", "asn1.js": "^5.4.1", @@ -11453,7 +12879,7 @@ "bignumber.js": "^9.0.2" }, "engines": { - "node": ">=16.15.0" + "node": ">=18" } }, "node_modules/arweave-stream-tx": { @@ -11573,15 +12999,6 @@ "retry": "0.13.1" } }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -11613,7 +13030,6 @@ }, "node_modules/autoprefixer": { "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, "funding": [ @@ -11659,14 +13075,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/avsc": { - "version": "5.4.7", - "resolved": "git+ssh://git@github.com/Irys-xyz/avsc.git#a730cc8018b79e114b6a3381bbb57760a24c6cef", - "license": "MIT", - "engines": { - "node": ">=0.11" - } - }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -11677,9 +13085,9 @@ } }, "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.0.tgz", + "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==", "dev": true }, "node_modules/axe-core": { @@ -11788,9 +13196,9 @@ "dev": true }, "node_modules/basic-ftp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", - "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -11858,11 +13266,14 @@ } }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bindings": { @@ -11882,15 +13293,12 @@ } }, "node_modules/bip32": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.6.tgz", - "integrity": "sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-4.0.0.tgz", + "integrity": "sha512-aOGy88DDlVUhspIXJN+dVEtclhIsfAUppD43V0j40cPTld3pv/0X/MlrZSZ6jowIaQQzFwP8M6rFU2z2mVYjDQ==", "dependencies": { - "@types/node": "10.12.18", - "bs58check": "^2.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "tiny-secp256k1": "^1.1.3", + "@noble/hashes": "^1.2.0", + "@scure/base": "^1.1.1", "typeforce": "^1.11.5", "wif": "^2.0.6" }, @@ -11898,21 +13306,6 @@ "node": ">=6.0.0" } }, - "node_modules/bip32/node_modules/@types/node": { - "version": "10.12.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", - "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" - }, - "node_modules/bip32/node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, "node_modules/bip39": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", @@ -11931,9 +13324,9 @@ } }, "node_modules/bitcoinjs-lib": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.5.tgz", - "integrity": "sha512-yuf6xs9QX/E8LWE2aMJPNd0IxGofwfuVOiYdNUESkc+2bHHVKjhJd8qewqapeoolh9fihzHGoDCB5Vkr57RZCQ==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.6.tgz", + "integrity": "sha512-Fk8+Vc+e2rMoDU5gXkW9tD+313rhkm5h6N9HfZxXvYU9LedttVvmXKTgd9k5rsQJjkSfsv6XRM8uhJv94SrvcA==", "dependencies": { "@noble/hashes": "^1.2.0", "bech32": "^2.0.0", @@ -12058,6 +13451,14 @@ "text-encoding-utf-8": "^1.0.2" } }, + "node_modules/borsh/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/bottleneck": { "version": "2.19.5", "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", @@ -12140,6 +13541,14 @@ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, + "node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dependencies": { + "resolve": "^1.17.0" + } + }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -12184,24 +13593,87 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", - "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 4" + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "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" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dependencies": { + "pako": "~1.0.5" } }, + "node_modules/browserify-zlib/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, "node_modules/browserslist": { "version": "4.22.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", @@ -12235,13 +13707,18 @@ } }, "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", "dependencies": { - "base-x": "^3.0.2" + "base-x": "^4.0.0" } }, + "node_modules/bs58/node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + }, "node_modules/bs58check": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", @@ -12251,19 +13728,6 @@ "bs58": "^5.0.0" } }, - "node_modules/bs58check/node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, - "node_modules/bs58check/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "dependencies": { - "base-x": "^4.0.0" - } - }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -12332,6 +13796,11 @@ "node": ">=6.14.2" } }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -12353,9 +13822,9 @@ } }, "node_modules/cacache": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.1.tgz", - "integrity": "sha512-g4Uf2CFZPaxtJKre6qr4zqLDOOPU7bNVhWjlNhvzc51xaTOx2noMOLhfFkTAqwtrAZAKQUuDfyjitzilpA8WsQ==", + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", + "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", "dev": true, "optional": true, "dependencies": { @@ -12387,32 +13856,42 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, "optional": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/cacache/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "optional": true, "dependencies": { @@ -12441,6 +13920,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cacache/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "optional": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/call-bind": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", @@ -12607,6 +14103,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "devOptional": true, "funding": [ { "type": "individual", @@ -12633,6 +14130,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -12673,9 +14171,9 @@ } }, "node_modules/citty": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.5.tgz", - "integrity": "sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", "dependencies": { "consola": "^3.2.3" } @@ -12748,49 +14246,187 @@ "dependencies": { "colors": "1.0.3" }, - "engines": { - "node": ">= 0.2.0" + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "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/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/clipboardy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", + "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", + "dependencies": { + "execa": "^8.0.1", + "is-wsl": "^3.1.0", + "is64bit": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/clipboardy/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/clipboardy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, + "node_modules/clipboardy/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dependencies": { - "string-width": "^4.2.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": "10.* || >= 12.*" + "node": ">=12" }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "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==", + "node_modules/clipboardy/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "engines": { - "node": ">= 10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + "node_modules/clipboardy/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/clipboardy": { + "node_modules/clipboardy/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", - "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", - "dependencies": { - "arch": "^2.2.0", - "execa": "^5.1.1", - "is-wsl": "^2.2.0" - }, + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12825,14 +14461,6 @@ "node": ">=6" } }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -13045,6 +14673,11 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==" + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -13075,138 +14708,353 @@ "xdg-basedir": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=8" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", + "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", + "dev": true, + "dependencies": { + "conventional-commits-filter": "^3.0.0", + "dateformat": "^3.0.3", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "meow": "^8.1.2", + "semver": "^7.0.0", + "split": "^1.0.1" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-writer/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-changelog-writer/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/conventional-changelog-writer/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">= 0.10.0" + "node": ">=10" } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/conventional-changelog-writer/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "ms": "2.0.0" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/connect/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/conventional-changelog-writer/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/connect/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { - "ee-first": "1.1.1" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/connect/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, "engines": { - "node": "^14.18.0 || >=16.10.0" + "node": ">=8" } }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "engines": { - "node": ">= 0.6" + "bin": { + "semver": "bin/semver" } }, - "node_modules/conventional-changelog-angular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "dependencies": { - "compare-func": "^2.0.0" - }, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/conventional-changelog-writer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", - "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", + "node_modules/conventional-changelog-writer/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "dependencies": { - "conventional-commits-filter": "^3.0.0", - "dateformat": "^3.0.3", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "meow": "^8.1.2", - "semver": "^7.0.0", - "split": "^1.0.1" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, "engines": { - "node": ">=14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/conventional-commits-filter": { @@ -13240,18 +15088,6 @@ "node": ">=16" } }, - "node_modules/conventional-commits-parser/node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -13267,9 +15103,9 @@ } }, "node_modules/cookie-es": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.0.0.tgz", - "integrity": "sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.1.0.tgz", + "integrity": "sha512-L2rLOcK0wzWSfSDA33YR+PUHDG10a8px7rUHKWbGLP4YfbsMed2KFUw5fczvDPbT98DDe3LEzviswl810apTEw==" }, "node_modules/cookie-signature": { "version": "1.0.6", @@ -13305,9 +15141,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.34.0.tgz", - "integrity": "sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", + "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -13317,8 +15153,7 @@ "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, "node_modules/cors": { "version": "2.8.5", @@ -13528,6 +15363,19 @@ "node": ">= 8" } }, + "node_modules/crossws": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.2.4.tgz", + "integrity": "sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg==", + "peerDependencies": { + "uWebSockets.js": "*" + }, + "peerDependenciesMeta": { + "uWebSockets.js": { + "optional": true + } + } + }, "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -13585,33 +15433,33 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/csv": { - "version": "6.3.6", - "resolved": "https://registry.npmjs.org/csv/-/csv-6.3.6.tgz", - "integrity": "sha512-jsEsX2HhGp7xiwrJu5srQavKsh+HUJcCi78Ar3m4jlmFKRoTkkMy7ZZPP+LnQChmaztW+uj44oyfMb59daAs/Q==", + "version": "6.3.9", + "resolved": "https://registry.npmjs.org/csv/-/csv-6.3.9.tgz", + "integrity": "sha512-eiN+Qu8NwSLxZYia6WzB8xlX/rAQ/8EgK5A4dIF7Bz96mzcr5dW1jlcNmjG0QWySWKfPdCerH3RQ96ZqqsE8cA==", "dependencies": { - "csv-generate": "^4.3.1", - "csv-parse": "^5.5.3", - "csv-stringify": "^6.4.5", - "stream-transform": "^3.3.0" + "csv-generate": "^4.4.1", + "csv-parse": "^5.5.6", + "csv-stringify": "^6.5.0", + "stream-transform": "^3.3.2" }, "engines": { "node": ">= 0.1.90" } }, "node_modules/csv-generate": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-4.3.1.tgz", - "integrity": "sha512-7YeeJq+44/I/O5N2sr2qBMcHZXhpfe38eh7DOFxyMtYO+Pir7kIfgFkW5MPksqKqqR6+/wX7UGoZm1Ot11151w==" + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-4.4.1.tgz", + "integrity": "sha512-O/einO0v4zPmXaOV+sYqGa02VkST4GP5GLpWBNHEouIU7pF3kpGf3D0kCCvX82ydIY4EKkOK+R8b1BYsRXravg==" }, "node_modules/csv-parse": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.3.tgz", - "integrity": "sha512-v0KW6C0qlZzoGjk6u5tLmVfyZxNgPGXZsWTXshpAgKVGmGXzaVWGdlCFxNx5iuzcXT/oJN1HHM9DZKwtAtYa+A==" + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.6.tgz", + "integrity": "sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==" }, "node_modules/csv-stringify": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.4.5.tgz", - "integrity": "sha512-SPu1Vnh8U5EnzpNOi1NDBL5jU5Rx7DVHr15DNg9LXDTAbQlAVAmEbVt16wZvEW9Fu9Qt4Ji8kmeCJ2B1+4rFTQ==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.5.0.tgz", + "integrity": "sha512-edlXFVKcUx7r8Vx5zQucsuMg4wb/xT6qyz+Sr1vnLrdXqlLD1+UKyWNyZ9zn6mUW1ewmGxrpVwAcChGF0HQ/2Q==" }, "node_modules/curve25519-js": { "version": "0.0.4", @@ -13619,39 +15467,144 @@ "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==" }, "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-buffer/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true + "node_modules/data-view-byte-length/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dependencies": { - "assert-plus": "^1.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", - "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", - "dev": true, + "node_modules/data-view-byte-offset/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, "engines": { - "node": ">= 14" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/date-fns": { @@ -13680,7 +15633,6 @@ }, "node_modules/dayjs": { "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" }, "node_modules/debug": { @@ -13827,16 +15779,19 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -13865,9 +15820,9 @@ } }, "node_modules/defu": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.3.tgz", - "integrity": "sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==" + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" }, "node_modules/degenerator": { "version": "5.0.1", @@ -13883,6 +15838,37 @@ "node": ">= 14" } }, + "node_modules/degenerator/node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/degenerator/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/delay": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", @@ -13902,14 +15888,6 @@ "node": ">=0.4.0" } }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -13943,9 +15921,9 @@ } }, "node_modules/destr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.2.tgz", - "integrity": "sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==" }, "node_modules/destroy": { "version": "1.2.0", @@ -13963,9 +15941,9 @@ "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==" }, "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "optional": true, "engines": { "node": ">=8" @@ -14052,6 +16030,17 @@ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, + "node_modules/domain-browser": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", + "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/dompurify": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", @@ -14172,6 +16161,12 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/ecc-jsbn/node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -14181,6 +16176,20 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/ed25519-hd-key": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ed25519-hd-key/-/ed25519-hd-key-1.3.0.tgz", + "integrity": "sha512-IWwAyiiuJQhgu3L8NaHb68eJxTu2pgCwxIBdgpLJdKpYZM46+AXePSVTr7fkNKaUOfOL4IrjEUaQvyVRIDP7fg==", + "dependencies": { + "create-hmac": "1.1.7", + "tweetnacl": "1.0.3" + } + }, + "node_modules/ed25519-hd-key/node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -14197,9 +16206,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.616", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", - "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==", + "version": "1.4.803", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.803.tgz", + "integrity": "sha512-61H9mLzGOCLLVsnLiRzCbc63uldP0AniRYPV3hbGVtONA1pI7qSGILdbofR7A8TMbOypDocEAjH/e+9k1QIe3g==", "dev": true }, "node_modules/elementtree": { @@ -14215,9 +16224,9 @@ } }, "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -14295,9 +16304,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -14308,10 +16317,13 @@ } }, "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -14352,18 +16364,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/env-ci/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/env-ci/node_modules/human-signals": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", @@ -14398,9 +16398,9 @@ } }, "node_modules/env-ci/node_modules/npm-run-path": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", - "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { "path-key": "^4.0.0" @@ -14486,56 +16486,233 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-abstract/node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" } }, "node_modules/es-get-iterator": { @@ -14559,39 +16736,99 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "node_modules/es-iterator-helpers/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers/node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag/node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-shim-unscopables": { @@ -14607,7 +16844,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -14621,13 +16857,14 @@ } }, "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "hasInstallScript": true, "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", "next-tick": "^1.1.0" }, "engines": { @@ -14663,18 +16900,59 @@ } }, "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "hasInstallScript": true, + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } @@ -14706,26 +16984,75 @@ } }, "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dev": true, "dependencies": { "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=6.0" + "node": ">=4.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -14736,9 +17063,20 @@ "node": ">=0.10.0" } }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/eslint": { "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { @@ -14793,7 +17131,6 @@ }, "node_modules/eslint-config-next": { "version": "14.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.3.tgz", "integrity": "sha512-IKPhpLdpSUyKofmsXUfrvBC49JMUTdeaD8ZIH4v9Vk0sC1X6URTuTJCLtA0Vwuj7V/CQh0oISuSTvNn5//Buew==", "dev": true, "dependencies": { @@ -14863,9 +17200,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -15096,6 +17433,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -15159,6 +17510,11 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -15252,18 +17608,17 @@ }, "node_modules/ethereum-blockies-base64": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ethereum-blockies-base64/-/ethereum-blockies-base64-1.0.2.tgz", "integrity": "sha512-Vg2HTm7slcWNKaRhCUl/L3b4KrB8ohQXdd5Pu3OI897EcR6tVRvUqdTwAyx+dnmoDzj8e2bwBLDQ50ByFmcz6w==", "dependencies": { "pnglib": "0.0.1" } }, "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz", + "integrity": "sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==", "dependencies": { - "js-sha3": "^0.8.0" + "@noble/hashes": "^1.4.0" } }, "node_modules/ethereum-cryptography": { @@ -15288,6 +17643,14 @@ "setimmediate": "^1.0.5" } }, + "node_modules/ethereum-cryptography/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/ethereum-cryptography/node_modules/bs58check": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", @@ -15330,6 +17693,14 @@ "@types/node": "*" } }, + "node_modules/ethereumjs-util/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/ethers": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", @@ -15395,6 +17766,15 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", @@ -15532,15 +17912,15 @@ } }, "node_modules/exegesis/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -15686,11 +18066,6 @@ "type": "^2.7.2" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -15794,9 +18169,9 @@ "dev": true }, "node_modules/fast-redact": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz", - "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", "engines": { "node": ">=6" } @@ -15854,9 +18229,9 @@ "peer": true }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -15975,9 +18350,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -16060,7 +18435,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -16096,41 +18470,41 @@ } }, "node_modules/firebase": { - "version": "10.7.1", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.7.1.tgz", - "integrity": "sha512-Mlt7y7zQ43FtKp4SCyYie3tnrOL3UMF2XXiV4ZXMrC0d0wtcOYmABuybhkJpJCKILpdekxr39wjnaai0DZlWFg==", - "dependencies": { - "@firebase/analytics": "0.10.0", - "@firebase/analytics-compat": "0.2.6", - "@firebase/app": "0.9.25", - "@firebase/app-check": "0.8.1", - "@firebase/app-check-compat": "0.3.8", - "@firebase/app-compat": "0.2.25", - "@firebase/app-types": "0.9.0", - "@firebase/auth": "1.5.1", - "@firebase/auth-compat": "0.5.1", - "@firebase/database": "1.0.2", - "@firebase/database-compat": "1.0.2", - "@firebase/firestore": "4.4.0", - "@firebase/firestore-compat": "0.3.23", - "@firebase/functions": "0.11.0", - "@firebase/functions-compat": "0.3.6", - "@firebase/installations": "0.6.4", - "@firebase/installations-compat": "0.2.4", - "@firebase/messaging": "0.12.5", - "@firebase/messaging-compat": "0.2.5", - "@firebase/performance": "0.6.4", - "@firebase/performance-compat": "0.2.4", - "@firebase/remote-config": "0.4.4", - "@firebase/remote-config-compat": "0.2.4", - "@firebase/storage": "0.12.0", - "@firebase/storage-compat": "0.3.3", - "@firebase/util": "1.9.3" + "version": "10.12.2", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.12.2.tgz", + "integrity": "sha512-ZxEdtSvP1I9su1yf32D8TIdgxtPgxwr6z3jYAR1TXS/t+fVfpoPc/N1/N2bxOco9mNjUoc+od34v5Fn4GeKs6Q==", + "dependencies": { + "@firebase/analytics": "0.10.4", + "@firebase/analytics-compat": "0.2.10", + "@firebase/app": "0.10.5", + "@firebase/app-check": "0.8.4", + "@firebase/app-check-compat": "0.3.11", + "@firebase/app-compat": "0.2.35", + "@firebase/app-types": "0.9.2", + "@firebase/auth": "1.7.4", + "@firebase/auth-compat": "0.5.9", + "@firebase/database": "1.0.5", + "@firebase/database-compat": "1.0.5", + "@firebase/firestore": "4.6.3", + "@firebase/firestore-compat": "0.3.32", + "@firebase/functions": "0.11.5", + "@firebase/functions-compat": "0.3.11", + "@firebase/installations": "0.6.7", + "@firebase/installations-compat": "0.2.7", + "@firebase/messaging": "0.12.9", + "@firebase/messaging-compat": "0.2.9", + "@firebase/performance": "0.6.7", + "@firebase/performance-compat": "0.2.7", + "@firebase/remote-config": "0.4.7", + "@firebase/remote-config-compat": "0.2.7", + "@firebase/storage": "0.12.5", + "@firebase/storage-compat": "0.3.8", + "@firebase/util": "1.9.6", + "@firebase/vertexai-preview": "0.0.2" } }, "node_modules/firebase-tools": { "version": "12.9.1", - "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-12.9.1.tgz", "integrity": "sha512-t/oTgGnGm3sLT3wR80B7hY6vdAs6rTlZMsmnZGsP+GeKtVzaB5KHEwLbkZuRXtqij9f35IfkQm2a4TKjKY6xUQ==", "dev": true, "dependencies": { @@ -16211,6 +18585,12 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/firebase-tools/node_modules/argparse/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "node_modules/firebase-tools/node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -16284,6 +18664,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { "glob": "^7.1.3" @@ -16325,6 +18706,27 @@ } } }, + "node_modules/firebase/node_modules/@firebase/auth": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.7.4.tgz", + "integrity": "sha512-d2Fw17s5QesojwebrA903el20Li9/YGgkoOGJjagM4I1qAT36APa/FcZ+OX86KxbYKCtQKTMqraU8pxG7C2JWA==", + "dependencies": { + "@firebase/component": "0.6.7", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.9.6", + "tslib": "^2.1.0", + "undici": "5.28.4" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@react-native-async-storage/async-storage": "^1.18.1" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -16343,6 +18745,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { "glob": "^7.1.3" @@ -16355,9 +18758,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/fn.name": { @@ -16367,9 +18770,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -16394,9 +18797,9 @@ } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", "dev": true, "optional": true, "dependencies": { @@ -16598,7 +19001,6 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -16616,7 +19018,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -16635,19 +19036,18 @@ "integrity": "sha512-TTvznnpde1rTv/3FOmZMbPCh75gqkJ9dKJdsKmcNiXh4olLJl3eRahHJcGzyPZjuVaytffP02Or4z5avDvqKQA==" }, "node_modules/gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", "dev": true, "dependencies": { - "abort-controller": "^3.0.0", "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" + "node-fetch": "^2.6.9" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/gaxios/node_modules/agent-base": { @@ -16676,16 +19076,16 @@ } }, "node_modules/gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", "dev": true, "dependencies": { - "gaxios": "^4.0.0", + "gaxios": "^5.0.0", "json-bigint": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/get-caller-file": { @@ -16697,44 +19097,48 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-port-please": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", - "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz", + "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==" }, "node_modules/get-stream": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", - "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -16744,9 +19148,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -16756,50 +19160,32 @@ } }, "node_modules/get-uri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", - "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", "dev": true, "dependencies": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.0", + "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4", - "fs-extra": "^8.1.0" + "fs-extra": "^11.2.0" }, "engines": { "node": ">= 14" } }, "node_modules/get-uri/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/get-uri/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/get-uri/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" + "node": ">=14.14" } }, "node_modules/getpass": { @@ -16813,7 +19199,6 @@ }, "node_modules/gh-pages": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-5.0.0.tgz", "integrity": "sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ==", "dev": true, "dependencies": { @@ -16845,6 +19230,15 @@ "node": ">=0.10.0" } }, + "node_modules/gh-pages/node_modules/array-union/node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/gh-pages/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -16881,6 +19275,18 @@ "node": ">=0.10.0" } }, + "node_modules/gh-pages/node_modules/globby/node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/gh-pages/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -16987,6 +19393,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -17085,11 +19492,12 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -17099,12 +19507,12 @@ } }, "node_modules/globby": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", - "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, "dependencies": { - "@sindresorhus/merge-streams": "^1.0.0", + "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", "ignore": "^5.2.4", "path-type": "^5.0.0", @@ -17150,220 +19558,187 @@ "node": ">=10" } }, - "node_modules/google-auth-library/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/google-auth-library/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "debug": "4" }, "engines": { - "node": ">=10" + "node": ">= 6.0.0" } }, - "node_modules/google-gax": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", - "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", + "node_modules/google-auth-library/node_modules/gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", "dev": true, "dependencies": { - "@grpc/grpc-js": "~1.8.0", - "@grpc/proto-loader": "^0.7.0", - "@types/long": "^4.0.0", - "@types/rimraf": "^3.0.2", "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^8.0.2", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.2.4", - "protobufjs-cli": "1.1.1", - "retry-request": "^5.0.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js", - "minifyProtoJson": "build/tools/minify.js" + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/google-gax/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/google-auth-library/node_modules/gcp-metadata": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", "dev": true, "dependencies": { - "debug": "4" + "gaxios": "^4.0.0", + "json-bigint": "^1.0.0" }, "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/google-gax/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "node": ">=10" } }, - "node_modules/google-gax/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "node_modules/google-auth-library/node_modules/google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", "dev": true, "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "node-forge": "^1.3.1" }, "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" + "gp12-pem": "build/src/bin/gp12-pem.js" }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/google-gax/node_modules/escodegen/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, "engines": { - "node": ">=4.0" + "node": ">=10" } }, - "node_modules/google-gax/node_modules/gaxios": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", - "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "node_modules/google-auth-library/node_modules/gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", "dev": true, "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9" + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/google-gax/node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "node_modules/google-auth-library/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=12" + "node": ">= 6" } }, - "node_modules/google-gax/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/google-auth-library/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, - "node_modules/google-gax/node_modules/google-auth-library": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", - "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", + "node_modules/google-gax": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", + "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", "dev": true, "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.3.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" + "@grpc/grpc-js": "~1.8.0", + "@grpc/proto-loader": "^0.7.0", + "@types/long": "^4.0.0", + "@types/rimraf": "^3.0.2", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^8.0.2", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^1.0.0", + "protobufjs": "7.2.4", + "protobufjs-cli": "1.1.1", + "retry-request": "^5.0.0" + }, + "bin": { + "compileProtos": "build/tools/compileProtos.js", + "minifyProtoJson": "build/tools/minify.js" }, "engines": { "node": ">=12" } }, - "node_modules/google-gax/node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "node_modules/google-gax/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", "dev": true, "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=12.0.0" + "undici-types": "~5.26.4" } }, - "node_modules/google-gax/node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "node_modules/google-gax/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/google-gax/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/google-gax/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">= 6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/google-gax/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "node_modules/google-gax/node_modules/google-auth-library": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", + "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.3.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=12" } }, "node_modules/google-gax/node_modules/long": { @@ -17396,32 +19771,6 @@ "node": ">=10" } }, - "node_modules/google-gax/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/google-gax/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/google-gax/node_modules/protobufjs": { "version": "7.2.4", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", @@ -17474,32 +19823,10 @@ "protobufjs": "^7.0.0" } }, - "node_modules/google-gax/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/google-gax/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/google-p12-pem": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", - "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", "dev": true, "dependencies": { "node-forge": "^1.3.1" @@ -17508,7 +19835,7 @@ "gp12-pem": "build/src/bin/gp12-pem.js" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, "node_modules/google-protobuf": { @@ -17539,32 +19866,34 @@ "dev": true }, "node_modules/gtoken": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", - "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", "dev": true, "dependencies": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.1.3", + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", "jws": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, "node_modules/h3": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.9.0.tgz", - "integrity": "sha512-+F3ZqrNV/CFXXfZ2lXBINHi+rM4Xw3CDC5z2CDK3NMPocjonKipGLLDSkrqY9DOrioZNPTIdDMWfQKm//3X2DA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.11.1.tgz", + "integrity": "sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A==", "dependencies": { "cookie-es": "^1.0.0", - "defu": "^6.1.3", - "destr": "^2.0.2", + "crossws": "^0.2.2", + "defu": "^6.1.4", + "destr": "^2.0.3", "iron-webcrypto": "^1.0.0", + "ohash": "^1.1.3", "radix3": "^1.1.0", - "ufo": "^1.3.2", + "ufo": "^1.4.0", "uncrypto": "^0.1.3", - "unenv": "^1.7.4" + "unenv": "^1.9.0" } }, "node_modules/handlebars": { @@ -17631,7 +19960,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17645,20 +19973,20 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -17723,9 +20051,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -17769,6 +20097,14 @@ "secp256k1": "^4.0.0" } }, + "node_modules/hdkey/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/hdkey/node_modules/bs58check": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", @@ -17780,9 +20116,9 @@ } }, "node_modules/heap-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/heap-js/-/heap-js-2.3.0.tgz", - "integrity": "sha512-E5303mzwQ+4j/n2J0rDvEPBN7GKjhis10oHiYOgjxsmxYgqG++hz9NyLLOXttzH8as/DyiBHYpUrJTZWYaMo8Q==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/heap-js/-/heap-js-2.5.0.tgz", + "integrity": "sha512-kUGoI3p7u6B41z/dp33G6OaL7J4DRqRYwVmeIlwLClx7yaaAy7hoDExnuejTKtuDwfcatGmddHDEOjf6EyIxtQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -17855,27 +20191,15 @@ } }, "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=10" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/hot-shots": { @@ -17899,7 +20223,6 @@ }, "node_modules/html5-qrcode": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/html5-qrcode/-/html5-qrcode-2.3.8.tgz", "integrity": "sha512-jsr4vafJhwoLVEDW3n1KvPnCCXWaQfRng0/EEYk1vNcQGcG/htAdhJX0be8YyqMoSz7+hZvOZSTAepsabiuhiQ==" }, "node_modules/http-cache-semantics": { @@ -17972,6 +20295,11 @@ "npm": ">=1.3.7" } }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" + }, "node_modules/https-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", @@ -18157,6 +20485,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -18168,9 +20497,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -18201,14 +20530,6 @@ "node": ">=12.0.0" } }, - "node_modules/inquirer/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/inquirer/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -18281,42 +20602,26 @@ } }, "node_modules/ionicons": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.2.tgz", - "integrity": "sha512-I3iYIfc9Q9FRifWyFSwTAvbEABWlWY32i0sAVDDPGYnaIZVugkLCZFbEcrphW6ixVPg8tt1oLwalo/JJwbEqnA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", + "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", "dependencies": { "@stencil/core": "^4.0.3" } }, - "node_modules/ioredis": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", - "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, "dependencies": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" }, "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" + "node": ">= 12" } }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true - }, "node_modules/ip-regex": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", @@ -18336,9 +20641,9 @@ } }, "node_modules/iron-webcrypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.0.0.tgz", - "integrity": "sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", "funding": { "url": "https://github.com/sponsors/brc-dd" } @@ -18418,7 +20723,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -18441,7 +20745,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -18493,11 +20796,102 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view/node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view/node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view/node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view/node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -18607,6 +21001,37 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -18639,10 +21064,13 @@ "optional": true }, "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18663,10 +21091,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "engines": { "node": ">= 0.4" }, @@ -18698,7 +21125,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -18748,7 +21174,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -18761,10 +21186,13 @@ } }, "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18773,7 +21201,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -18802,7 +21229,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -18817,7 +21243,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -18877,10 +21302,13 @@ "dev": true }, "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18889,7 +21317,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -18898,13 +21325,35 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18952,6 +21401,20 @@ "node": ">=v0.10.0" } }, + "node_modules/is64bit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", + "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", + "dependencies": { + "system-architecture": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -18971,6 +21434,14 @@ "whatwg-fetch": "^3.4.1" } }, + "node_modules/isomorphic-timers-promises": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/isomorphic-unfetch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", @@ -19038,9 +21509,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", "dev": true, "optional": true, "dependencies": { @@ -19117,9 +21588,9 @@ } }, "node_modules/jayson/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -19176,9 +21647,9 @@ } }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "bin": { "jiti": "bin/jiti.js" } @@ -19190,9 +21661,9 @@ "dev": true }, "node_modules/joi": { - "version": "17.12.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.1.tgz", - "integrity": "sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==", + "version": "17.13.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.1.tgz", + "integrity": "sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==", "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", @@ -19269,27 +21740,27 @@ "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==" }, "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", "dev": true }, "node_modules/jsdoc": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", - "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.3.tgz", + "integrity": "sha512-Nu7Sf35kXJ1MWDZIMAuATRQTg1iIPdzh7tqJ6jjvaU/GfDf+qi5UV8zJR3Mo+/pYFvm8mzay4+6O5EWigaQBQw==", "dev": true, "dependencies": { "@babel/parser": "^7.20.15", "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^12.2.3", + "@types/markdown-it": "^14.1.1", "bluebird": "^3.7.2", "catharsis": "^0.9.0", "escape-string-regexp": "^2.0.0", "js2xmlparser": "^4.0.2", "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^8.6.7", "marked": "^4.0.10", "mkdirp": "^1.0.4", "requizzle": "^0.2.3", @@ -19312,16 +21783,15 @@ "node": ">=8" } }, - "node_modules/jsdoc/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "bin": { - "mkdirp": "bin/cmd.js" + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=10" + "node": ">=4" } }, "node_modules/json-bigint": { @@ -19399,9 +21869,9 @@ "dev": true }, "node_modules/json-stable-stringify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.0.tgz", - "integrity": "sha512-zfA+5SuwYN2VWqN1/5HZaDzQKLJHaBVMZIIM+wuYjdptkaQsqzDdqjqf+lZZJUuJq1aanHiY8LhH8LmH+qBYJA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", + "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", "dependencies": { "call-bind": "^1.0.5", "isarray": "^2.0.5", @@ -19439,9 +21909,10 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "peer": true }, "node_modules/jsonfile": { "version": "6.1.0", @@ -19649,9 +22120,9 @@ "dev": true }, "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true }, "node_modules/language-tags": { @@ -19782,7 +22253,6 @@ }, "node_modules/lightweight-charts": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lightweight-charts/-/lightweight-charts-4.1.3.tgz", "integrity": "sha512-SJacmEyx3LmT2Qsc7Kq7cEX7nEHtQv0MOlujhRlcDxhW62pG6nkBlcM52/jNqkq8B28KQeVmgOQ7zrdJ4BCPDw==", "dependencies": { "fancy-canvas": "2.1.0" @@ -19794,35 +22264,36 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, "dependencies": { - "uc.micro": "^1.0.1" + "uc.micro": "^2.0.0" } }, "node_modules/listhen": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.5.5.tgz", - "integrity": "sha512-LXe8Xlyh3gnxdv4tSjTjscD1vpr/2PRpzq8YIaMJgyKzRG8wdISlWVWnGThJfHnlJ6hmLt2wq1yeeix0TEbuoA==", - "dependencies": { - "@parcel/watcher": "^2.3.0", - "@parcel/watcher-wasm": "2.3.0", - "citty": "^0.1.4", - "clipboardy": "^3.0.0", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.7.2.tgz", + "integrity": "sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g==", + "dependencies": { + "@parcel/watcher": "^2.4.1", + "@parcel/watcher-wasm": "^2.4.1", + "citty": "^0.1.6", + "clipboardy": "^4.0.0", "consola": "^3.2.3", - "defu": "^6.1.2", - "get-port-please": "^3.1.1", - "h3": "^1.8.1", + "crossws": "^0.2.0", + "defu": "^6.1.4", + "get-port-please": "^3.1.2", + "h3": "^1.10.2", "http-shutdown": "^1.2.2", - "jiti": "^1.20.0", - "mlly": "^1.4.2", + "jiti": "^1.21.0", + "mlly": "^1.6.1", "node-forge": "^1.3.1", - "pathe": "^1.1.1", - "std-env": "^3.4.3", - "ufo": "^1.3.0", - "untun": "^0.1.2", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "ufo": "^1.4.0", + "untun": "^0.1.3", "uqr": "^0.1.2" }, "bin": { @@ -19898,7 +22369,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -19950,7 +22420,8 @@ "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true }, "node_modules/lodash.difference": { "version": "4.5.0", @@ -19976,11 +22447,6 @@ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", "dev": true }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" - }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", @@ -20145,9 +22611,9 @@ } }, "node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "engines": { "node": "14 || >=16.14" } @@ -20169,7 +22635,6 @@ }, "node_modules/magic-sdk": { "version": "21.4.1", - "resolved": "https://registry.npmjs.org/magic-sdk/-/magic-sdk-21.4.1.tgz", "integrity": "sha512-T/v7XWjPWiLMASWiA9qAo6Yoo+swBj1t60kDxXgNumRg4rKbvWnBToNTMmVY3li0ORA8NkeymtLQwX/oeAVFhw==", "dependencies": { "@magic-sdk/commons": "^17.4.1", @@ -20178,6 +22643,14 @@ "localforage": "^1.7.4" } }, + "node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -20208,9 +22681,9 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "node_modules/make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", "dev": true, "optional": true, "dependencies": { @@ -20223,6 +22696,7 @@ "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", + "proc-log": "^4.2.0", "promise-retry": "^2.0.1", "ssri": "^10.0.0" }, @@ -20230,6 +22704,16 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/make-fetch-happen/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "optional": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -20248,19 +22732,20 @@ "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" }, "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, "dependencies": { "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, "bin": { - "markdown-it": "bin/markdown-it.js" + "markdown-it": "bin/markdown-it.mjs" } }, "node_modules/markdown-it-anchor": { @@ -20306,13 +22791,10 @@ } }, "node_modules/marked-terminal/node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, - "dependencies": { - "type-fest": "^3.0.0" - }, "engines": { "node": ">=14.16" }, @@ -20332,18 +22814,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/marked-terminal/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -20355,9 +22825,9 @@ } }, "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true }, "node_modules/media-typer": { @@ -20365,171 +22835,17 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/meow/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" + "engines": { + "node": ">= 0.6" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=16.10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -20604,9 +22920,9 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/mime": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.1.tgz", - "integrity": "sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.3.tgz", + "integrity": "sha512-KgUb15Oorc0NEKPbvfa0wRU+PItIEZmiv+pyAO2i0oTIVTJhlzMclU7w4RXWQrSOVH5ax/p/CkIO7KI4OyFJTQ==", "dev": true, "funding": [ "https://github.com/sponsors/broofa" @@ -20760,9 +23076,9 @@ } }, "node_modules/minipass-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", - "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "dev": true, "optional": true, "dependencies": { @@ -20891,15 +23207,15 @@ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" }, "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, "bin": { "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/mkdirp-classic": { @@ -20909,14 +23225,25 @@ "optional": true }, "node_modules/mlly": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", - "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", "dependencies": { - "acorn": "^8.10.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "ufo": "^1.3.0" + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" + } + }, + "node_modules/mlly/node_modules/acorn": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/modify-values": { @@ -21130,6 +23457,14 @@ "text-encoding-utf-8": "^1.0.2" } }, + "node_modules/near-api-js/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/near-api-js/node_modules/http-errors": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", @@ -21208,6 +23543,14 @@ "tweetnacl": "^1.0.2" } }, + "node_modules/near-seed-phrase/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/near-seed-phrase/node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -21244,7 +23587,6 @@ }, "node_modules/next": { "version": "14.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-14.0.3.tgz", "integrity": "sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==", "dependencies": { "@next/env": "14.0.3", @@ -21319,6 +23661,31 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/next/node_modules/postcss/node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/next/node_modules/postcss/node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -21335,9 +23702,9 @@ } }, "node_modules/node-abi": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.52.0.tgz", - "integrity": "sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ==", + "version": "3.65.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", + "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", "optional": true, "dependencies": { "semver": "^7.3.5" @@ -21419,9 +23786,9 @@ } }, "node_modules/node-fetch-native": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.4.1.tgz", - "integrity": "sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==" + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==" }, "node_modules/node-forge": { "version": "1.3.1", @@ -21432,9 +23799,9 @@ } }, "node_modules/node-gyp": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", - "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", + "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", "dev": true, "optional": true, "dependencies": { @@ -21477,23 +23844,23 @@ } }, "node_modules/node-gyp/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, "optional": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -21510,9 +23877,9 @@ } }, "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "optional": true, "dependencies": { @@ -21525,6 +23892,33 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/node-gyp/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/node-gyp/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "optional": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/node-gyp/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -21547,10 +23941,81 @@ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, + "node_modules/node-stdlib-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz", + "integrity": "sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==", + "dependencies": { + "assert": "^2.0.0", + "browser-resolve": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^5.7.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "create-require": "^1.1.1", + "crypto-browserify": "^3.11.0", + "domain-browser": "^4.22.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "isomorphic-timers-promises": "^1.0.1", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "pkg-dir": "^5.0.0", + "process": "^0.11.10", + "punycode": "^1.4.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.6.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.1", + "url": "^0.11.0", + "util": "^0.12.4", + "vm-browserify": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-stdlib-browser/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/node-stdlib-browser/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dev": true, "optional": true, "dependencies": { @@ -21564,18 +24029,18 @@ } }, "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz", + "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==", "dev": true, "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=10" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/normalize-path": { @@ -21596,9 +24061,9 @@ } }, "node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", "dev": true, "engines": { "node": ">=14.16" @@ -21608,9 +24073,9 @@ } }, "node_modules/npm": { - "version": "9.9.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.9.2.tgz", - "integrity": "sha512-D3tV+W0PzJOlwo8YmO6fNzaB1CrMVYd1V+2TURF6lbCbmZKqMsYgeQfPVvqiM3zbNSJPhFEnmlEXIogH2Vq7PQ==", + "version": "9.9.3", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.9.3.tgz", + "integrity": "sha512-Z1l+rcQ5kYb17F3hHtO601arEpvdRYnCLtg8xo3AGtyj3IthwaraEOexI9903uANkifFbqHC8hT53KIrozWg8A==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -21695,21 +24160,21 @@ "@npmcli/run-script": "^6.0.2", "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^17.1.3", + "cacache": "^17.1.4", "chalk": "^5.3.0", - "ci-info": "^3.8.0", + "ci-info": "^4.0.0", "cli-columns": "^4.0.0", "cli-table3": "^0.6.3", "columnify": "^1.6.0", "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.2", - "glob": "^10.2.7", + "fs-minipass": "^3.0.3", + "glob": "^10.3.10", "graceful-fs": "^4.2.11", "hosted-git-info": "^6.1.1", "ini": "^4.1.1", "init-package-json": "^5.0.0", "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^3.0.0", + "json-parse-even-better-errors": "^3.0.1", "libnpmaccess": "^7.0.2", "libnpmdiff": "^5.0.20", "libnpmexec": "^6.0.4", @@ -21723,14 +24188,14 @@ "libnpmversion": "^4.0.2", "make-fetch-happen": "^11.1.1", "minimatch": "^9.0.3", - "minipass": "^5.0.0", + "minipass": "^7.0.4", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^9.4.0", + "node-gyp": "^9.4.1", "nopt": "^7.2.0", "normalize-package-data": "^5.0.0", "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.2.0", + "npm-install-checks": "^6.3.0", "npm-package-arg": "^10.1.0", "npm-pick-manifest": "^8.0.2", "npm-profile": "^7.0.1", @@ -21743,12 +24208,12 @@ "proc-log": "^3.0.0", "qrcode-terminal": "^0.12.0", "read": "^2.1.0", - "semver": "^7.5.4", + "semver": "^7.6.0", "sigstore": "^1.9.0", "spdx-expression-parse": "^3.0.1", - "ssri": "^10.0.4", + "ssri": "^10.0.5", "supports-color": "^9.4.0", - "tar": "^6.1.15", + "tar": "^6.2.0", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", @@ -21785,6 +24250,12 @@ "node": ">=0.1.90" } }, + "node_modules/npm/node_modules/@gar/promisify": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", "dev": true, @@ -21859,7 +24330,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "6.5.0", + "version": "6.5.1", "dev": true, "inBundle": true, "license": "ISC", @@ -21872,7 +24343,7 @@ "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^4.0.0", - "@npmcli/query": "^3.0.0", + "@npmcli/query": "^3.1.0", "@npmcli/run-script": "^6.0.0", "bin-links": "^4.0.1", "cacache": "^17.0.4", @@ -21906,13 +24377,13 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "6.4.0", + "version": "6.4.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", + "ci-info": "^4.0.0", "ini": "^4.1.0", "nopt": "^7.0.0", "proc-log": "^3.0.0", @@ -22013,6 +24484,19 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/@npmcli/move-file": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", "dev": true, @@ -22062,7 +24546,7 @@ } }, "node_modules/npm/node_modules/@npmcli/query": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -22187,18 +24671,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/abort-controller": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/npm/node_modules/agent-base": { "version": "6.0.2", "dev": true, @@ -22212,13 +24684,11 @@ } }, "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.3.0", + "version": "4.5.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", "humanize-ms": "^1.2.1" }, "engines": { @@ -22275,14 +24745,10 @@ "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { - "version": "4.0.0", + "version": "4.0.2", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -22293,28 +24759,8 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/bin-links": { - "version": "4.0.2", + "version": "4.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -22346,30 +24792,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/npm/node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", "dev": true, @@ -22380,7 +24802,7 @@ } }, "node_modules/npm/node_modules/cacache": { - "version": "17.1.3", + "version": "17.1.4", "dev": true, "inBundle": true, "license": "ISC", @@ -22389,7 +24811,7 @@ "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^7.7.1", - "minipass": "^5.0.0", + "minipass": "^7.0.3", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -22424,7 +24846,7 @@ } }, "node_modules/npm/node_modules/ci-info": { - "version": "3.8.0", + "version": "4.0.0", "dev": true, "funding": [ { @@ -22497,7 +24919,7 @@ } }, "node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.1", + "version": "6.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -22645,17 +25067,8 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/depd": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/npm/node_modules/diff": { - "version": "5.1.0", + "version": "5.2.0", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -22700,24 +25113,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/event-target-shim": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/events": { - "version": "3.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", "dev": true, @@ -22750,12 +25145,12 @@ } }, "node_modules/npm/node_modules/fs-minipass": { - "version": "3.0.2", + "version": "3.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -22768,10 +25163,13 @@ "license": "ISC" }, "node_modules/npm/node_modules/function-bind": { - "version": "1.1.1", + "version": "1.1.2", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", @@ -22793,19 +25191,19 @@ } }, "node_modules/npm/node_modules/glob": { - "version": "10.2.7", + "version": "10.3.10", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -22820,24 +25218,24 @@ "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/has": { - "version": "1.0.3", + "node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hasown": { + "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">= 0.4.0" + "node": ">= 0.4" } }, - "node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, "node_modules/npm/node_modules/hosted-git-info": { "version": "6.1.1", "dev": true, @@ -22905,28 +25303,8 @@ "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.3", + "version": "6.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -22955,6 +25333,12 @@ "node": ">=8" } }, + "node_modules/npm/node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "inBundle": true, + "license": "ISC" + }, "node_modules/npm/node_modules/inflight": { "version": "1.0.6", "dev": true, @@ -22998,11 +25382,24 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/ip": { - "version": "2.0.0", + "node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", @@ -23026,12 +25423,12 @@ } }, "node_modules/npm/node_modules/is-core-module": { - "version": "2.13.0", + "version": "2.13.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -23059,7 +25456,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { - "version": "2.2.1", + "version": "2.3.6", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", @@ -23076,8 +25473,14 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/npm/node_modules/jsbn": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -23116,7 +25519,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "7.0.2", + "version": "7.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -23129,7 +25532,7 @@ } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "5.0.20", + "version": "5.0.21", "dev": true, "inBundle": true, "license": "ISC", @@ -23149,14 +25552,14 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "6.0.4", + "version": "6.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/arborist": "^6.5.0", "@npmcli/run-script": "^6.0.0", - "ci-info": "^3.7.1", + "ci-info": "^4.0.0", "npm-package-arg": "^10.1.0", "npmlog": "^7.0.1", "pacote": "^15.0.8", @@ -23171,7 +25574,7 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "4.2.1", + "version": "4.2.2", "dev": true, "inBundle": true, "license": "ISC", @@ -23183,7 +25586,7 @@ } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "9.0.3", + "version": "9.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -23196,7 +25599,7 @@ } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "5.0.4", + "version": "5.0.5", "dev": true, "inBundle": true, "license": "ISC", @@ -23209,7 +25612,7 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "5.0.20", + "version": "5.0.21", "dev": true, "inBundle": true, "license": "ISC", @@ -23224,12 +25627,12 @@ } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "7.5.1", + "version": "7.5.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "ci-info": "^3.6.1", + "ci-info": "^4.0.0", "normalize-package-data": "^5.0.0", "npm-package-arg": "^10.1.0", "npm-registry-fetch": "^14.0.3", @@ -23243,7 +25646,7 @@ } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "6.0.2", + "version": "6.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -23255,7 +25658,7 @@ } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "5.0.3", + "version": "5.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -23268,7 +25671,7 @@ } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "4.0.2", + "version": "4.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -23318,6 +25721,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", "dev": true, @@ -23334,12 +25746,12 @@ } }, "node_modules/npm/node_modules/minipass": { - "version": "5.0.0", + "version": "7.0.4", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/npm/node_modules/minipass-collect": { @@ -23367,12 +25779,12 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.3", + "version": "3.0.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^5.0.0", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, @@ -23539,7 +25951,7 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "9.4.0", + "version": "9.4.1", "dev": true, "inBundle": true, "license": "MIT", @@ -23548,7 +25960,7 @@ "exponential-backoff": "^3.1.1", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", + "make-fetch-happen": "^10.0.3", "nopt": "^6.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -23563,6 +25975,19 @@ "node": "^12.13 || ^14.13 || >=16" } }, + "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/fs": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm/node_modules/node-gyp/node_modules/abbrev": { "version": "1.1.1", "dev": true, @@ -23592,6 +26017,87 @@ "concat-map": "0.0.1" } }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache": { + "version": "16.1.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { "version": "4.0.4", "dev": true, @@ -23631,6 +26137,33 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "10.2.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { "version": "3.1.2", "dev": true, @@ -23643,6 +26176,35 @@ "node": "*" } }, + "node_modules/npm/node_modules/node-gyp/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minipass-fetch": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { "version": "6.0.0", "dev": true, @@ -23673,25 +26235,47 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/readable-stream": { - "version": "3.6.2", + "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { + "version": "3.0.7", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/ssri": { + "version": "9.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "minipass": "^3.1.1" }, "engines": { - "node": ">= 6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { - "version": "3.0.7", + "node_modules/npm/node_modules/node-gyp/node_modules/unique-filename": { + "version": "2.0.1", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/unique-slug": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/npm/node_modules/node-gyp/node_modules/which": { "version": "2.0.2", @@ -23760,7 +26344,7 @@ } }, "node_modules/npm/node_modules/npm-install-checks": { - "version": "6.2.0", + "version": "6.3.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -23853,6 +26437,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", "dev": true, @@ -23933,6 +26526,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/pacote/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", "dev": true, @@ -23966,13 +26568,13 @@ } }, "node_modules/npm/node_modules/path-scurry": { - "version": "1.9.2", + "version": "1.10.1", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -23982,7 +26584,7 @@ } }, "node_modules/npm/node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.1", + "version": "10.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -23991,7 +26593,7 @@ } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.13", + "version": "6.0.15", "dev": true, "inBundle": true, "license": "MIT", @@ -24012,15 +26614,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/process": { - "version": "0.11.10", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", "dev": true, @@ -24128,18 +26721,17 @@ } }, "node_modules/npm/node_modules/readable-stream": { - "version": "4.4.0", + "version": "3.6.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 6" } }, "node_modules/npm/node_modules/retry": { @@ -24236,7 +26828,7 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.5.4", + "version": "7.6.0", "dev": true, "inBundle": true, "license": "ISC", @@ -24290,7 +26882,7 @@ } }, "node_modules/npm/node_modules/signal-exit": { - "version": "4.0.2", + "version": "4.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -24331,16 +26923,16 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.7.1", + "version": "2.8.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, @@ -24369,7 +26961,7 @@ } }, "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", + "version": "2.5.0", "dev": true, "inBundle": true, "license": "CC-BY-3.0" @@ -24385,18 +26977,18 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.13", + "version": "3.0.17", "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { - "version": "10.0.4", + "version": "10.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -24478,7 +27070,7 @@ } }, "node_modules/npm/node_modules/tar": { - "version": "6.1.15", + "version": "6.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -24518,6 +27110,15 @@ "node": ">=8" } }, + "node_modules/npm/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", "dev": true, @@ -24867,28 +27468,67 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.entries/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -24898,39 +27538,83 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.groupby/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -24948,15 +27632,20 @@ } }, "node_modules/ofetch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.3.tgz", - "integrity": "sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.4.tgz", + "integrity": "sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==", "dependencies": { - "destr": "^2.0.1", - "node-fetch-native": "^1.4.0", - "ufo": "^1.3.0" + "destr": "^2.0.3", + "node-fetch-native": "^1.6.3", + "ufo": "^1.5.3" } }, + "node_modules/ohash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz", + "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==" + }, "node_modules/on-exit-leak-free": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", @@ -25041,10 +27730,13 @@ } }, "node_modules/openapi3-ts/node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } @@ -25088,6 +27780,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -25118,12 +27815,12 @@ } }, "node_modules/p-filter": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.0.0.tgz", - "integrity": "sha512-3gxOrNadcyxj+YKFyRmRIEuCMGayNNJoXL7Zf1dqfdfoDsVB190bHfFfhqfcNEDFLfQP1q2uir2cBgIqnIT+cQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, "dependencies": { - "p-map": "^7.0.0" + "p-map": "^7.0.1" }, "engines": { "node": ">=18" @@ -25145,7 +27842,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -25160,7 +27856,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -25172,9 +27867,9 @@ } }, "node_modules/p-map": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.0.tgz", - "integrity": "sha512-EZl03dLKv3RypkrjlevZoNwQMSy4bAblWcR18zhonktnN4fUs3asFQKSe0awn982omGxamvbejqQKQYDJYHCEg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz", + "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", "dev": true, "engines": { "node": ">=18" @@ -25220,13 +27915,12 @@ } }, "node_modules/pac-resolver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", - "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, "dependencies": { "degenerator": "^5.0.0", - "ip": "^1.1.8", "netmask": "^2.0.2" }, "engines": { @@ -25250,15 +27944,46 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/parse-asn1/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/parse-asn1/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" } }, "node_modules/parse-entities": { @@ -25357,6 +28082,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -25384,13 +28110,21 @@ } }, "node_modules/patch-package/node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -25451,9 +28185,9 @@ } }, "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" }, "node_modules/pause-stream": { "version": "0.0.11", @@ -25491,9 +28225,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -25523,18 +28257,6 @@ "node": ">=0.10.0" } }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pino": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", @@ -25715,13 +28437,13 @@ } }, "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.1.tgz", + "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==", "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" + "confbox": "^0.1.7", + "mlly": "^1.7.0", + "pathe": "^1.1.2" } }, "node_modules/plist": { @@ -25752,9 +28474,9 @@ "integrity": "sha512-95ChzOoYLOPIyVmL+Y6X+abKGXUJlvOVLkB1QQkyXl7Uczc6FElUy/x01NS7r2GX6GRezloO/ecCX9h4U9KadA==" }, "node_modules/pony-cause": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.10.tgz", - "integrity": "sha512-3IKLNXclQgkU++2fSi93sQ6BznFuxSLB11HdvZQ6JW/spahf/P1pAHBQEahr20rs0htZW0UDkM1HmA+nZkXKsw==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz", + "integrity": "sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==", "engines": { "node": ">=12.0.0" } @@ -25791,11 +28513,29 @@ "ms": "^2.1.1" } }, + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", - "dev": true, + "version": "8.4.38", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -25813,7 +28553,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -25826,18 +28566,18 @@ "dev": true }, "node_modules/preact": { - "version": "10.19.3", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.3.tgz", - "integrity": "sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==", + "version": "10.22.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.0.tgz", + "integrity": "sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" } }, "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "optional": true, "dependencies": { "detect-libc": "^2.0.0", @@ -25871,7 +28611,6 @@ }, "node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "bin": { @@ -25945,8 +28684,7 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/process-warning": { "version": "1.0.0", @@ -26058,6 +28796,15 @@ "node": ">=12.0.0" } }, + "node_modules/proto3-json-serializer/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/proto3-json-serializer/node_modules/long": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", @@ -26065,9 +28812,9 @@ "dev": true }, "node_modules/proto3-json-serializer/node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", + "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -26113,6 +28860,14 @@ "pbts": "bin/pbts" } }, + "node_modules/protobufjs/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -26204,7 +28959,6 @@ }, "node_modules/pullstate": { "version": "1.25.0", - "resolved": "https://registry.npmjs.org/pullstate/-/pullstate-1.25.0.tgz", "integrity": "sha512-6SJMhK5EbDhrbyocMQOZKY3QKC5RfLcdtYD1y7wioF5dseVsdi3vmeHG3TwW4SrhQQP/WKyU/Np2X6UOhq1F6g==", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -26227,8 +28981,16 @@ "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "engines": { + "node": ">=6" + } }, "node_modules/pupa": { "version": "2.1.1", @@ -26383,9 +29145,9 @@ } }, "node_modules/query-string": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", - "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.1.tgz", + "integrity": "sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w==", "dependencies": { "decode-uri-component": "^0.2.0", "filter-obj": "^1.1.0", @@ -26399,6 +29161,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -26439,23 +29209,23 @@ } }, "node_modules/radix3": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.0.tgz", - "integrity": "sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==" }, "node_modules/ramda": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz", - "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==", + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz", + "integrity": "sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/ramda" } }, "node_modules/ramda-adjunct": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ramda-adjunct/-/ramda-adjunct-4.1.1.tgz", - "integrity": "sha512-BnCGsZybQZMDGram9y7RiryoRHS5uwx8YeGuUeDKuZuvK38XO6JJfmK85BwRWAKFA6pZ5nZBO/HBFtExVaf31w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ramda-adjunct/-/ramda-adjunct-5.0.1.tgz", + "integrity": "sha512-UTQCcWnoiuYH+ua+jGg3GTktcmCSD2W7OO2++tmv8p2Ze+N9VgVACERg4g36rRfIXklVMtqazyBLBWXfoPKgRQ==", "engines": { "node": ">=0.10.3" }, @@ -26464,7 +29234,7 @@ "url": "https://opencollective.com/ramda-adjunct" }, "peerDependencies": { - "ramda": ">= 0.29.0" + "ramda": ">= 0.30.0" } }, "node_modules/randexp": { @@ -26551,22 +29321,29 @@ } }, "node_modules/re2": { - "version": "1.20.9", - "resolved": "https://registry.npmjs.org/re2/-/re2-1.20.9.tgz", - "integrity": "sha512-ZYcPTFr5ha2xq3WQjBDTF9CWPSDK1z28MLh5UFRxc//7X8BNQ3A7yR7ITnP0jO346661ertdKVFqw1qoL3FMEQ==", + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/re2/-/re2-1.21.3.tgz", + "integrity": "sha512-GI+KoGkHT4kxTaX+9p0FgNB1XUnCndO9slG5qqeEoZ7kbf6Dk6ohQVpmwKVeSp7LPLn+g6Q3BaCopz4oHuBDuQ==", "dev": true, "hasInstallScript": true, "optional": true, "dependencies": { "install-artifact-from-github": "^1.3.5", - "nan": "^2.18.0", - "node-gyp": "^10.0.1" + "nan": "^2.20.0", + "node-gyp": "^10.1.0" } }, + "node_modules/re2/node_modules/nan": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", + "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", + "dev": true, + "optional": true + }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -26610,15 +29387,15 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-hook-form": { @@ -26767,7 +29544,6 @@ }, "node_modules/react-router-dom": { "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", "dependencies": { "@babel/runtime": "^7.12.13", @@ -26840,7 +29616,6 @@ }, "node_modules/react-use-gesture": { "version": "9.1.3", - "resolved": "https://registry.npmjs.org/react-use-gesture/-/react-use-gesture-9.1.3.tgz", "integrity": "sha512-CdqA2SmS/fj3kkS2W8ZU8wjTbVBAIwDWaRprX7OKaj7HlGwBasGEFggmk5qNklknqk9zK/h8D355bEJFTpqEMg==", "deprecated": "This package is no longer maintained. Please use @use-gesture/react instead", "peerDependencies": { @@ -26953,9 +29728,9 @@ } }, "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.3.tgz", - "integrity": "sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==", + "version": "4.20.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz", + "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==", "dev": true, "engines": { "node": ">=16" @@ -26976,22 +29751,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", - "dev": true, - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/read-pkg/node_modules/json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -27006,21 +29769,6 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/read-pkg/node_modules/parse-json": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz", @@ -27053,9 +29801,9 @@ } }, "node_modules/read-pkg/node_modules/type-fest": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.3.tgz", - "integrity": "sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==", + "version": "4.20.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz", + "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==", "dev": true, "engines": { "node": ">=16" @@ -27165,25 +29913,6 @@ "esprima": "~4.0.0" } }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/redux": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", @@ -27203,19 +29932,19 @@ "node_modules/reflect-metadata": { "version": "0.1.14", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", - "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", - "peer": true + "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==" }, "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -27226,6 +29955,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/reflect.getprototypeof/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/refractor": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", @@ -27317,10 +30065,15 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/remarkable/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, "node_modules/remove-accents": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", - "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==" }, "node_modules/repeat-string": { "version": "1.6.1", @@ -27433,7 +30186,6 @@ }, "node_modules/reselect": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.0.1.tgz", "integrity": "sha512-D72j2ubjgHpvuCiORWkOUxndHJrxDaSolheiz5CO+roz8ka97/4msh2E8F5qay4GawR5vzBt5MkbDHT+Rdy/Wg==" }, "node_modules/resolve": { @@ -27614,6 +30366,41 @@ "rlp": "bin/rlp" } }, + "node_modules/rollup": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "peer": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" + } + }, "node_modules/router": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/router/-/router-1.3.8.tgz", @@ -27654,12 +30441,15 @@ "dev": true }, "node_modules/rpc-websockets": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.9.0.tgz", - "integrity": "sha512-DwKewQz1IUA5wfLvgM8wDpPRcr+nWSxuFxx5CbrI2z/MyyZ4nXLM86TvIA+cI1ZAdqC8JIBR1mZR55dzaLU+Hw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.0.1.tgz", + "integrity": "sha512-JCkdc/TfJBGRfmjIFK7cmqX79nwPWUd9xCM0DAydRbdLShsW3j/GV2gmPlaFa8V1+2u4V/O47fm4ZR5+F6HyDw==", "dependencies": { - "@babel/runtime": "^7.17.2", - "eventemitter3": "^4.0.7", + "@swc/helpers": "^0.5.11", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.2.2", + "buffer": "^6.0.3", + "eventemitter3": "^5.0.1", "uuid": "^8.3.2", "ws": "^8.5.0" }, @@ -27672,6 +30462,40 @@ "utf-8-validate": "^5.0.2" } }, + "node_modules/rpc-websockets/node_modules/@swc/helpers": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.11.tgz", + "integrity": "sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/rpc-websockets/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/rpc-websockets/node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + }, + "node_modules/rpc-websockets/node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rpc-websockets/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, "node_modules/rpc-websockets/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -27711,14 +30535,21 @@ "queue-microtask": "^1.2.2" } }, + "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-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dev": true, + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -27729,6 +30560,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-array-concat/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -27754,15 +30603,35 @@ "integrity": "sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==" }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -27782,7 +30651,6 @@ }, "node_modules/sass": { "version": "1.69.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", "devOptional": true, "dependencies": { @@ -27804,9 +30672,9 @@ "dev": true }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } @@ -27881,6 +30749,11 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" }, + "node_modules/secretjs/node_modules/@types/node": { + "version": "11.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" + }, "node_modules/secretjs/node_modules/big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", @@ -27897,6 +30770,28 @@ "node": "*" } }, + "node_modules/secretjs/node_modules/bip32": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.6.tgz", + "integrity": "sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==", + "dependencies": { + "@types/node": "10.12.18", + "bs58check": "^2.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "tiny-secp256k1": "^1.1.3", + "typeforce": "^1.11.5", + "wif": "^2.0.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/secretjs/node_modules/bip32/node_modules/@types/node": { + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" + }, "node_modules/secretjs/node_modules/bip39": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", @@ -27908,10 +30803,23 @@ "randombytes": "^2.0.1" } }, - "node_modules/secretjs/node_modules/bip39/node_modules/@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" + "node_modules/secretjs/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/secretjs/node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } }, "node_modules/secretjs/node_modules/cross-fetch": { "version": "3.1.5", @@ -27973,6 +30881,14 @@ "node": ">=12.0.0" } }, + "node_modules/secretjs/node_modules/protobufjs/node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/secure-random": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/secure-random/-/secure-random-1.1.2.tgz", @@ -27980,7 +30896,6 @@ }, "node_modules/semantic-release": { "version": "21.1.2", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.1.2.tgz", "integrity": "sha512-kz76azHrT8+VEkQjoCBHE06JNQgTgsC4bT8XfCzb7DHcsk9vG3fqeMVik8h5rcWCYi2Fd+M3bwA7BG8Z8cRwtA==", "dev": true, "dependencies": { @@ -28133,44 +31048,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/hosted-git-info": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "node_modules/semantic-release/node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", "dev": true, "dependencies": { - "lru-cache": "^10.0.1" + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/semantic-release/node_modules/human-signals": { @@ -28243,9 +31134,9 @@ } }, "node_modules/semantic-release/node_modules/npm-run-path": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", - "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { "path-key": "^4.0.0" @@ -28468,12 +31359,9 @@ } }, "node_modules/ses": { - "version": "0.18.8", - "resolved": "https://registry.npmjs.org/ses/-/ses-0.18.8.tgz", - "integrity": "sha512-kOH1AhJc6gWDXKURKeU1w7iFUdImAegAljVvBg5EUBgNqjH4bxcEsGVUadVEPtA2PVRMyQp1fiSMDwEZkQNj1g==", - "dependencies": { - "@endo/env-options": "^0.1.4" - } + "version": "0.18.4", + "resolved": "https://registry.npmjs.org/ses/-/ses-0.18.4.tgz", + "integrity": "sha512-Ph0PC38Q7uutHmMM9XPqA7rp/2taiRwW6pIZJwTr4gz90DtrBvy/x7AmNPH2uqNPhKriZpYKvPi1xKWjM9xJuQ==" }, "node_modules/set-blocking": { "version": "2.0.0", @@ -28481,14 +31369,16 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -28498,7 +31388,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dev": true, "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", @@ -28578,9 +31467,9 @@ } }, "node_modules/short-unique-id": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-5.0.3.tgz", - "integrity": "sha512-yhniEILouC0s4lpH0h7rJsfylZdca10W9mDJRAFh3EpcSUanCHGb0R7kcFOIUCZYSAPo0PUD5ZxWQdW0T4xaug==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-5.2.0.tgz", + "integrity": "sha512-cMGfwNyfDZ/nzJ2k2M+ClthBIh//GlZl1JEf47Uoa9XR11bz8Pa2T2wQO4bVrRdH48LrIDWJahQziKo3MjhsWg==", "bin": { "short-unique-id": "bin/short-unique-id", "suid": "bin/short-unique-id" @@ -28813,26 +31702,26 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", "dev": true, "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -28840,11 +31729,17 @@ "node": ">= 14" } }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } }, "node_modules/sonic-boom": { "version": "2.8.0", @@ -28863,9 +31758,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -28896,9 +31791,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -28912,9 +31807,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, "node_modules/split": { @@ -28946,9 +31841,10 @@ } }, "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true }, "node_modules/sshpk": { "version": "1.18.0", @@ -28975,10 +31871,16 @@ "node": ">=0.10.0" } }, + "node_modules/sshpk/node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, "node_modules/ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "optional": true, "dependencies": { @@ -29002,11 +31904,6 @@ "resolved": "https://registry.npmjs.org/stampit/-/stampit-4.3.2.tgz", "integrity": "sha512-pE2org1+ZWQBnIxRPrBM2gVupkuDD0TTNIo1H6GdT/vO82NXli2z8lRE8cu/nBIHrcOCXFBAHpb9ZldrB2/qOA==" }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" - }, "node_modules/start-server-and-test": { "version": "1.15.4", "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.15.4.tgz", @@ -29135,6 +32032,17 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, "node_modules/stream-json": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", @@ -29145,14 +32053,14 @@ } }, "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" }, "node_modules/stream-transform": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.3.0.tgz", - "integrity": "sha512-pG1NeDdmErNYKtvTpFayrEueAmL0xVU5wd22V7InGnatl4Ocq3HY7dcXIKj629kXvYQvglCC7CeDIGAlx1RNGA==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.3.2.tgz", + "integrity": "sha512-v64PUnPy9Qw94NGuaEMo+9RHQe4jTBYf+NkTtqkCgeuiNo8NlL0LtLR7fkKWNVFtp3RhIm5Dlxkgm5uz7TDimQ==" }, "node_modules/streamsearch": { "version": "1.1.0", @@ -29202,9 +32110,6 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" } }, "node_modules/string-width-cjs/node_modules/emoji-regex": { @@ -29220,34 +32125,142 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall/node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "node_modules/string.prototype.matchall/node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall/node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -29257,28 +32270,65 @@ } }, "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend/node_modules/call-bind": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart/node_modules/call-bind": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -29304,9 +32354,6 @@ "optional": true, "dependencies": { "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" } }, "node_modules/strip-bom": { @@ -29510,9 +32557,12 @@ } }, "node_modules/superstruct": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", - "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", + "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", + "engines": { + "node": ">=14.0.0" + } }, "node_modules/supports-color": { "version": "7.2.0", @@ -29582,7 +32632,6 @@ }, "node_modules/swagger-ui-react": { "version": "5.10.5", - "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.10.5.tgz", "integrity": "sha512-uBQLku4j3L1NC4/xE3HTgz1EcFisBphh8AnGqbj9LMxeGGcpKOlx/ZDigRAeVXWr9jOnZZbeGBzMe4NVHxPZrQ==", "dependencies": { "@babel/runtime-corejs3": "^7.23.5", @@ -29640,7 +32689,6 @@ }, "node_modules/swr": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.4.tgz", "integrity": "sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==", "dependencies": { "client-only": "^0.0.1", @@ -29658,6 +32706,17 @@ "node": ">=0.10" } }, + "node_modules/system-architecture": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", + "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tabbable": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", @@ -29952,10 +33011,21 @@ "node": ">=0.10.0" } }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" }, "node_modules/tiny-secp256k1": { "version": "1.1.6", @@ -30006,6 +33076,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -30075,24 +33146,98 @@ "node": ">=6" } }, - "node_modules/toxic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toxic/-/toxic-1.0.1.tgz", - "integrity": "sha512-WI3rIGdcaKULYg7KVoB0zcjikqvcYYvcuT6D89bFPz2rVR0Rl0PK6x8/X62rtdLtBKIE985NzVf/auTtGegIIg==", - "dev": true, + "node_modules/toxic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toxic/-/toxic-1.0.1.tgz", + "integrity": "sha512-WI3rIGdcaKULYg7KVoB0zcjikqvcYYvcuT6D89bFPz2rVR0Rl0PK6x8/X62rtdLtBKIE985NzVf/auTtGegIIg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.10" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/traverse": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.9.tgz", + "integrity": "sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==", + "dependencies": { + "gopd": "^1.0.1", + "typedarray.prototype.slice": "^1.0.3", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/traverse-chain": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", + "integrity": "sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg==" + }, + "node_modules/traverse/node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/traverse/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/traverse/node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "lodash": "^4.17.10" + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/traverse": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", - "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "node_modules/traverse/node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, "engines": { "node": ">= 0.4" }, @@ -30100,11 +33245,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/traverse-chain": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", - "integrity": "sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg==" - }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -30126,9 +33266,9 @@ } }, "node_modules/tree-sitter-json": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/tree-sitter-json/-/tree-sitter-json-0.20.1.tgz", - "integrity": "sha512-482hf7J+aBwhksSw8yWaqI8nyP1DrSwnS4IMBShsnkFWD3SE8oalHnsEik59fEVi3orcTCUtMzSjZx+0Tpa6Vw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/tree-sitter-json/-/tree-sitter-json-0.20.2.tgz", + "integrity": "sha512-eUxrowp4F1QEGk/i7Sa+Xl8Crlfp7J0AXxX1QdJEQKQYMWhgMbCIgyQvpO3Q0P9oyTrNQxRLlRipDS44a8EtRw==", "hasInstallScript": true, "optional": true, "dependencies": { @@ -30185,12 +33325,12 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -30204,6 +33344,11 @@ "node": ">=14.0.0" } }, + "node_modules/ts-mixer": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -30268,6 +33413,11 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -30287,9 +33437,9 @@ "dev": true }, "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" }, "node_modules/type-check": { "version": "0.4.0", @@ -30303,54 +33453,371 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-buffer/node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-buffer/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-buffer/node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-buffer/node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-buffer/node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-length/node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-length/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-length/node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-length/node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-length/node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset/node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset/node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset/node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset/node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, + "node_modules/typed-array-length/node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, + "node_modules/typed-array-length/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, + "node_modules/typed-array-length/node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -30359,17 +33826,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, + "node_modules/typed-array-length/node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -30378,15 +33840,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, + "node_modules/typed-array-length/node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -30400,6 +33866,71 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", + "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-offset": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray.prototype.slice/node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedoc": { + "version": "0.20.37", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.20.37.tgz", + "integrity": "sha512-9+qDhdc4X00qTNOtii6QX2z7ndAeWVOso7w3MPSoSJdXlVhpwPfm1yEp4ooKuWA9fiQILR8FKkyjmeqa13hBbw==", + "peer": true, + "dependencies": { + "colors": "^1.4.0", + "fs-extra": "^9.1.0", + "handlebars": "^4.7.7", + "lodash": "^4.17.21", + "lunr": "^2.3.9", + "marked": "~2.0.3", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shelljs": "^0.8.4", + "shiki": "^0.9.3", + "typedoc-default-themes": "^0.12.10" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 10.8.0" + }, + "peerDependencies": { + "typescript": "3.9.x || 4.0.x || 4.1.x || 4.2.x" + } + }, "node_modules/typedoc-default-themes": { "version": "0.12.10", "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", @@ -30409,22 +33940,50 @@ "node": ">= 8" } }, + "node_modules/typedoc-plugin-cname": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-cname/-/typedoc-plugin-cname-1.0.1.tgz", + "integrity": "sha512-f97SS5RzDCVBa7Frg1VketIMAkEl3OTvBs9wM8lLEkJVWCIG2yXnszglA82on39gFwQ1tyq8tiuxRgb4569GpA==", + "peerDependencies": { + "typedoc": "^0.20.27" + } + }, + "node_modules/typedoc/node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "peer": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/typedoc/node_modules/marked": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.7.tgz", + "integrity": "sha512-BJXxkuIfJchcXOJWTT2DOL+yFWifFv2yGYOUzvXg8Qz610QKw+sHCvTMYwA+qWGhlA2uivBezChZ/pBy1tWdkQ==", + "peer": true, + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 8.16.2" + } + }, "node_modules/typeforce": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" }, "node_modules/types-ramda": { - "version": "0.29.6", - "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.29.6.tgz", - "integrity": "sha512-VJoOk1uYNh9ZguGd3eZvqkdhD4hTGtnjRBUx5Zc0U9ftmnCgiWcSj/lsahzKunbiwRje1MxxNkEy1UdcXRCpYw==", + "version": "0.29.10", + "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.29.10.tgz", + "integrity": "sha512-5PJiW/eiTPyXXBYGZOYGezMl6qj7keBiZheRwfjJZY26QPHsNrjfJnz0mru6oeqqoTHOni893Jfd6zyUXfQRWg==", "dependencies": { "ts-toolbelt": "^9.6.0" } }, "node_modules/typescript": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "bin": { "tsc": "bin/tsc", @@ -30440,15 +33999,15 @@ "integrity": "sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w==" }, "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true }, "node_modules/ufo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", - "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==" + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", + "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==" }, "node_modules/uglify-js": { "version": "3.17.4", @@ -30474,7 +34033,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -30497,9 +34055,9 @@ "dev": true }, "node_modules/undici": { - "version": "5.28.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz", - "integrity": "sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==", + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -30507,15 +34065,20 @@ "node": ">=14.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "node_modules/unenv": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.8.0.tgz", - "integrity": "sha512-uIGbdCWZfhRRmyKj1UioCepQ0jpq638j/Cf0xFTn4zD1nGJ2lSdzYHLzfdXN791oo/0juUiSWW1fBklXMTsuqg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.9.0.tgz", + "integrity": "sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g==", "dependencies": { "consola": "^3.2.3", "defu": "^6.1.3", "mime": "^3.0.0", - "node-fetch-native": "^1.4.1", + "node-fetch-native": "^1.6.1", "pathe": "^1.1.1" } }, @@ -30650,35 +34213,35 @@ "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==" }, "node_modules/unstorage": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.10.1.tgz", - "integrity": "sha512-rWQvLRfZNBpF+x8D3/gda5nUCQL2PgXy2jNG4U7/Rc9BGEv9+CAJd0YyGCROUBKs9v49Hg8huw3aih5Bf5TAVw==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.10.2.tgz", + "integrity": "sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==", "dependencies": { "anymatch": "^3.1.3", - "chokidar": "^3.5.3", - "destr": "^2.0.2", - "h3": "^1.8.2", - "ioredis": "^5.3.2", - "listhen": "^1.5.5", - "lru-cache": "^10.0.2", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.11.1", + "listhen": "^1.7.2", + "lru-cache": "^10.2.0", "mri": "^1.2.0", - "node-fetch-native": "^1.4.1", + "node-fetch-native": "^1.6.2", "ofetch": "^1.3.3", - "ufo": "^1.3.1" + "ufo": "^1.4.0" }, "peerDependencies": { - "@azure/app-configuration": "^1.4.1", + "@azure/app-configuration": "^1.5.0", "@azure/cosmos": "^4.0.0", "@azure/data-tables": "^13.2.2", - "@azure/identity": "^3.3.2", - "@azure/keyvault-secrets": "^4.7.0", - "@azure/storage-blob": "^12.16.0", - "@capacitor/preferences": "^5.0.6", - "@netlify/blobs": "^6.2.0", - "@planetscale/database": "^1.11.0", - "@upstash/redis": "^1.23.4", - "@vercel/kv": "^0.2.3", - "idb-keyval": "^6.2.1" + "@azure/identity": "^4.0.1", + "@azure/keyvault-secrets": "^4.8.0", + "@azure/storage-blob": "^12.17.0", + "@capacitor/preferences": "^5.0.7", + "@netlify/blobs": "^6.5.0 || ^7.0.0", + "@planetscale/database": "^1.16.0", + "@upstash/redis": "^1.28.4", + "@vercel/kv": "^1.0.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.3.2" }, "peerDependenciesMeta": { "@azure/app-configuration": { @@ -30716,9 +34279,46 @@ }, "idb-keyval": { "optional": true + }, + "ioredis": { + "optional": true } } }, + "node_modules/unstorage/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/unstorage/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -30742,9 +34342,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { @@ -30761,8 +34361,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -30842,6 +34442,15 @@ "node": ">=6" } }, + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, "node_modules/url-join": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", @@ -31102,11 +34711,86 @@ } } }, + "node_modules/vite": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", + "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", + "peer": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-node-polyfills": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.21.0.tgz", + "integrity": "sha512-Sk4DiKnmxN8E0vhgEhzLudfJQfaT8k4/gJ25xvUPG54KjLJ6HAmDKbr4rzDD/QWEY+Lwg80KE85fGYBQihEPQA==", + "dependencies": { + "@rollup/plugin-inject": "^5.0.5", + "node-stdlib-browser": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/davidmyersdev" + }, + "peerDependencies": { + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, "node_modules/vlq": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==" }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -31178,14 +34862,6 @@ "node": ">=12.0.0" } }, - "node_modules/wait-on/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/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -31207,9 +34883,9 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "engines": { "node": ">= 8" } @@ -31405,13 +35081,13 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", "dependencies": { "bufferutil": "^4.0.1", "debug": "^2.2.0", - "es5-ext": "^0.10.50", + "es5-ext": "^0.10.63", "typedarray-to-buffer": "^3.1.5", "utf-8-validate": "^5.0.2", "yaeti": "^0.0.6" @@ -31486,7 +35162,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -31582,6 +35257,14 @@ "bs58check": "<3.0.0" } }, + "node_modules/wif/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/wif/node_modules/bs58check": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", @@ -31678,12 +35361,6 @@ "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": { @@ -31995,7 +35672,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, @@ -32047,6 +35723,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", diff --git a/package.json b/package.json index 19b3071c..ba0e6d04 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,18 @@ { "name": "hexa-lite", - "version": "1.1.0", + "version": "1.2.0", "homepage": ".", "private": false, "scripts": { "dev": "next dev", + "dev:emulator": "firebase emulators:start", "build": "next build", "start": "next start", "export": "next export", "predeploy:gh": "npm run build", "predeploy:fb": "npm run build", "deploy:gh": "gh-pages -d build", - "deploy:fb": "firebase deploy --only hosting:hexa-lite" + "deploy:fb": "firebase deploy --only hosting:app-hexa-lite" }, "dependencies": { "@0xsquid/widget": "^1.6.23", @@ -19,6 +20,7 @@ "@aave/math-utils": "^1.21.1", "@avalabs/avalanchejs": "^3.17.0", "@bgd-labs/aave-address-book": "^2.19.0", + "@bitcoinerlab/secp256k1": "^1.1.1", "@capacitor-community/barcode-scanner": "^4.0.1", "@capacitor/android": "^5.0.0", "@capacitor/core": "^5.0.0", @@ -27,10 +29,12 @@ "@capacitor/ios": "^5.0.0", "@capacitor/status-bar": "^5.0.0", "@cosmjs/stargate": "^0.32.1", + "@hexaonelabs/firebase-web3connect": "^0.0.9-alpha.10", "@ionic/react": "latest", "@ionic/react-router": "latest", + "@ionic/storage": "^4.0.0", "@khmyznikov/pwa-install": "^0.2.7", - "@lifi/widget": "^2.10.1", + "@lifi/widget": "^2.10.2", "@magic-ext/avalanche": "^16.4.0", "@magic-ext/bitcoin": "^16.4.0", "@magic-ext/cosmos": "^16.4.0", @@ -39,7 +43,8 @@ "@moonpay/moonpay-js": "^0.5.0", "@moonpay/moonpay-react": "^1.6.1", "@next/third-parties": "^14.1.4", - "@solana/web3.js": "^1.87.6", + "@solana/spl-token": "^0.4.6", + "@solana/web3.js": "^1.93.0", "@solendprotocol/solend-sdk": "^0.7.6", "@types/jest": "^26.0.20", "@types/node": "^12.19.15", @@ -47,9 +52,13 @@ "@types/react-dom": "^18.0.6", "@types/react-router": "^5.1.11", "@types/react-router-dom": "^5.1.7", - "bitcoinjs-lib": "^6.1.5", + "bip32": "^4.0.0", + "bip39": "^3.1.0", + "bitcoinjs-lib": "^6.1.6", + "bs58": "^5.0.0", "cors": "^2.8.5", "dayjs": "^1.11.10", + "ed25519-hd-key": "^1.3.0", "ethereum-blockies-base64": "^1.0.2", "ethers": "^5.7.2", "firebase": "^10.7.1", @@ -66,7 +75,9 @@ "react-router": "^5.3.4", "react-router-dom": "^5.3.4", "react-use-gesture": "^9.1.3", + "reflect-metadata": "^0.1.14", "reselect": "^5.0.0", + "stream-browserify": "^3.0.0", "swagger-ui-react": "^5.10.5", "swr": "^2.2.4", "uuid": "^9.0.1" @@ -81,6 +92,7 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "@types/bs58": "^4.0.4", "@types/cors": "^2.8.17", "@types/jest": "^27.5.2", "@types/node": "^16.18.36", diff --git a/public/assets/app-logo/100.png b/public/assets/app-logo/100.png index 7c6bfc8ad9d529cfef7bf0a8f620575565329d9c..9d2db32ffa2e508351745861ca019f8a1d6f74c3 100755 GIT binary patch literal 4099 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 literal 749 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�#EXbcvP5jm26}Bz>X%`%vD>h)Es+h{4CW0G@&P=r$b-px>4D<{p(OoNIwDtZ- zn6rRC{?fNiCzGY1+dT)&HAJi83(8L2WfQq;q@}_a-WqQp-sG!JtosD@qZtOFQ>Yv( z&P@BJ*e>nZ=r_HyGao{Ab*`_BRcPdH_L>oB_ma0CY3$Wk@@6cDjFfWG`yB>j;(e9* znUAxa*oHUiaej%lbE#SYz9H=7SnJ0hv&bsmg%7&gJDcwuFW}1f*S$U@)}5Yn)h->W z&PJ3FQtBFZ>dQG>6dtF8C6{jhAm>zF(@;hZ{G)v#qLduEFSbuRHwspP_g;tJYT{@K z;rA&HM+q~B5b^}4+NF$2t)lut*~Gil4Zi5`qs&=qrq$UM$+ZIfzOglszTlp)n;Zn) zY~+!d+}vxZDkUhpqOGemX4K>t{6e)g_g6Vmh8fMptvi_go`_iGP`@e-hi_kQQ8iY% zh(-}Q*301$W82H-&%r&EyQv3bhPBPQuHESPq=gS2!EwBkqUg68q{{C8I2^RBzT-W! z;aB#yGqjo~Wr#UI@?3(-BA4L_>olLagBsI*8cmCDLp<+S3ttv)tgfKsGKw(iV&Dgah( xY)L-a?g+&lB1Eh5TIBxU-Q@cJqS3SVxl!GLvKPMyKL5AH)X4mN$vLOk{{jhexu5_5 diff --git a/public/assets/app-logo/114.png b/public/assets/app-logo/114.png index 70a6e9037d453400999e47e0ec48204556923b9e..0c2e4b3842ce3e04fab64cce0633dd6e7b75176b 100755 GIT binary patch literal 4442 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 LruxNjN9w--_=Eer literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P3?%t>9eV(zk^_7~T!Hj|8iQG`ybFNVD3%2I z1v4;DyKR%ZMe0lNf9|FuOLgDIxt^&}6@HT3GrRb*x6!Jdo*A>30Tpu=ctjQhU3vtB z8K-LVNi#4o6??ikhE&XXJFENLA_D=p=&9YV0xnE14*mM)zfccc$zokjm2c}8RjZ)t) zp5S`=v&i?D9c-sI`7Xbfng8*{(~mc}?k~A+vBm1!t4CL?0;g#%=TkEHIhS2bxBrox zUv1ISR9}z%%yXiS-{0i0{MyIOI)_%4^1YkpYWY>La%Fb-=_hvQ6P9nWoEO{mOh=ow zL~Ebtvo}%PKc*aIi@X-ieZy__lSNy~qw|_~be2@+H0X1D-B-MMLh9m;8$KCs3p9vR zOFnt&r?S$HO%3TT>t6J37fEMUi-tEVi*6i0!#6Ejz45}^eZ?~><~~r5OWk%d*3D3~ z;9~jq##MKohcGSDe(tzVYL{8S=NZ>e7MGlzZ|ZQ>{@lI8RmV0NcCDPIuEMCTe1-Au z`3H-xCMG|K5|B%eyxO|Hj&rNd_foI!Z`*YE3%#1ZZSh&#Tv61~8X7n4sKruu>u9mZ zQ{?vMN;U*XeQ8TQwUSM0_ky+44q7f%oUPkj>eX)+!S))cAY$78P~AO1HAyp-p5@ye zDL%z{He%wRIL6TZ=W4`tey>_Ld*0)RlkOO`?bs02{Os0y5w6xv-gS&`OEs_fYhKg= Prbz}*S3j3^P6 diff --git a/public/assets/app-logo/128.png b/public/assets/app-logo/128.png index 1eddebe995f79e0c9d1c76b9febd996e0f770eef..3a94f12e21a77fb60bd937388188f66418ea1fe4 100755 GIT binary patch literal 4906 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 literal 902 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&B?tI~xB}__GzPO=c^3e!Q7j4a z3ua)RVsa;2WY7QLFRPWR&$#f$yqephBYh>sr}W69P1cLMzU6FwOCFaSW-L^L93`f3tx=+wHR(7r$#hm~dv}!~g%MZcAAqXmRUO_M&^q zNogVPZhkbH^i6>0u)%&2&9B>EO}tjR>)fyTkEh*#n{QcS^4+R)Rf5;l^&jT`$q`Aq zdVO#FLH|#^J(pQxUEYcI6nHAnVGn+A-8emJwxFU)s>(#{K4*drn(JOWJ|tHS-jXie{WNzT(iuEKq!mWr;=5^>()GMiJJX3^B`Dzo=eduw+#WxOBZ;TFpV8 z(S#*vi6Bcz6UUq+ju4##Ot{ehIELtDyD#NVt7*~;ITo?Xw!?GD2_>Dd?JtUIJI*GF zu&ReN)NQoz4`94yYs|baKTXf&)@ujV6%GHM&fQ{{lV--Z)T8K>+!o`nyU#Nn`W2nI zxiZGg;Yv$*_piH=3a1X! z4~l7V)lGK!`{%_cHIaSA%TBAG?D=~sbJLk67x#0Ye*V&J`HEal!@wKMFD~ZPy5O@k zU#h#n_}mYh?>DNK&saTGFLTKZoidMPXQSxcxo)oC)-=aTaliUmrPBLwv-zrqC5GpW z#U^JiIeD+cv3~i#Ypj2R_8zZ3_bmHXTxtB1o6_MGB7fIL$(}1b{he!*kNNNIzjg>; m1hVJrKc1d0(e~51hN1JZM18ri)&pSTW$<+Mb6Mw<&;$Si3DBSb diff --git a/public/assets/app-logo/144.png b/public/assets/app-logo/144.png index 6ee2b58e5de4f9a6e4f170210e57c57219dbc3b5..7aafe17d639c8c89d714a94ab3b72f646de863d7 100755 GIT binary patch literal 5295 zcmcgw3piBkyGIm~+>`5=WI_z%5`%FY<4*2|$S|X!F~iKrElGu3V%$=p?OI|GxnGk( zLlo6Ui9(^UT|>wj?Y;X~`<(MU=lsue=6Tkv^}XNk{eAEId*Ah~SrdEG%J=}M2qzO0 z(*aWxxGm#M**)0zGQOt}<8_P^hrbDu#Kgo++dY`m<+(+fm{?bR?48NZmKIPif}bJ^ zP4L7h2K)Il&`eC)!BEDfABKzq1pDFeBxtY>=o6hUmtBE+8b&MNBjk4 zjC4R)GT9#r1_uQNDF&%15{PHO%9@&*U?m6`0#RTf6i6X>GAdXBPddV2`k4xjA$bvf z{K-B9JYbg^wrMtQGbSn_WHhze;^U}Z4tB=7=y$3Ven)USXoi|rzp{0P_hph zhxsLNeH{503(jXZ6DSUaKcfQ*RzPFCQGqxz2*!xZ=L{Y|Lg7gO1``njPyj%*!Mh>i ze172gX8D;G{GTlT4faE>|4SM4$z-CB=XWXaBt_IWOW>}4ij2~NQRrPUlztN9PcNuG zn)E~9yP4Qw0)DYDFhBOdUxbE442q0F!yrl!RRtw= z1&Eq9_?M~gWz_y_!YG(*iiW8})I8NSAzlhf8tNDYRizUU1x;mDRRwP)Pfc%Cl!`LS z3-g`pPnUl%Av_sGY7jMux*Ee*`GlsLhSGPRZxD+3;th} z`DeNQCiq#_|D!_t|8QUJR{7fvyIWtz1f#wxKh>9EgX#y8u>>LvfeQ5@0IYnx2->^Q zzs~*(4h1-7i@~EYL<~_@8~iKc zzl-dUgC3@Eef!|7x$J$x_6{P^t!Np)0U4>bbQ#OS zx`vAaZ}Q^F`)zzLvKs063=}lx!GKq7(=Ha-++#k%Y{a9)6IUl7+XFjBGe{og=S!i` z(Vw@@e26whzYHdV?7n84kvO^*jh+vm(%lJ~&(`eJefbA=Py3dBf`>4hGXTLMbk*h( zn`fFwr0~)I`LKxV>(>hl%lroyyAF$PR}7y#^(2T%tDPmXU@@kZa_6zHk^5+%fXi`% zv~k-_VH%7%l9`>G^GZLK@){{4dFU#QcNDPZ0xLTt@Ce6kJP{puvfS#xh^?9kDp#id z^nA5;mQKWBU2)CW-x6=rI^vP++}s9O?ENCM^(b7+6>CoT%g(X4Nm(P>0?4>$R8zy1 z=>Z|XoneE=c5ZQjDkf=?QSj5=vyZxbW`=?Q{LIXVD={}u;sgchAHoFbcUkjBI{`F$ z517Z$f!SsBwQzpSYG=Oqj=QgJ2~US3V(&(?0afecU`kT%p2l|%s$VOq$g(xAUD%&0 z%X)_ba4v1#awl|xSo6*e0lr-SG^kK_{=J;YNPsBfz+4n<-RkJ3fFN?NnbPW(mZ|SD zB-VUzRX_qaV~a*M}Ooio{FXtKamc->y?PM`DDmEJ~72j{^PAuq*Jy7t?rP~pXS-mAqolp4T$b+)f$iOWo15k`|{W4aOi&YRgq^m&m%k>yk; zPy7;R7Bo;I8Cbz4tfNv9lBP$7#EH}6JeROG0SK-{V_X6fKbVr<_V(7hVr^_I|8}C3 z!Ai2>ME~70`<~otR!+CK=#`(BW9xy7z!jp715?#6U;Pit$shsdkM+oxG>w?^odDC%? z{G;lY1z!TszHP1rc|1(bR`&Y<#0^zF_u|WR<+O()-MYdRz8Z1RkvALl-<8}3(xkQ~r z&O&}sbYWrFz>C!z${@BeahM!mrm1v|UadI}e}qD+EOwX>YErr*d3$E9P8&226C9$}6ql~Z@QQ;Ndpucy0goI1pi@c~@simQMkql1hu{nUmAuuL)M(4o70F8M`-S&}d zO1gWR6;551A6#cGWSL$&*s}6!b7*JG0&Z;7?N?@TR*~OCw7fhPYjq;fQey11gaE

k&rM2uJEsx{dRl14^ic%iAXlNW5;NhHo(C72v zr0jU)&+$*+{uRx#8)d znNXQ~PrTiFjbhYGC$}HJYCJ3)PFcgo`>NvMEG=I`b!)c6TAQX!p4J21*z#Ppe1NkU zWf=d; zg^Vqc4zo@*tly(;g+CD2d>sNzuLyH0hSEaaSb<2+D|$g{RC!PhwvrMiIVc6fMjf~L z;J=|hpHLb$xr!*c%MO?9gX>s}cSYHRLa0e+bJrH)qfN3df4q--b+m9`Pk1Qci(Ay} zN~|E?i3a9wr)P1N=-{I8>4AHfpQ&|z!ssk-=GxzxLcWzn5saq>mG;w)wXrCh-PcRt zJI<5O`u{zgmZOx`5eJviE2lZ_BqOK!4Yn^fZLw^QZ9GtSOPaVb^~Gs zm216E=fXI3t5G+?rKG1naiik5r;kaf=X8J@Yo4IzrAsUeZ{FoUe%hKyp#V0J9a|Nx zW%{myvW!PGH%1~|US_7+Hwh+aq8<4*2Oy?%PGplCJzicqf8F|_hezb8$aB=SSzT%Q zlflkK_+|>;Qq>{TAfD}BiMm(%k$|J0)W zBJ-cME`8bem`=YuEcT(^+&3iAXrB1%r0dkS;+L*Gf`Vlw z+E?b!q=-OWRB-Ec$RdYjYa*|zi!O|Ev{O`ohm@AB-T{#l)HLWj!(5Y*=~ZGl+PnH5 zepwL@Mm@2^5}#%hwK^<|5!%D+pD3#KfeDC4jm@tlVX&n+BD51<4}H+QR5veDU@pq5 z&}nRJG~ScoHnjB8og9&Opp)DB7*ZnDs6n%D{Mp3g3cDMyFlAdOzm#oj3v$8L1;-37 z*S@-@)M`m~d7!xE=%ci1=j{%s>5PSA2(I~9xp6%n>6FiM%Yjv1`bqH_mC9kGkmM>@ zS2|V9Ch*ZaNxmyU@u|=Y*UaJ#T$-rB;^e|2c0yA%yf2GeeCWW_l`t`V{m8^^>d}d& z@?4!Dz8J^03v2BTCZT`uXK933aXXP`O~gv7m%KORb54r1#G#%l8;LBh zuBUHjr0gh7{%V~`7VyRxm+tK*or-izM^W`T+NTFXsIK|TO0lSJMXL&J$N5XH>;?M! zlDMt>{c|)t+8`+Mj0*SM>#9fVHsJw;)M%nE;cQipOo`4WH|pb)sC8R*IK<}iDI5tL zpgLj(IN)0rk21nyuO5Fdsy+|ztZAMW8Wiy|md3e4%=j&=I-{bTRu@=FqL^{9m!pQRf2TJ-MIXB6)ZlFX^!WQR1^|wPJ4YC7`{D(FL$z= zpOQ1*VHBPN)K{G9oRd%~d z`&}rXD-c@UD48~dmc+1s0JyZ|(9w#0~Vrb?EX@5ywL#_J%7hnWP0w$5H4l1+Gy z-fc|lU*L#TMOO)dPP{-{<3wxEU+x7~=q%LUVf?1okr3D^6%pMoY3{FI&Zxj_!V0d+ zgn#wfnL)M?t`mim2|m2O*y%3eLSVEyd_zx!x|229jEZC#{gQi0O^wd*4ycy cZ?@}_M?&UgLFK72yMHN~8d<^13_LFV2O+ca$^ZZW literal 1010 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=k^_7~T!Hj|8iQG`ybFNVD3%2I z1v4;DGkqL)RP;;f+W)SXb-1%ygZ3yby5((?d`9}^mYUgJcTRuZ2~^Bk;1OBOz`%C| zgc+x5^GP!>FmrgiIEGZrc{_(Uc(H*%+vK`su{ole!5Xdq{>N8(`n_AVMde9y=DTlm z1Jg~E&!@<*oE0n4>a;N6-^+q^_wuJl&YR!;c)tIcODn&! zeHUDQILG7Frk~|9bKiZcex7z9vhL90j(%mUNryE3KIp9G+L`w$>bP{z(sP0nue9Ei zHh9vN`rUYXyW_^{BTo}us(bc$zSmd3uT@xd@}EC5wBll z%l7EqHLTY=rnTQyd0OBBnP=9N|N`lGz* zRnqg+?aNQ|2k*MQHYRUxtlTm?YsJ>$${Bl`?-o^xoq3wL?3V6F{(~`cZdDiFEE706 z)w*NuuLNI}dZX_R6Yfm%_>?11kaG80m`jnbOYJ`O&5Dn5Ug@{K6BIWVOi#Cw`>};p)_fCsw1!l)Y2B)wSHN{(g z?RVSJ@$ou;SUTb1c*9!0Lj+2WLx;L@F>#@-=RCSz&s*$3g#^ z$A_Y|Vk^#SBwX%M3cqtfXH(|&K|hy=7tkT)OSVouH~-{V$6> z51Os~C>PI_T|Pl@MnTzoXI{>)WxrE}3wl;ktoa9T^Bmw2Fa~B622WQ%mvv4FO#mYy B11tal diff --git a/public/assets/app-logo/152.png b/public/assets/app-logo/152.png index 29928eb1cffa316ada2764e2ecb4587b17585031..821d05abc1ab38ae4082eec607e3da7df3579689 100755 GIT binary patch literal 5595 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 D8l5*R diff --git a/public/assets/app-logo/16.png b/public/assets/app-logo/16.png index 331d7bd55a66d0fc985759f8a132b02b2d3eb8a2..14d9584691426c54665d38bb9231199e73bd6526 100755 GIT binary patch literal 1869 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fA0|U#~ z%#etZ2wxwo(F>nHrfInVACh8k$?0 zS{T6ffF&`sgyfedXMntA2aHOngAif}!KxOG`5Hi|pJIt1|Ny{4$gCZ9qz4!f0NjJRt%L43ty|cV9(f0Y>@*Dz*Zr zmHeWR{QMj{=fu3SLh%xI1{p7Ye&zIk6A8@&1}|(XdXDDqIO=bVEua0yRz3+jCHTx z>bclyexhf;TV65u){nEAy{0INm&e}mj6L|^u85y%mTHDkpvK*5;q7@Qi7!4D`|Pdh z&p09`c(iVNdELU7k63$bURf(#IzKIgWm7$u@aB2H`(Dnpyc;AcvblO*`>$O~8e*?E z=l-{jPSQwAIxz6k@H7| z`eA>yj~_qpd3MAlWG0W`-f%hZZ+CU7cCB0d`&+1mUkD3VtCHLNy{>6*rmorWXhIK% z@%uk#k{=|p>3`W+vTgf`mSgIhe{9;IvfRh#f#&Qqo(m@4qZLhvX1JKz12GT!jp?t5%=a_;?!pbF2^)z4*}Q$iB}`67SC literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Q-Dv1E0F$A8Q_S&)CM#~tR%=U zn1Ojs@EiH6{l@<;PvW;px##>fM)`;+yTgi~Koy(?9+AZi417mGm~pB$pEOV~*3-o? zq+-t6erury1s)f34zC}NAN*av%0NMEO5W7(T`A439S*yD7Wz(YJo{ntBWZ?R1^oe2 zh0mYJ(s`cgB>bnjV)`?+FV8*pWC^OWMPFb2JNe6!e=>f-LJu-N{^qqf&8Gd)LuCfg OA_h-aKbLh*2~7Zwpo@M0 diff --git a/public/assets/app-logo/167.png b/public/assets/app-logo/167.png index d3a9d1411c75ac493a213ef115573dc0e1df6942..346ef77b7ff384757bf4ade10ffcbf5dbc29bece 100755 GIT binary patch literal 6012 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 bJmLO!eVR$}lrxsV9LeD6>gTe~DWM4f142Z~ diff --git a/public/assets/app-logo/180.png b/public/assets/app-logo/180.png index 26642eaeba7c8fe25af0b4ea72180a310b8ed1c3..9e107f062f2cd4ecfb774ee84fcfcbba87f10189 100755 GIT binary patch literal 6335 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 literal 1159 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 H;}rcL+cJ(A literal 1311 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE8Azrw%`pX1$pJngu0Z-fjlnEe-UUEw6ib5q zf*F`+yWB07+4?0$=WOqP?v}N|Z;oV}h+MJuR<2o;GWqdti{dR^K*gK|9+AZi417mG zm~pB$pELsli>arJV@SoEw{v^*UMujlI{F6h>e{d^^U{2iv%l@1vhMQTo*Jdd_$KGy zx-Htit6w$OD*Qf}#^NXdLLW~*xbrXEH1%f4|N1n!83{i(zWa7GPrdBuzG%6hJt{LC z_-hsAcYHlQ)5E|~ukHAYr3UifmP>kUSp8q-pE&b3of!{K`TcV!Kc?fz9;T^S?`Haq zTQEuNTh(O!omXX&g?v1g_kLM)chPF)*LSCWVVgZWzUn&bk6(zXVWfTTfFBr z(}QQ3_exK`dG_*Nt<#gz&2_WWHkHQ~?Tp;d-v2Omx=vo-%h>6+O$&wAlz%r;oINFP z+r8T9osp`=#Y*pYMVKGwzh6)|hSMm&|+M2CGqPqM+ z2W|!_Jr+`G*sOMW@qYV7JOKx8x-N45$$jDJv^VVhk9UUN6)(SgOzR|c752z?1k7V%d#cNDw)u;)B2&P$3vY}s zY_<<^;t-s|SRk_cna+doDHqllJKWZ=>GDfT5Lq0{A*Q96v7%)`pbCQokd-0c)aJz@ z1!RfHrX0|4+by6I;&dT^({Zr}g8`6rL63!Zs(=ZQrD1iVA+V=RF#@Q0p-_|CM1}+> zFOG-u``S_%?ust67SCtQ?wquBd&6RvlZT=mnlCZ^Ge2o@`cCt~e%}MSYEy1c;1Xzf zqxE`j^LBzxRs7@~&-WF(?Utct}q~d5>=;SEu~L(o=dmb$_plu9DulT`hoN z+uAPzQvcg|H-uc&w5bbmyVuuw-)<@wkL3;BV@LBvrZCq?@;<%s<89+MmcDo$^{p!( z{kaz)<>PwYCs*Xy;i#(Ps$RDbonQ9q=VXDkg-?E5yAj-R>rH=umY-egjkCe={be2A zP2aZ8=lxZzq8NDkVoaXjjW4F{vxT?ceJY>q6qKsy{P^*bymObTer!eKBdKF@9UHkn`Sp2 zYq!ysc$;SOc*e1vl4ULDgdgVRZRC~UDKwn8)!?wL5>dw!Ay@LHEDxd`9aP zdtQG!byoM^!v)vQ9{t`Laz&>42ixOkxAbj`c`&~C&?Y{Bv&&>PHnqD07 z&)O`Y?q1xl?^j>#jm|qi=d4BzbA8{m^IA3B^$miMY=1=miTq;4YmKIkac_X73WKMs KpUXO@geCx>^pF4m diff --git a/public/assets/app-logo/20.png b/public/assets/app-logo/20.png index 912c49321c4bb3408650c0d174cbd54d41b3e6b8..eacce3ad432700ba1bb2b9289ff3345d26c4aec2 100755 GIT binary patch literal 1995 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`kN5fEmas?8_Oz`*h~ zGbExU!q>+tIX_n~F(p4KRj(qq0H~UQ!KT6r$jnVGNmQuF&B-gas<2fDtFQvHLBjg# zc3cWjU{jQmW)z9|8>y;bpKhp88yV>WRp=I1 z=9MH?=;jqG15H9T$|bcpxhS)sBr`ux0c3PyQhsTPt-3l~6~sv?$#825N{e#9mZT)> zr{<*QrskCt>l^ABqPQ|8*{US7BqtTk;f^^aXd*e8AfH&}B<7{ts#oZyq^2d7=9H-0 z0o|3Eo~KZpm{+U-G^r?6L07@ZMjzzFoJ=G$z#^!|>SM7StPIJoWCnv{Nl8&=5%+@5yQh=0!WbBs zYCK&WLn`LX4LO}HTqy9bZ1cs8%PF5VwrB+%*&Xg^vn5eAtJR$z6!X_f-Pw&p3tXsCaJ+=8< zDfMsJ)DJ(W9o(dI%_B9946)uzkH0F^Xj#u$)f3B)ceblzpq=nL(pG&<}86Va$ka_-YjjI zv%Yoy{tJ6+yYFPh{?4*A_w7Cu{`B@Hu15?0e-f0rBYpU4qslS$xa8LSO3n37C)jr0 z(fP&q_Q+Q4<60diXM?}_-Oo93w`--{&znW z`fUDwiM3f9pO!s6;nl*bRLpho@zX6{wuJ_9zN;l%6CYeLeDL#0bk40EjvaHi1+Mz^ zYD@3qIk`ETN)w7sH6$G9zkT@ejDP=_pPzr@{QH&}V~Dxgb{_lp_tG!a+jeeTzFt5f z`dVnqnRz=O2P^BJcr7h+LwNE?HQIeGkz%NzR)j*R_|LHt2BYePaK_ WEc~&2I=d&Ry7hGRb6Mw<&;$UJBgXy! literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQa-T^)#u0Z-fl|b`MZg!w?k|jZY z!3@kxZJuT+AOF|t&%6Ih>8A}&ccQi43ieb8_cDVNaTa()7BevL9RXp+soH$fK*3Z` z7srr_IY%!X6lxFzw%oPGdE-`i%mbe{ZadN3FZ&8t&?rTm?v;g3t1)| z8Fs^Kn(1DdZ%pcsEv6PZS}XthZ+K3uq_$S#&4lxEN~T8D@hn@k{>LBPA={h&tKj}_ Z#_D4nwQeW=zXMvx;OXk;vd$@?2>`Sxn79A{ diff --git a/public/assets/app-logo/256.png b/public/assets/app-logo/256.png index 68607e55034cddfe8d185633984efa218f909c3d..d5a35f78e26d23924f6a913f1ae3241dc7877bfc 100755 GIT binary patch literal 8529 zcmd6NcRZZyx9_VHqecW#CTtN=#%R%7v@}E~k-^LmoiTcJLZSyr1Q7{|5+ZsxNDyrj zy|)l07$Py+a9-K_x6j`Dcklh?%0ARSR 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 literal 1771 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 a^@+Hb@=Voj?tfZAtqo6CKbLh*2~7aR{VmY| literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^vLMXC3?vhMr`rOlgaDrqS0MeLmY_yeW*5*7g_0n@ zUEaktG3V{1yL`U?H0_@Jz5eV+ZG#=R^}fe$wbfK9cp$FG zk}zTKvVChLreCk|V$zwv0jLwT=h_(S$)6ISzIF4l7jYIg}*p1r#9X8rw5E${lpYdU>KkT21J*YV@ffS!$Cd?PAxygG|9}; zC|TFQ!YozS#K7E0*V53$L^sVK$ui9((bzCCITdaeL<@#VZb?9cOpQ#9%uIoL4b3f0 zEezm#z>*kRLh?(KGeF+514bp(K?pH~avaf&8eA{~P=l395nX_kuRyU3&aj~P1xf(p z*BB*!fnrvUr6n2pMRsn9Rhjt;ewoSnHXx-iVKlE%o)Ccr21+V~yRRa#03-bY6Z3T$#jN9rqt^o;NQ~?skqK$L5F! zfmiLl9R#~feUDCG|5if$`H@Ghn=AhP?B1UAPC6-hk>Y8iD~SS}T@6YOCl9@SE4v{| zd4qYa@+KoQ<-{zT_4~84+#bFRnlj~n!|l7>66q%ASI;stV%ntRC|39G#Ty~JYa0`D zjlQM7Kk{Z~=bm-dvi80LmZdt<)t6#V*w=}Lue;v)W5R=uZO+0U7iK!MpP0aM;(Y8~ z+k)@k6e~~KgzZVXSrexmf7*$0=4=;X^{XtBN?}2B+O13bXL`JCW{Xfhl-R$8S5m%N zNa5SsT-g~@O=K-+-k$g>>g4A(&(1kFgN#z|ah>m$sAOMmoOK|Hk#oYQ zcXH-@UBdFGZk{dPGSP4456y4lN3#XFoRp@%iaP2a=V;hBe^|!Exz)XU@bv!Lw*SVAvh|x?jf54>KGO2I)Ndfun=qwjKc{(s+yZfp!Y^OHex9&u zhWYL`9X7Z12UK$G=J@M|RoYj5T07rx+x|#jmK7ZqvVn6p zs~`1$;N`(!-!<{vRwaprG5(Sl0_N3!lF^$Io1Ams>H{~UP>`GLy@$%_0g<)hzc-Z~ zP?ZvNomgQU86bB^zr<#-mc8R&Sema)EzFGe`Tj!1l_PBjnho;5ujF`EHf!(Dt zZdV51`pKC)**`q1+{CA8?icfY!$j#xvu?RBTGwKDZG)6hn37q*-)*;ZSM0stQ2o{a zL6mybrZsatW=%9$Fry{fJn~?7`1^_Vk96kWv0$lXe>II+P3i3IhZZtrX1T6cb7S^L z_UC45o;c%ic*;rP%D;z?pV!dQO13XA-Mv#&HJtUbEc;Z>-UFSzg$5ZHXL9Y+bSwV# z<)`$PE!#FGJ)WD88nN;QgPgqh;hjyh{3dzKp8EX6l~)G;=d^@y+uWO{Z*}V22|L*{`R6Je%T-G@yGywp={7Ciy literal 401 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy;Q>A&u0Z-f4M3k8-wUA8vL!)& z!3@l^@43lko%_E=yDt6<_tw`-T7`C-Uh`Ib+LaRE@nusAP$6f5M`SSr1K$x4W}K?c zCk+(b?&;zfQZeW4zeNPM?kYx z;&oC~Z*1{Sfu)De{eAVOtlx(F>nHrfInVACh8k$?0 zS{T6ffF&`sgyfedXMntA2aHOngAif}!KxOG`5Hi|pJIt1|Ny{4$gCZ9qz4!f0NjJRt%L43ty|cV9(f0Y>@*Dz*Zr zmHeWR{QMj{=fu3SLFo2) zojtZnwN=9Y+sE7Uq^+MB{*(FrvwY9?kK8hrQQA5Fjh8c@-|SIyQ)Zfyuy!rukNj;) z)mJ#yM7%k?B)$0OzAYDWu8DUpd&$7Eul~DQNT~eLU%F3M*cM8iGqHa2?MjE^Z)ZZbKY=EUbOn*?^BK@y<$^;@m&2`*TE+bE`O@M5wl6SG+qCI zZqD*ZUbd?@7&Wg+&7NhL@ql5^&ts=&*e`ELZx9Iy)e!SG_tEey_?dI@jAun+mYm(4 zjncQh_8+@iKkLEQ9fyuBQ&c!R;r}z;yppq;;@J7`AM@^F)U?V z7h@y5{@jd?(%1IRkw?otif{0~<>T~F-hc1S@#xiQ$uAFuS2fJM`6cG_Ypd*6CY9(+#U4r9Ne?Z~9Z?V4aBqQHo_D{$@ihHU3x7Q@ zobzWfA7A_0>30)O81`tU^qw&0^& z-qUi-RzI|LKHwtvqgFE}{MhZDkMAai+>QVF;O>S04If|0vAt10nsFmVF_P>0RK)~` zCk-cq6cX-)>pOTkN7y*HYNxI(PP*wdof(YxyMNwMysLit zozAR(%$Ij*In^pW6=mPB@rQSy`TS<>yPZ52%VJ!GJ#QHqT<+!;U!QR9P zPEVfOvUd3|-W1#>y%o2)py%`i=X0LHQE!+ zAA0KDnSY}0%eLpKOWhqpcF0@R$ar-r-TC0qEuf?2pt;J||g&=)YSf3 z(yb@y2HP{Z+W4zG=357UH~;@NFtT(;`l-jB&zG1;ZJ5EZ+i^D+`*!W#w|}y(JHEMD z&BC9O`sw}jSJDCkrM=NPvMJS<{@YBNBwM|=>SJvE(uu}}e5``mTdG1$_c_}t-sEYV xuqL*3+CEA5{B#Xfle@d5Td r}N5ms_^?Q{x>b_8L&j%hT1*Wt~$(69693STUU+`E zB^q6A;TD!NnMbZ-UT6L$^*Kipn;9pad?U-sn=j@kGTEY@?PJjo`(M8n3;%j??U0D7 zt2g&g56{&47`CS^by~f*?WN56>!zigGiF(L;by3KX}yryB9^3iGuKVyG)ZBJ-klXHwJ-7hSz+a0N^=yLRQ!P+W$<+Mb6Mw<&;$Tp C<>TW3 diff --git a/public/assets/app-logo/48.png b/public/assets/app-logo/48.png index 8bc64136882b66a33cf6a9022e6bda48eccaaf9e..3ef002bb658adb68bbcc992f83734d6f353a1f04 100755 GIT binary patch literal 2747 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%0D>ycW5KpLZ?8|xVlrBcR4 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 ORFyRDmEE-r|33hEd!rTr literal 3884 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 diff --git a/public/assets/app-logo/57.png b/public/assets/app-logo/57.png index 392c625011ca103d15c6f97f0542c70f3ae5c2ad..eff9ed009c131f584fe1b2294319884ea3c6aa26 100755 GIT binary patch literal 2984 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 diff --git a/public/assets/app-logo/58.png b/public/assets/app-logo/58.png index 446ac223370496ec6900c31db340aec61b31478f..4e6085c514b80d4ed77fc09bf66d38cd4d9df52b 100755 GIT binary patch literal 2986 zcmb_ec|4T+8lQwLB~r4ajBSuHiy@|=Ft#LX8B6lc%saL*GiG5ZsgWol%2IS_Y}2un zQzTnQg-(`KPLeidYe9?LB+i{tInllMk9+TYKJUEm`#j(0`+J_}`}}^N_lWBb`xP>( zG7t!4g`)%BU3kZeE-6Xje}COJJ>gB7;o!}JK;&+St|b{8<M$HAU2zUMIa(0BaI@Bjp)ok1j^jp9Dzh5&}g_20cSz!V`&MQ7E<9s7Ks_m zUnwq0YaHN?j2*)5dq2cBz3L#VIu0)2%xtQChHL}yys0nx#9jUB-xI!*-rZeCQ{|2~Mq17pDy&gaJk z7(dOQ5R9Fh6*|+CPN!Ph0JI1|L(d(gkwGTN)W;zfBmPsq-%p}N7~z@p!z?4_&os-y z6Ct}G5J_K0yp<<6chpCg>S?>$g8p=D^6KME)6BxHuKR-z6|3?EP(JS*Pfy0yY0C4Q zM$q72M^3A**?#cWhNDYv@LUb^j!G6D*SrZsiEAH%h{-f}tulc3g0iDytg-q|V(D1p z=>DL~d((A0a(Yjhv&J7qKD8)td6ij_uf8=kf+v3`z$P*10yH1b!K!OJ&g=mypY$`t zsbdG^GeDJyI(4PjVHnJVDdRZ*)Wk$&V9wQkFaB?3q+K3wdpdmZ_V)a7E&Y*`Um*0- z8lQNN5=8!Fro_+#WlGo)g~`158Eem)Am?%kz;0;^MXqJwa)MS-V2|!hXYP!8ThG3v z=V4$C>+&xODU&%)(-jeC}5!kry z1VeaR`iIC%DtJqH6|9<;oe;BZf79@>xBaA&PgBW9mk*C^kExIM!b>#O*4DjQ=W}Os zky`OEMU(X4_gHzixI3{26BQGeU-`_Ul15VfqMGhHo5c)?5wkhhuP6H}(ok*<{&q1j zOSQPNyRkY@dZ+JAm4C=AmyCH~e(^6v(@=hg=J7!eRz>B!+>HxalKG4oIYZxuHCY=C zrlyK2ZM!GA4ZqB8#otx?vuZ@1e(lYC^$I%aRfg%R*N<_HL!~J7dCleeO7^4pyS`n@1I2jVPU^K* zR;$+D?tlSAZz5c0Z+MpN2!R5)+ziqDm14XqB*f5RL-)!J?d^82u0M{-K}egP@d&Z5 zaT-n`R0c^hTN;nKyzc>Adfl?OyOouQ!R@^YY;_3brtNKemyJ6sH|1fvqC)(RZGlR8 z1h9~H=Njq?3WF>&%M4oV^OQ6V48-vF)gP@YV%ePP*gjN@cdtqEpA>aP${Fg^p0^nl zccxd>(63thU3ew!omESJ96TNgcDu~bm+zoMY& z+53+#(gkH6Ck`CEjca)V0-cG`SFO~XLywT9B^n}Sd&cqHec4W>wGq1=o%^sb*x4!` zZ*{pF^9A`K-^d4XX?;QU9-u3GO?3=k^>O*A;-87%_W~aCKweXo8Z?dXbCwY(oKCDB za+34u89FWCE45V2ddJ_FSyd`{)t^%7#E(c=nx@e2XOK^<^2y!ReQ;b$;9!>_x2kyZ zVpaIdYstvLbiK5r0r=Z95h@aGSDVW83wBN&hnQ5I5EtFQ*sttOnn|qbpJpDWy zd*RIMEbUos-5b!&p;ECsOw{~O$-16BCPVamzuKhKWX~vm_PJ)GDct(EA%RnK}3;ScN8?)RBie3a^Slg0R+ zbSV?~NWlY|vvl0Dc`QLu*)7yz#Jb-(yzd@Lg(|YiZ4|IGbHL4X5jVCB(tr zngQ~P+HB-?N~z70FD4HN^=clv4V||Ua96!PYq@UA>bSfpR7)*?_a|aA#jnQmAi)EZ zcLGatY5E^*!fQ9Lya)y(wS|sW;d61ygLzi zrKD>eW|vcy8_!E$V-)L5!>ArtR%k)&sZX1MN>0R{Y?E;L=rlOfEd`%RLat3&choq2 zcHe~8{;acKo`vuKLkrdP#>8q#-asu6=_p=EQ^)NSOGwEb$ke&U){onYh%R#5l%{$_ zG4i2CbWEC#_sU6sjCt$Cnti9clR}LPebYC(A9`|eT+a?HB)NBnas{F254ZOMQ_qV^ zae_N4u;c`>6<2Dv7!jrhU)wtD)x=i#)T#ScXF$tcR#s%l8|}GrSh1wDpOPH^)FsGK z`=j{&ne8mQkxztf<4w35odM=fW}j|ETih-kbV}{IV81HnYRMUZ#o=dGeQ4C?`kIn_M3^mrX6i};47>Hc>e_dzLvHC literal 520 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 diff --git a/public/assets/app-logo/64.png b/public/assets/app-logo/64.png index 149b87cb047bf762e59d49f989902dfa4de3da18..d465501de0505a44c06349e1243e2ecd07bf9537 100755 GIT binary patch literal 3125 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 F{R?sMjfwyO literal 663 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&3?x5zE|dgP2?0JKu0Z-fEkTW{%r2lE3MD~) z!3@k3TpkPWsr|1Tdw$Co9_1x%!P!@&UzzwEnVoXG%W}nOKA%FMTFwHG$YKTtz9S&a zI8~cZnt_3Fqo<2wNX4ADGiv*r40w)3OI{LY^NR~H+4=szZvJe2@tX~6V~WZrKId=d zsn7mB;RavW-%Le^%Anup&#t=~Um(b}@C-|2X>In+8j+ZH8rq>ng>0p#Ub-$ydzw}E zDR9E#XCnQV`?uRxZnZu3Fz4>l`AhSUTRgmScj_U7IgYB9XFXz=iey*so}E4U%tN2M z<{~SSE^+Q{N-q7Lb%?XJT3y4-Nc*oz%Qv5kLY@6>9|R{qR5n@E?CtDf{pe&bZ{qos zK;sfe^^>Wdw=6gG+|ZJ_@h97U)$0d;9Zq!W&g9dLV9KsH+GO6i^n+ODw$+Tt0(MZHu>4KC$GGus_t#B{>sTi^IRnBpAGw(n>Vcris*^@dj1Qm?z{9v U!^x$kz!+ulboFyt=akR{0EX>VYXATM diff --git a/public/assets/app-logo/80.png b/public/assets/app-logo/80.png index 5074e08f707c2c69a8b46ae549ee56beb8f4b317..8b8fb5b27e03793c875365457093c791c416187b 100755 GIT binary patch literal 3626 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 K;T`=m7ybn(S>oCN literal 643 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r53?z4+XPOVB5(0ceT!Hj|T7nu?nO#6T6iR~p zf*F{5@9D*U-70#d*!4fx;wM&fYI810?|kibR%LDSv_`{MPim(D)p8biL>4nJ@ErkR z#;MwT(hLlYb3I)gLn`LHo$S(Lb#t>Lly$e1oN$XhC%^c{ z$=_#epm0;FL=3bv7cu2q@bQP+%;-e71~D)>=yV1 zR_iXE<2rxg#K!gWmYiC2*mBm?mn-HL9Z_AC(t2r1YhSUIQMd4}2UE@kiCL+q&0JD5 ztK@~>wmE&a+_F>8t?9qL`GV!V^d6p1YqGLB3>r9j*p?JrS+B(DDe>BgL*vk`0>>QAeFrPlzwJNdmLO6UFKC_j zK{NTy)7@vL+ATU}wSIm|NvwwAa$9ce#-({-Q}_J-SGe-c)6bVSx)i^$?bu&1y?92~ zui4GQPMN;$X$R;2mN+xbZ^N#`TW0t@zREn?|9N+{+3GVdm(bP0l+XkK-f&5S diff --git a/public/assets/app-logo/87.png b/public/assets/app-logo/87.png index 2abef2ebedab8038c2fde8dc485b857e3e200a0a..59460c33cb970226e1bb035a3994f7eae1cc2490 100755 GIT binary patch literal 3746 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 RwDrG8OEYWJLKCmE{|3e^9=-qo literal 724 zcmeAS@N?(olHy`uVBq!ia0vp^;ULVx3?$veG~<9&a)3{WE0F$AV=&8=cLC5E#gZVu zUpkmGfkH}&M2EHR8 z%s5q>Pnv;&@s+2GV@SoEw==r)nhkhdh2>PQ?1>Wa5B>8${#@dQmEH|3m)A}%S`wza zWcf6Gk0WOuZfJSDnzQ{J_urqlHN!+~-F__L_*wEmQ&jwv^`Ece&@Yx@a zz1g+C&q+EauV(n-yoz~>D zhH;xX&6TLG-ot6U)9uVnhb>$uLiFz?KPh6=>zc7y?!_ao$4g^*gczHTNi)y&do1hs z!ui{xD&yR}AxHGDzy9_5S9Mzb!~0*i7ypg@y6^MX+dKdLbKF~Eb^U&4_}7D%D^?5d zS$k~u{11O_zmQwgpL1uPVYJg%7)%(?VvOWbXx z#}C5}Y@Fq~XXEE%ym@bBwYHt!zFfK}pkTY6Wmeg8!%ti6n|L3e%{Zn!J*2VlY-)y$ z<)PF)rWa22JU){4u3dXM!}ljM-_DtIo-t1>TVVRVJIk|GA76ZQtnX~dbcV0JwE}8e zy&JO5mKA26@!84z(SH+nrN}?g1r1MiKb^dGREK$vzopr02@<+KmY&$ diff --git a/public/assets/app-logo/96.png b/public/assets/app-logo/96.png index dcc4f37fd5d8f54250b7b24f06528509573e1a86..bbc2d5155c44f5f35eea07eae5c0268a3cf43bdc 100755 GIT binary patch literal 3998 zcmb_fdpwhi|KBuoDV1DOPBr8jW?~t0-y*rrl1j17WSVVkW)ha1$Z|^;M3HM8a;sb; zS~$5?L?vWy$t{r-&Ufo{`c~(6zJL6_-@RVXp6B^|-kxLcd*e;f)!AP`U;U8t_E79XKS527$|EG-IMiO=*S6^ckF_>*W1 z5|siGP~-5_0EV%u>NnJ%A$bzMxuFI4lfO9eBtVH|qA!ucphIEWupgrIBp5PC3^MVj zz|F~wpCn|GAQM9}j&j^sm8IoL^uh&@8LB4yxJbt-5IT-Rhwz#Fi4ZM_E)psTkxcrI z6T>qbCFlR9QN%(K2pwP8(UnBv7`f2l93&nW~ilOsEG5)kNH20)` z7q}o3XQJOv5`H-Z3L4IzPQ(V$h{mcIBApuGPau9j178U({fRgR(bGg%M^{fv2d<^7 zkA(iD`qoC|R|T5I*ym{i*VV_v5xN8|9RoN~OHXHyt`-8Or>EtmgGYGj;daAt1mZWY zKTZC|v=`4O(%043h3oTeVS5nz20Gttz9|1@f~5u!yaj2Q@LTycpnuE$4gZHW|5&cS z2!1T<|ESTl@183`m%lu)g8uRq{QmC#p}%~Yp?Ltqo9b_}7k83Gh1in_RHOj(H=+B7%6z^Y~ z=qC(+Cw(`|&~H1+RM6?p~Sc`Jlsy3)Dyh%tw zp`~^HmC^egIwniCtTuT#Bog5{`bW$1Oz6z3&$VHrp%E+TBOOznj%Rhe)qYhmgXsaI zGsGO%*|G87LeiE}>2fImZYN0X?4K%0e~?@ZSZ>|kcYw+EYS+2r)otLb#^n^>U)KTm zW-5&b{yuZV4LPaUi2~pEk}~C-NpO;klHD*=uhJ|k3^E4#KOCq!04@-naCRs+YdZd7 zu*IbK@a3H3p)~dw21^kP_#kgkC-FW;BkJ~R;T#!3IEg0$DLVaYoO69t zMDdJR4X98kD0X?zt(Z5Q`zzJ-!-qe-gD-zRDYj{dP?`7C1|yLT>a@*{aKvDu^YX0E z%O{635-8ir&ywPtH>z(7ac{5N;a0FWYg@`v-8DE^DRSQ8*^O@3yXp>VH^twb)Kudf zlF?961{v(k24-74--towC#@DpdcW_=T<*JCUwx*(F)d1Dhxd7OGWGQp#lp6s!KTX&b!It^woAEdBk<9iqSX~WP#@C(F7Qk1iSNBRULU7^J1w_+ zSy|;l$>h{B9b$ev(#%{1kK@>?B)oUii*q$M#R;naJ&wcK&c7=Hu*!BYq2qOPpcJ%Q;D>?Acg2 z*W&pDloft?{GPRge6*LH{G6Y=jH`P?t>aUW!WJan+M)GGIrs#8`azlzF={apKc^17 z*tnm%mZ&5*{<50m2ycA+sm1D}s}8t-o4(A`HFom2`+Y6HCFMC%2mII|sjaSfSIv*& zCJOa~HLA3ghjxsKUfHso7D(Yk zaY`S^xX(}^25RU8KQwUJ14=t3%CZaEP*U=EmMO_X1KOrf zC{DFn?`XMyE5B&8XToOol{xQ53!0F1WGi}eo#p7~g7}MaV+ZVJlK?4O$}?AR)h++Kvjja-s-}+zBKN3+cxe*|i|yl< znfkOL;`=MKbFZbuPvrV#qL9z#6n;T4!Ls`q5HZ@MXky~fQYA0ceno+8<{kz+XBMw` zLvixW@_QTM?%YFvn9}T-)J25(y97^fB~dtjLB5{|{DuVnm_N zNKfaLqTcAc$H!=|7ldotH#5h$PU)&S9gVRyjeYvhr{6R!RZPZjxcvfRGbI8=*MYwp$8evajJhrX)Fy|ZL#_c7H`p}}}|9&)Sl zH{pU}+#`w;FW>c@>L7P>?E}@t@Ui6Ch z$P=Az_u5}!%lH3ek;izIU;h9@r`YhC*P8`rvy2^-}I@vhPx@PX|<)swZ zcAURH!cVVMSEp_wDHmXDpLAH*M+96SEf! zW;Ew!s(2P(QB9r?cssZ5`etwLFl4n(KL2QN9B%q^r2%7pU9f|Z5Or--owpg&PS16# zEjBCJF4aC2$+>qXcZf^rc2CZs$O$%S1C9Wb`)2?&Us@FHF_3uHb$F_)N zm7FlUTR3@NNjgGVCFRQM7=AGLLs~uC1X_$gnH99#q@xGbg@yl$zETPI?W>BUn~Vfi z9$q7%yeN@nnv1pF)idQ`mG9Jek}&u7Oa)u&R7O(YB?-iP?dC&~G6i=shex$s;E$ao zwO^+T*--l`q@BYpVNSrEwZ?vKVINXBv}w4plkN2HXKm4!H3!1EJ17mNQ1^xE(wh?D zL+#1c_$qa;(egu_gleY96IF@(gFs`S>?9uzdEHmR&|t0A(4u&WC7}$m&zW=x8$zea z?aBeUReap`(6-eB+CfT;EZcn!H0HBr#ji`$=v8icBk9Z=$aqI^Y_ajX1YQ)k7noCjGqvo9FC{)VoSu@NQ=rW?7~d4rBA wdWyymZm_o4^>7j0Ea}*j{?G4dUsutx$TBmnsi}S>L+}N?4{eVsvhWE17m|dBZvX%Q literal 737 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy#L1AIbUf%Jcxfk3U_Pk|Q5mjw9* zGcZpwd7iRgF7$uv71yOax!N_JHm7g(MhUG^dHeB5(FwWhKY>a)3p^r=85sDEfH31! zZ9ZuR2FCxME{-7;bKcH;-PdFw&>9^P&bFvXaKh~O|7S!StWj`Y|Crx*{}C6?nUB91 zsMw~;o&SDd=Z}_liw=Ip`aet7p1+~%{lIb3-DTP>Pc0vR=bQIMQavYWjmXpu%hs&C zmboT~XG5xnhRQLnTxJX3S2~7O(Fg4sXWy32kAK0qYxmyUE4D}H+`ad;th@L2a*GdhSdd zpV0=f7G|@@-N8!dwbFGjTufqOUFh)fBa@}tg#FP6$~P=YxW~*|$M=S154#tm{YkIJ z{#OU87aZ~5G`HcqgXV{Cp381KGPcY(@UwkQUHe;O%j||Ow)-s4*ckif$OsEu{~}~! zdib8(oKw$4#0A2$7ep+Ln$&jX-P4B(XN$XzZ0uB-a%KLv-{sRi(!1CsCu`Xp%G#}0 za>)0vN7+eF<9TzPQxB{8Fr}T1sOgN$*fnX!oojCnsXYmo_0?Iqrcd+PVbN6KV;6sW zIaRhiC<`$G24L&T?JHRJFWCIHqG9s{hxFaszlr5OD&1DCo?qB`^6kI diff --git a/public/assets/cryptocurrency-icons/usde.svg b/public/assets/cryptocurrency-icons/usde.svg new file mode 100644 index 00000000..91c363de --- /dev/null +++ b/public/assets/cryptocurrency-icons/usde.svg @@ -0,0 +1 @@ + diff --git a/public/assets/cryptocurrency-icons/weeth.svg b/public/assets/cryptocurrency-icons/weeth.svg new file mode 100644 index 00000000..048936db --- /dev/null +++ b/public/assets/cryptocurrency-icons/weeth.svg @@ -0,0 +1 @@ + diff --git a/public/assets/icons/bank.svg b/public/assets/icons/bank.svg index f8e80613..600615c2 100644 --- a/public/assets/icons/bank.svg +++ b/public/assets/icons/bank.svg @@ -1,3 +1,9 @@ - - - + + + + + + + + \ No newline at end of file diff --git a/public/assets/icons/history-icon.svg b/public/assets/icons/history-icon.svg new file mode 100644 index 00000000..bca36ee4 --- /dev/null +++ b/public/assets/icons/history-icon.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico old mode 100755 new mode 100644 index 502529f44c3ce1691b82f7e85b8d7aaf929f203e..24b69f1de273c17dfaa5597f2c12a1ac9b50870d GIT binary patch literal 7406 zcmeHLdr(wW82>G>EW5mRS73Q9yDaZF$jeob_fuXfqKhO5iXft3;Ts)vv@#PzGMlk+ z)O?iXAC{I*rIU|r(tJ;2T1|~sng)R&57ExK%iU#R*>EbG$^B-|{m%K$@B7ZZ-?@AD z{62sKQ-p?sXbbGK0ipoN<^5v|;Co^d3f1EZF0f7l_!10pK?!Npj}g9FF;|YdfA`m4 zFfA$oJ>A{N@^QtDtC#WKwk>E{QHOL72{K44921OV?fB;WIWo5w+g@zIyqsigU9$qqiVM(s z?=JQQs4{8tIRP zQzoF}emkyTxr9!l(-aOUO^il5(YJ5i#2wPMz0`o!6(yJy;(?X3rW2nmGaKMGrC-AVh7YBE~ zMeuGU|DT~EBM!|g7n6N(8nCg(t}z26&w$b>Gy@hEPml)-ajl(Qt$3s^;({s8d3mEU z3&bN?BYaLwS+t5sbXm-t@W1j%R2EInp=c^OfknzhLmrihNfM~B>MJBkiIu~7@Wg&; z+3o}3DwTV-3t!CB=ix2NvJ}qNMbpu2p&&~%)PXlMJt%T0npz^~M$H_&1aCTbjD9q= zMo(1?a;TJ64G&kTp7TuBxg{RQ%n)3qijUPD-w}0KoonLg31gX5CHRlG9h5~Kpk^Sh4lN7{ig2se*;384 zo{m^qUalN5T2Fvy*EI5zk`eiDWPtKiIcf2vX?Us`8L-mNQ+GDLjQr8w8lKwOabLqv z*HxDjp4q11p|38Q&v4Q0udKy_N$Ct1y>{_Das%Z!b@VXdnsS^b`pQ>lkmK)$lOKP` z@X=nvKeK#Y2}jIDch>`kPwv{Z9;)a-Y~Qe!;gy@~7cqRYacM2XBhQ^Ujx}>j(bLt% zaLIyjU&1*%apuz_*tB#ZJ~{9%!y7l$RUtAk z6Dc>OJh0{NZ@75o6uv%roIG=vh6^q(nv5l+{eI^*)>Y4DIAPa=P9q0o-xs6)UuMAL zsS20R=MKLhS1NOHkx7R^aQXfUzkmQgg}>ey{4kz=^FK{u{dn zIywsmBDm=`!8)unD%d7ndmG$QZZWJct79P20HmHytXZo~MoZZxOvh-=+MXnVop%_o zwQ76b4$sPbf<*h&+TOT$_W7ljaauFm^9|K(p?S1?$Z;{*I?|l=_uzU&SlP0URNGob z5aR$5BqZ6Tv4}KrVuB_(3lfNYV#iX1d#sOW$Sgr|`J5o3nVB$%qxb!!2!U5fh?hWT zVK%&4a|MQGb+P}<=)eA`(Q^tZu`_2C%{it2Y{J}If1lQzY0aG0Wog})*0*VGnbwtQ zotvH?Xf2u6%yax@OpTkK7w-Ig3#oEDrtbaP@)uAN7l|gKf4cE4Q%|Nf=~bkzOzXq- zWz(7ZF|BvgI`iiGI#g!HGv|`#RZEz71=)dSilDx08S*H z(9*(Ly`HnwlB_4=a2>52OidlE9GUwe7ITHWm6f}~e83a9xD0q6tz9PjyV?E|%V~E& literal 15406 zcmeI3YlszP7{}lBwu#qRHO#QhaCea~QEWp|6Agt54TM|@-9EGmW+7BqD3Yk8Qh1^K zpp=Lb2x=b$EkAe(ycD59vKAy>2+7ngTB~jA_WQd#n8}biJwTIUE3eN}5Po}CpnzDv~ea%zXvNmA-_W-;Fid$UymH|`l zYfFBHo9C42d>6>lKWE z@+72aO+BQYCqZRS;qxkoM_@Eefm#>=iNCYwG?rom{&ffCBtC@i;UAD_P5A|sD}EWs zfOjpyr~aVa!ex-Zx#TYzz5=E6J6-TY&p$oWE^{;Mxa+YbFEREK=z6y-=KIp=zdD& z^FYr?SOLnh7IP1X`g?MVzsl9l1m4so6UHj1uRZ0DpnaZ8QJk)U_RX>Oc=YcFQ{e=3 z1^E>xwAUO8p?f#lABHV(6S|t5#Gx0U!#PELFE|LrygyN&STv`!K2EUj2jQJB8PC)UmrNv`<2_J;yivfg1=UCuIKz6C>7CK z>fZyLXa2kWSE-2djD8-4^IEu4D$e8QM_%l8q+AZlDVKsY;pE7m|LxZ>iu$hp z8OZmgw(nk|4pDVHb3@bCP0$zo~;3_|)xvTeq>p<_2{XAQkuesVZ9v*@P zQ0)6#zVC!5p;s=SlGdYhFnkQUjuuEu{zlO;i1hy+N&VM2Z0KFyB-jc!pb*h}Df#^x zMEVU - - - \ No newline at end of file + + + + + + diff --git a/src/components/ATOMLiquidStakingstrategy.tsx b/src/components/ATOMLiquidStakingstrategy.tsx index 0c62e742..ad4d0ad7 100644 --- a/src/components/ATOMLiquidStakingstrategy.tsx +++ b/src/components/ATOMLiquidStakingstrategy.tsx @@ -40,7 +40,7 @@ export interface IStrategyModalProps { } export function ATOMLiquidStakingstrategyCard() { - const { web3Provider, switchNetwork, connectWallet, disconnectWallet, currentNetwork } = Store.useState(getWeb3State); + const { switchNetwork, connectWallet, disconnectWallet, currentNetwork } = Store.useState(getWeb3State); const [baseAPRst, setBaseAPRst] = useState(-1); const { display: displayLoader, hide: hideLoader } = useLoader(); const toastContext = useIonToast(); diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index 5c78a065..dbc7008a 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -1,39 +1,27 @@ import { IonApp, - IonButton, IonRouterOutlet, setupIonicReact, IonText, - IonChip, IonContent, IonGrid, IonRow, IonCol, IonPage, - useIonModal, - IonIcon, useIonAlert, - IonImg, IonSkeletonText, - IonFab, - IonFabButton, IonList, IonItem, IonAvatar, IonProgressBar, IonModal, - IonHeader, - IonToolbar, - IonTitle, - IonButtons, useIonToast, } from "@ionic/react"; import { StatusBar, Style } from "@capacitor/status-bar"; import { IonReactRouter } from "@ionic/react-router"; -import { Redirect, Route, useHistory } from "react-router-dom"; -import { useEffect, useRef, useState, lazy, Suspense } from "react"; -import { Welcome } from "./Welcome"; +import { Redirect } from "react-router-dom"; +import { useEffect, useRef, useState, Suspense } from "react"; import { Header } from "./Header"; import { NotFoundPage } from "@/containers/NotFoundPage"; import PwaInstall from "./PwaInstall"; @@ -41,10 +29,22 @@ import { initializeWeb3 } from "@/store/effects/web3.effects"; import Store from "@/store"; import { getErrorState, getWeb3State } from "@/store/selectors"; import { IonRoute } from "@ionic/react"; -import { isPlatform } from "@ionic/core"; -import { close } from "ionicons/icons"; import { setErrorState } from "@/store/actions"; import { initializeAppSettings } from "@/store/effects/app-settings.effect"; +import { LoaderProvider } from "@/context/LoaderContext"; +import { + AuthWithLinkContainer, + BuyWithFiatContainer, + DefiContainer, + EarnContainer, + LeaderboardContainer, + MagicMigrationContainer, + SwapContainer, + WalletDesktopContainer, + WalletMobileContainer, + WelcomeMobileContainer, +} from "@/containers"; +import { isMobilePWADevice } from "@/utils/isMobile"; setupIonicReact({ mode: "ios" }); @@ -61,71 +61,58 @@ window } catch {} }); -const LeaderboardContainer = lazy(() => import("@/containers/desktop/LeaderboardContainer")); -const WalletDesktopContainer = lazy(() => import("@/containers/desktop/WalletDesktopContainer")); -const SwapContainer = lazy(() => import("@/containers/desktop/SwapContainer")); -const DefiContainer = lazy(() => import("@/containers/desktop/DefiContainer")); -const EarnContainer = lazy(() => import("@/containers/desktop/EarnContainer")); -const AvailablePlatformsContainer = lazy(() => import("@/containers/desktop/AvailablePlatformsContainer")); -const AboutContainer = lazy(() => import("@/containers/desktop/AboutContainer")); -const BuyWithFiatContainer = lazy(() => import("@/containers/BuyWithFiat")); -const WalletMobileContainer = lazy( - () => import("@/containers/mobile/WalletMobileContainer") -); -const WelcomeMobileContainer = lazy( - () => import("@/containers/mobile/WelcomeMobileContainer") -); - const DefaultProgressBar = () => { - return () + return ( + + ); }; const DefaultLoadingPage = () => { return ( - - - - - ) -} + + + + + ); +}; -const isMobilePWADevice = - localStorage.getItem('hexa-lite_is-pwa') || - Boolean(isPlatform("pwa")) || - Boolean(isPlatform("electron")) || - Boolean(isPlatform("mobile")) && !Boolean(isPlatform("mobileweb")); const setPreferScheme = () => { const prefersLightScheme = window.matchMedia("(prefers-color-scheme: light)"); if (prefersLightScheme.matches) { - document.querySelector('body')?.classList.remove('dark'); - if (typeof window !== 'undefined' && window.localStorage) { - localStorage.setItem('hexa-lite_is-lightmode', 'true'); + document.querySelector("body")?.classList.remove("dark"); + if (typeof window !== "undefined" && window.localStorage) { + localStorage.setItem("hexa-lite_is-lightmode", "true"); } } else { - localStorage.setItem('hexa-lite_is-lightmode', 'false'); + localStorage.setItem("hexa-lite_is-lightmode", "false"); } -} +}; const AppShell = () => { - // get params from url `s=` - const { pathname = "/swap" } = window.location; - let segment = pathname.split("/")[1] || "swap"; // urlParams.get("s") || "swap"; - const { walletAddress, isMagicWallet } = Store.useState(getWeb3State); + const { pathname = "/wallet" } = window.location; + let segment = pathname.split("/")[1] || "wallet"; // urlParams.get("s") || "swap"; + const { walletAddress } = Store.useState(getWeb3State); const error = Store.useState(getErrorState); const [presentFiatWarning, dismissFiatWarning] = useIonAlert(); const [isBuyWithFiatModalOpen, setIsBuyWithFiatModalOpen] = useState(false); + const [isMagicMigrationModalOpen, setIsMagicMigrationModalOpen] = + useState(false); + const [ + isMigrationMadalAlreadyDisplayed, + setIsMigrationMadalAlreadyDisplayed, + ] = useState( + Boolean(localStorage.getItem("hexa-lite__migration-modal-displayed")) + ); const [presentToast, dismissToast] = useIonToast(); - if(error) { + if (error) { presentToast({ - message: `[ERROR] ${ - error?.message || error - }`, + message: `[ERROR] ${error?.message || error}`, color: "danger", duration: 1000 * 30, buttons: [ @@ -138,13 +125,15 @@ const AppShell = () => { }, ], onDidDismiss: () => setErrorState(undefined), - }) + }); } - const isNotFound = - segment && ["wallet", "swap", "fiat", "defi", "earn"].indexOf(segment) === -1; // use state to handle segment change - const [currentSegment, setSegment] = useState(segment); + const [currentSegment, setSegment] = useState( + segment.includes("index") ? "wallet" : segment + ); + const isNotFound = + ["wallet", "swap", "fiat", "defi", "earn"].indexOf(currentSegment) === -1; const handleSegmentChange = async (e: any) => { if (e.detail.value === "fiat") { if (walletAddress && walletAddress !== "") { @@ -152,8 +141,7 @@ const AppShell = () => { } else { await presentFiatWarning({ header: "Information", - message: - "Connect to enable buy crypto with fiat.", + message: "Connect to enable buy crypto with fiat.", buttons: ["OK"], cssClass: "modalAlert", }); @@ -162,230 +150,257 @@ const AppShell = () => { } setSegment(e.detail.value); }; - const contentRef = useRef(null); - const scrollToTop = () => { - // @ts-ignore - contentRef.current.scrollToTop(); - }; useEffect(() => { - initializeWeb3(); - initializeAppSettings() + // initialize by check if user have an existing Wallet created with Magic.link + // to display Migration Guide to Hexa Lite FirebaseWeb3Connect integration + window.indexedDB?.databases().then((databases) => { + // check existing DB + const magicExist = databases.find((db) => + db.name?.toLowerCase()?.includes("magic") + ); + // check modal already displayed + const displayModal = magicExist && !isMigrationMadalAlreadyDisplayed; + if (displayModal) { + // Migration guide process + setIsMagicMigrationModalOpen(true); + } + }); + if (walletAddress === undefined) { + // initialze Web3 connection & app settings + initializeWeb3(); + initializeAppSettings(); + } }, []); useEffect(() => { - if (typeof window !== 'undefined' && window.localStorage) { - const isLightmode = localStorage.getItem('hexa-lite_is-lightmode'); - isLightmode && isLightmode === 'true' - ? document.querySelector('body')?.classList.remove('dark') + if (typeof window !== "undefined" && window.localStorage) { + const isLightmode = localStorage.getItem("hexa-lite_is-lightmode"); + isLightmode && isLightmode === "true" + ? document.querySelector("body")?.classList.remove("dark") : setPreferScheme(); } else { setPreferScheme(); } - return ()=> {}; + return () => {}; }, []); return ( - {!isMobilePWADevice && ( + {!isMobilePWADevice && !isMagicMigrationModalOpen && ( - - ( - <> - - - - - - + + ( + }> + + + )} + /> + ( + }> + + + )} + /> + {/* }> + + } /> + }> + + } /> */} + } + exact={true} + /> + } + exact={true} + /> + ( + <> + + {!isNotFound && ( +
+ )} + + }> + {currentSegment === "wallet" && ( + + )} + + }> + {currentSegment === "swap" && } + + }> + {currentSegment === "earn" && } + + }> + {currentSegment === "defi" && ( + - - - - - - - )} - /> - } > - - } /> - }> - - } /> - }> - - } /> - + }> + {isNotFound === true && } + + + + + )} + /> + + + + )} + + {/* Here use mobile UI */} + {isMobilePWADevice && !isMagicMigrationModalOpen && ( + + + ( - + }> + + )} - exact={true} /> ( - <> - - {!isNotFound && ( -
- )} - - }> - {currentSegment === "wallet" && ( - - )} - - }> - {currentSegment === "swap" && ()} - - }> - {currentSegment === "earn" && } - - }> - {currentSegment === "defi" && ( - - )} - - }> - {currentSegment === isNotFound && } - - - - + }> + + )} /> - - - )} - - {/* Here use mobile UI */} - {isMobilePWADevice && ( - - - } > - - } /> - !walletAddress ? ( - } - > + walletAddress === undefined || walletAddress === null ? ( + }> ) : ( - - - - - -
- -

- -

-

- -

-
-
-
-
-
- - - - - {[1,2,3,4,5].map((_: any, i: number) => ( - - + fallback={ + <> + + + + + +
+ +

- - -

- -

-

- -

-
- +

+

- - - ))} - - - - - - - } +

+
+
+
+
+
+ + + + + {[1, 2, 3, 4, 5].map( + (_: any, i: number) => ( + + + + + +

+ +

+

+ +

+
+ + + +
+ ) + )} +
+
+
+
+
+
+ + } >
@@ -396,17 +411,39 @@ const AppShell = () => {
)} + + + setIsBuyWithFiatModalOpen(false)} + > + }> + setIsBuyWithFiatModalOpen(false)} + isLightmode={ + localStorage.getItem("hexa-lite_is-lightmode") === "true" + ? true + : undefined + } + /> + + + setIsBuyWithFiatModalOpen(false)} - > - }> - setIsBuyWithFiatModalOpen(false)} - isLightmode={localStorage.getItem('hexa-lite_is-lightmode') === 'true' ? true : undefined} /> - - + isOpen={isMagicMigrationModalOpen} + onDidDismiss={() => { + setIsMagicMigrationModalOpen(false); + setIsMigrationMadalAlreadyDisplayed(true); + localStorage.setItem("hexa-lite__migration-modal-displayed", "true"); + }} + > + }> + + + ); }; diff --git a/src/components/AuthBadge.tsx b/src/components/AuthBadge.tsx index a1fc8bcb..88906fff 100644 --- a/src/components/AuthBadge.tsx +++ b/src/components/AuthBadge.tsx @@ -13,14 +13,15 @@ import { IonText, useIonModal, } from "@ionic/react"; -import { checkmarkCircle, copyOutline, openOutline } from "ionicons/icons"; +import { checkmarkCircle, copyOutline, openOutline, saveOutline } from "ionicons/icons"; import DisconnectButton from "./DisconnectButton"; import { SelectNetwork } from "./SelectNetwork"; import { SuccessCopyAddress } from "./SuccessCopyAddress"; import { ToggleLightmode } from "./ui/ToogleLightmode"; +import web3Connector from "@/servcies/firebase-web3-connect"; export const AuthBadge: React.FC = () => { - const { walletAddress, currentNetwork, isMagicWallet, switchNetwork } = + const { walletAddress, currentNetwork, switchNetwork } = Store.useState(getWeb3State); const { display: displayLoader, hide: hidLoader } = useLoader(); const chain = @@ -38,16 +39,16 @@ export const AuthBadge: React.FC = () => { const [presentSelectNetwork, dismissSelectNetwork] = useIonModal(() => ( )); - const handleActions = async (type: string, payload: string) => { + const handleActions = async (type: string, payload?: string) => { await displayLoader(); switch (true) { - case type === "copy": { - navigator?.clipboard?.writeText(payload); + case type === "copy" && payload !== undefined: { + navigator?.clipboard?.writeText(`${payload}`); // display toast confirmation presentSuccessCopyAddress({ cssClass: "modalAlert", @@ -77,6 +78,9 @@ export const AuthBadge: React.FC = () => { await handleActions("copy", `${walletAddress}`); break; } + case type === 'backup': { + await web3Connector.backupWallet() + } default: break; } @@ -167,6 +171,32 @@ export const AuthBadge: React.FC = () => { + + + +

Backup Wallet

+
+ +

+ + Download wallet backup + +

+
+
+ handleActions('backup')} + > + + +
diff --git a/src/components/ConnectButton.tsx b/src/components/ConnectButton.tsx deleted file mode 100644 index f5b68e75..00000000 --- a/src/components/ConnectButton.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import Store from "@/store"; -import { useLoader } from "../context/LoaderContext"; -import { IonButton, IonSkeletonText, useIonToast } from "@ionic/react"; -import { getWeb3State } from "@/store/selectors"; -import { MouseEvent } from "react"; - -const ConnectButton = (props: { - style?: any; - size?: "small" | "default" | "large"; - expand?: "full" | "block"; -}) => { - const toastContext = useIonToast(); - const presentToast = toastContext[0]; - const dismissToast = toastContext[1]; - // Get the initializeWeb3 function from the Web3 context - const { connectWallet, web3Provider } = Store.useState(getWeb3State); - const { display: displayLoader, hide: hideLoader } = useLoader(); - // Define the event handler for the button click - const handleConnect = async () => { - try { - // Display the loader while the connection is being made - await displayLoader(); - await connectWallet(); - // Hide the loader - await hideLoader(); - } catch (error: any) { - // Hide the loader - await hideLoader(); - // Log any errors that occur during the connection process - // filter out the error message if user stop the connection ([-32603] Internal JSON-RPC error.) - if (error?.code === -32603) { - return; - } - console.error("[ERROR] handleConnect:", error); - await presentToast({ - message: `[ERROR] Connect Failed with reason: ${ - error?.message || error - }`, - color: "danger", - buttons: [ - { - text: "x", - role: "cancel", - handler: () => { - dismissToast(); - }, - }, - ], - }); - } - }; - - // Render the button component with the click event handler - return ( - { - $event.currentTarget.disabled = true; - try { - await handleConnect(); - $event.currentTarget.disabled = false; - } catch (err: any) { - console.log('[ERROR] {ConnectButton} handleConnect(): ', err); - if ($event.currentTarget) { - $event.currentTarget.disabled = false; - } - } - }} - > - {web3Provider === null ? ( - - ) : ( - "Connect" - )} - - ); -}; - -export default ConnectButton; diff --git a/src/components/CrosschainLoanForm.tsx b/src/components/CrosschainLoanForm.tsx index 03e74147..1ba93dca 100644 --- a/src/components/CrosschainLoanForm.tsx +++ b/src/components/CrosschainLoanForm.tsx @@ -48,7 +48,7 @@ const isNumberKey = (evt: React.KeyboardEvent) => { } const requestQuote = async (ops: { - web3Provider: ethers.providers.Web3Provider; + signer: ethers.Signer; selectedCollateral: Pick< IAavePool, "chainId" | "aTokenAddress" | "decimals" | "priceInUSD" @@ -57,7 +57,7 @@ const requestQuote = async (ops: { inputFromAmount: number; }): Promise => { const { - web3Provider, + signer, selectedCollateral, newCollateral, inputFromAmount, @@ -69,7 +69,7 @@ const requestQuote = async (ops: { ) .toString(); console.log("[INFO] CrosschainLoanForm requestQuote...", ops); - const fromAddress = (await web3Provider?.getSigner().getAddress()) || ""; + const fromAddress = (await signer.getAddress()) || ""; // return {...fakeQuote, estimate: { // ...fakeQuote.estimate, // toAmount: `${(Number(inputFromAmount||0) * Number(selectedCollateral.priceInUSD)) / Number(newCollateral.priceInUSD)}` @@ -135,7 +135,7 @@ export function CrosschainLoanForm(props: { const { reserve, userSummary, toggleCrosschainForm, onSubmit } = props; const userSummaryAndIncentivesGroup = Store.useState(getUserSummaryAndIncentivesGroupState) const poolGroups = Store.useState(getPoolGroupsState); - const { web3Provider, assets } = Store.useState(getWeb3State); + const { signer, assets } = Store.useState(getWeb3State); const [healthFactor, setHealthFactor] = useState( +userSummary.healthFactor ); @@ -249,7 +249,7 @@ export function CrosschainLoanForm(props: { ), currentLiquidationThreshold: summary.currentLiquidationThreshold, }); - if (!web3Provider) { + if (!signer) { // UI loader control setIsLoading(() => false); throw new Error("No ethereum provider"); @@ -258,7 +258,7 @@ export function CrosschainLoanForm(props: { setIsLoading(() => true); // request Quote const { errors, message, ...quote } = await requestQuote({ - web3Provider: web3Provider as ethers.providers.Web3Provider, + signer, inputFromAmount: value, newCollateral, selectedCollateral, @@ -749,38 +749,38 @@ export function CrosschainLoanForm(props: { { - // exclud all action if no quote available - if (!quote?.id || !web3Provider) { - return; - } - await displayLoader(); - try { - // perform swap collaterals - await checkAndSetAllowance( - web3Provider as ethers.providers.Web3Provider, - quote.action.fromToken.address, - quote.estimate.approvalAddress, - quote.action.fromAmount, - ); - await sendTransaction(quote, web3Provider as ethers.providers.Web3Provider); - await presentToast({ - message: `Swap callaterals successfully. Waiting form Borrow transaction...`, - duration: 5000, - color: "primary", - buttons: ['x'] + // // exclud all action if no quote available + // if (!quote?.id || !signer) { + // return; + // } + // await displayLoader(); + // try { + // // perform swap collaterals + // await checkAndSetAllowance( + // signer, + // quote.action.fromToken.address, + // quote.estimate.approvalAddress, + // quote.action.fromAmount, + // ); + // await sendTransaction(quote, signer); + // await presentToast({ + // message: `Swap callaterals successfully. Waiting form Borrow transaction...`, + // duration: 5000, + // color: "primary", + // buttons: ['x'] - }); - await hideLoader(); - // perform borrow by closing modal with params as `data` - onSubmit(borrowAmount, "confirm"); - } catch (error: any) { - await presentToast({ - message: `Error while swap callaterals: ${error?.message||'Transaction failed'}. Please try again.`, - duration: 5000, - color: "danger", - }); - await hideLoader(); - } + // }); + // await hideLoader(); + // // perform borrow by closing modal with params as `data` + // onSubmit(borrowAmount, "confirm"); + // } catch (error: any) { + // await presentToast({ + // message: `Error while swap callaterals: ${error?.message||'Transaction failed'}. Please try again.`, + // duration: 5000, + // color: "danger", + // }); + // await hideLoader(); + // } }} strong={true} color="gradient" diff --git a/src/components/ETHLiquidStakingstrategy.tsx b/src/components/ETHLiquidStakingstrategy.tsx index 7cdc160c..6119d738 100644 --- a/src/components/ETHLiquidStakingstrategy.tsx +++ b/src/components/ETHLiquidStakingstrategy.tsx @@ -51,7 +51,7 @@ export interface IStrategyModalProps { export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem?: boolean }) { const { currentNetwork, - web3Provider, + signer, switchNetwork, connectWallet, disconnectWallet, @@ -91,10 +91,9 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem? try { await displayLoader(); await connectWallet(); - if (!(web3Provider instanceof ethers.providers.Web3Provider)) { + if (!signer) { throw new Error("Provider not found"); } - const signer = web3Provider?.getSigner(); console.log("[INFO] signer", signer); if (!signer) { throw new Error("Signer not found"); @@ -147,7 +146,7 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem? }); } }, - signer: web3Provider instanceof ethers.providers.Web3Provider ? web3Provider?.getSigner() : undefined, + signer: signer || undefined }, // set source chain to Polygon fromChain: NETWORK.optimism, @@ -195,13 +194,13 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem? }, []); useEffect(() => { - if (!web3Provider) { + if (!signer) { return; } getETHByWstETH(1).then((value) => { setWstToEthAmount(() => Number(value)); }); - }, [web3Provider]); + }, [signer]); const widgetEvents = useWidgetEvents(); useEffect(() => { @@ -404,13 +403,7 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem? { - const chainId = currentNetwork; - await displayLoader(); - if (chainId !== NETWORK.optimism) { - await switchNetwork(NETWORK.optimism); - } await modal.current?.present(); - await hideLoader(); }} expand="block" color="gradient" @@ -430,13 +423,7 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem? { - const chainId = currentNetwork; - await displayLoader(); - if (chainId !== NETWORK.optimism) { - await switchNetwork(NETWORK.optimism); - } await modal.current?.present(); - await hideLoader(); }}> { - if (!web3Provider) { + if (!signer) { return; } getETHByWstETH(1).then((value) => { setWstToEthAmount(() => Number(value)); }); - }, [web3Provider]); + }, [signer]); const widgetEvents = useWidgetEvents(); useEffect(() => { diff --git a/src/components/Header.tsx b/src/components/Header.tsx index acf6818a..9d7370a3 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -22,7 +22,7 @@ import { ribbonOutline, } from "ionicons/icons"; import { AuthBadge } from "./AuthBadge"; -import ConnectButton from "./ConnectButton"; +import ConnectButton from "./ui/ConnectButton"; import { useEffect, useState } from "react"; import { getAddressPoints } from "@/servcies/datas.service"; import { PointsPopover } from "./PointsPopover"; @@ -71,7 +71,7 @@ export function Header({
{ - router.push('/index', 'back'); + window.location.href = 'https://hexa-lite.io' }} > diff --git a/src/components/LiFiWidgetDynamic.tsx b/src/components/LiFiWidgetDynamic.tsx index a1fe4278..60567bb4 100644 --- a/src/components/LiFiWidgetDynamic.tsx +++ b/src/components/LiFiWidgetDynamic.tsx @@ -1,3 +1,4 @@ +import { IonSpinner } from "@ionic/react"; import { LiFiWidget } from "@lifi/widget"; import dynamic from "next/dynamic"; @@ -5,5 +6,6 @@ export const LiFiWidgetDynamic = dynamic( () => import('@lifi/widget').then((module) => module.LiFiWidget) as any, { ssr: false, + loading: ()=> }, ) as typeof LiFiWidget; \ No newline at end of file diff --git a/src/components/LoanFormModal.tsx b/src/components/LoanFormModal.tsx index cb305563..2410ad80 100644 --- a/src/components/LoanFormModal.tsx +++ b/src/components/LoanFormModal.tsx @@ -12,6 +12,8 @@ import { IonImg, IonInput, IonItem, + IonLabel, + IonNote, IonRow, IonText, } from "@ionic/react"; @@ -27,6 +29,7 @@ import { import { WarningBox } from "./WarningBox"; import { CrosschainLoanForm } from "./CrosschainLoanForm"; import { IAavePool } from "@/pool/Aave.pool"; +import web3Connector from '@/servcies/firebase-web3-connect'; export function LoanFormModal({ onDismiss, @@ -43,6 +46,9 @@ export function LoanFormModal({ }) { const { pool, actionType, userSummary } = selectedPool; const inputRef = useRef(null); + const [isConfirm, setIsConfirm ] = useState(false); + const [feesAmount, setFeesAmount ] = useState('0 Gwei'); + const [valueAmount, setValueAmount ] = useState(0); const [isCrossChainEnabled, setIsCrossChainEnabled] = useState(isCrossChain); const [healthFactor, setHealthFactor] = useState( -1 @@ -62,7 +68,16 @@ export function LoanFormModal({ const readableAction = actionType[0].toUpperCase() + actionType.slice(1).toLocaleLowerCase(); - console.log('>>>', userSummary) + const handleClick = async () => { + if (!isConfirm) { + const fees = await web3Connector.getNetworkFeesAsUSD(); + setFeesAmount(fees); + setIsConfirm(true); + return; + } + onDismiss(valueAmount, "confirm"); + } + return ( @@ -99,46 +114,102 @@ export function LoanFormModal({ {!isCrossChainEnabled && ( <> - - - Amount - - -
- - - + Amount + +
{ - const el = inputRef.current; - if (el) { - (el as any).value = maxAmount || 0; + slot="start" + style={{ + display: "flex", + alignItems: "center", + }} + > + + + +
{ + const el = inputRef.current; + if (el) { + (el as any).value = maxAmount || 0; + const newHealthFactor = + calculateHealthFactorFromBalancesBigUnits({ + collateralBalanceMarketReferenceCurrency: + userSummary.totalCollateralUSD, + borrowBalanceMarketReferenceCurrency: + valueToBigNumber( + userSummary.totalBorrowsUSD + ).plus( + valueToBigNumber( + inputRef.current?.value || 0 + ).times(pool?.priceInUSD || 0) + ), + currentLiquidationThreshold: + userSummary.currentLiquidationThreshold, + }); + console.log(">>newHealthFactor.toNumber()", { + newHealthFactor: newHealthFactor.toNumber(), + userSummary, + v: inputRef.current?.value, + }); + + setHealthFactor(newHealthFactor.toNumber()); + } + }} + > + +

{pool.symbol}

+
+ + + Max :{maxAmount.toFixed(6)} + + +
+
+
+ { + const value = (e.target as any).value; + if (maxAmount && value && Number(value) > maxAmount) { + (e.target as any).value = maxAmount; + } + if (value && Number(value) < 0) { + (e.target as any).value = "0"; + setValueAmount(0); + return; + } + // set State + setValueAmount(Number(value)); + // calculate healthfactor const newHealthFactor = calculateHealthFactorFromBalancesBigUnits({ collateralBalanceMarketReferenceCurrency: userSummary.totalCollateralUSD, borrowBalanceMarketReferenceCurrency: - valueToBigNumber( - userSummary.totalBorrowsUSD - ).plus( + valueToBigNumber(userSummary.totalBorrowsUSD).plus( valueToBigNumber( inputRef.current?.value || 0 ).times(pool?.priceInUSD || 0) @@ -147,67 +218,46 @@ export function LoanFormModal({ userSummary.currentLiquidationThreshold, }); console.log(">>newHealthFactor.toNumber()", { - newHealthFactor: newHealthFactor.toNumber(), + newHealthFactor, userSummary, v: inputRef.current?.value, }); setHealthFactor(newHealthFactor.toNumber()); - } - }} - > - -

{pool.symbol}

-
- - - Max :{maxAmount.toFixed(6)} - - + }} + />
-
-
- { - const value = (e.target as any).value; - if (maxAmount && value && Number(value) > maxAmount) { - (e.target as any).value = maxAmount; - } - if (value && Number(value) < 0) { - (e.target as any).value = "0"; - } - const newHealthFactor = - calculateHealthFactorFromBalancesBigUnits({ - collateralBalanceMarketReferenceCurrency: - userSummary.totalCollateralUSD, - borrowBalanceMarketReferenceCurrency: - valueToBigNumber(userSummary.totalBorrowsUSD).plus( - valueToBigNumber( - inputRef.current?.value || 0 - ).times(pool?.priceInUSD || 0) - ), - currentLiquidationThreshold: - userSummary.currentLiquidationThreshold, - }); - console.log(">>newHealthFactor.toNumber()", { - newHealthFactor, - userSummary, - v: inputRef.current?.value, - }); - - setHealthFactor(newHealthFactor.toNumber()); - }} - /> -
-
-
+ + + )} + {isConfirm && ( + + + Review Transaction + + + Action + {readableAction} + + + Amount + {valueAmount||0} { pool.symbol } + + + Fees + {feesAmount||0} + + + )}
{displayRiskCheckbox && ( @@ -239,14 +289,15 @@ export function LoanFormModal({ or use crosschain collateral )} */} + onDismiss(inputRef.current?.value, "confirm")} + onClick={() => handleClick()} strong={true} color="gradient" - disabled={Number(inputRef.current?.value||0) > maxAmount || Number(inputRef.current?.value||0) <= 0} + disabled={(valueAmount||0) > maxAmount || Number(valueAmount||0) <= 0} > - Confirm + {isConfirm ? 'Confirm' : readableAction} diff --git a/src/components/MATICLiquidStakingstrategy.tsx b/src/components/MATICLiquidStakingstrategy.tsx index 459f237a..099127a5 100644 --- a/src/components/MATICLiquidStakingstrategy.tsx +++ b/src/components/MATICLiquidStakingstrategy.tsx @@ -43,6 +43,7 @@ import type { Route } from '@lifi/sdk'; import { PointsData, addAddressPoints } from "@/servcies/datas.service"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; +import { signInWithPhoneNumber } from "firebase/auth"; export interface IStrategyModalProps { dismiss?: ( @@ -52,7 +53,7 @@ export interface IStrategyModalProps { } export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asItem?: boolean }) { - const { web3Provider, switchNetwork, connectWallet, disconnectWallet, currentNetwork } = Store.useState(getWeb3State); + const { signer, switchNetwork, connectWallet, disconnectWallet, currentNetwork } = Store.useState(getWeb3State); const [baseAPRst, setBaseAPRst] = useState(-1); const [action, setAction] = useState<"stake" | "unstake">("stake"); const { display: displayLoader, hide: hideLoader } = useLoader(); @@ -87,10 +88,9 @@ export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asIte try { await displayLoader(); await connectWallet(); - if (!(web3Provider instanceof ethers.providers.Web3Provider)) { + if (!signer) { throw new Error("Provider not found"); } - const signer = web3Provider?.getSigner(); console.log("[INFO] signer", signer); if (!signer) { throw new Error("Signer not found"); @@ -143,7 +143,7 @@ export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asIte }); } }, - signer: web3Provider instanceof ethers.providers.Web3Provider ? web3Provider?.getSigner() : undefined, + signer: signer || undefined }, // set source chain to Polygon fromChain: NETWORK.polygon, @@ -393,12 +393,7 @@ export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asIte { - await displayLoader(); - if (currentNetwork !== NETWORK.polygon) { - await switchNetwork(NETWORK.polygon); - } await modal.current?.present(); - await hideLoader(); }} expand="block" color="gradient" @@ -417,13 +412,7 @@ export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asIte { - const chainId = currentNetwork; - await displayLoader(); - if (chainId !== NETWORK.optimism) { - await switchNetwork(NETWORK.optimism); - } await modal.current?.present(); - await hideLoader(); }}> (null); const getChainData = (chainId: number) => { @@ -109,13 +109,6 @@ export function NetworkButton() { currentNetwork || CHAIN_DEFAULT.id ); const handleSwitchNetwork = async (chainId: number) => { - const isMagic = (web3Provider as any)?.provider?.sdk?.rpcProvider - ?.isMagic; - console.log( - "{{NetworkButton}} handleSwitchNetwork(): web3Provider", - isMagic, - Number(BigInt(chainId).toString()) - ); // save the new chainId to localstorage localStorage.setItem( "default-chainId", diff --git a/src/components/ReserveDetail.tsx b/src/components/ReserveDetail.tsx index a37b813b..ba6f7b20 100644 --- a/src/components/ReserveDetail.tsx +++ b/src/components/ReserveDetail.tsx @@ -9,6 +9,7 @@ import { IonContent, IonFabButton, IonFabList, + IonFooter, IonGrid, IonHeader, IonIcon, @@ -35,7 +36,7 @@ import { import { ethers } from "ethers"; import { getReadableAmount } from "../utils/getReadableAmount"; import { valueToBigNumber } from "@aave/math-utils"; -import ConnectButton from "./ConnectButton"; +import ConnectButton from "./ui/ConnectButton"; import { LoanFormModal } from "./LoanFormModal"; import { useEffect, useMemo, useRef, useState } from "react"; import { @@ -75,6 +76,7 @@ import { import { initializeUserSummary } from "@/store/effects/pools.effect"; import { ModalMessage } from "./ModalMessage"; import { currencyFormat } from "@/utils/currencyFormat"; +import { isMobilePWADevice } from "@/utils/isMobile"; interface IReserveDetailProps { pool: MarketPool; @@ -82,59 +84,6 @@ interface IReserveDetailProps { handleSegmentChange: (e: { detail: { value: string } }) => void; } -const loadTokenData = async (symbol: string) => { - // check if have localstorage data - const localCoinsListString = localStorage.getItem("coingecko-coins-list"); - let localCoinsList = localCoinsListString - ? JSON.parse(localCoinsListString) - : null; - if (!localCoinsList) { - localCoinsList = await fetch( - `https://api.coingecko.com/api/v3/coins/list` - ).then((response) => response.json()); - localStorage.setItem( - "coingecko-coins-list", - JSON.stringify(localCoinsList) - ); - } - if (!localCoinsList) { - return; - } - // find coin id by symbol - const coin = localCoinsList.find( - (coin: { symbol: string }) => - coin.symbol.toLocaleLowerCase() === symbol.toLocaleLowerCase() - ); - if (coin) { - // fetch coin data by id - return fetch(`https://api.coingecko.com/api/v3/coins/${coin.id}`) - .then((response) => response.json()) - .then((data) => { - console.log("coin data: ", data.description.en); - const { - description: { en: description }, - market_data: { - fully_diluted_valuation: { usd: fullyDilutedValuationUSD }, - market_cap: { usd: marketCapUSD }, - max_supply: maxSupply, - total_supply: totalSupply, - circulating_supply: circulatingSupply, - }, - } = data; - return { - description, - fullyDilutedValuationUSD, - marketCapUSD, - maxSupply, - totalSupply, - circulatingSupply, - }; - }); - } else { - return; - } -}; - export function ReserveDetail(props: IReserveDetailProps) { const { pool: { id, chainId }, @@ -142,7 +91,7 @@ export function ReserveDetail(props: IReserveDetailProps) { handleSegmentChange, } = props; const { - web3Provider, + signer, currentNetwork, walletAddress, assets, @@ -249,7 +198,6 @@ export function ReserveDetail(props: IReserveDetailProps) { throw new Error("No poolGroup found"); } - console.log('>>>>x x', userSummaryAndIncentivesGroup) const userSummary = userSummaryAndIncentivesGroup?.find((group) => group?.userReservesData?.find(({ reserve }) => reserve.id === id) ); @@ -306,24 +254,20 @@ export function ReserveDetail(props: IReserveDetailProps) { `[INFO] ReserveDetail - onWillDismiss from LoanFormModal: `, ev.detail ); - if (!web3Provider) { - throw new Error("No web3Provider found"); + if (!signer) { + throw new Error("No signer found"); } - if (!(web3Provider instanceof ethers.providers.Web3Provider)) { - throw new Error("No EVM web3Provider"); + if (!signer) { + throw new Error("No EVM signer"); } if (ev.detail.role !== "confirm") { return; } displayLoader(); - // switch network if need - let provider = web3Provider; if (currentNetwork !== pool.chainId) { await switchNetwork(pool.chainId); - // update provider after switch network - provider = web3Provider; } - if (!provider) { + if (!signer) { throw new Error("No provider found or update failed"); } // perform action @@ -332,19 +276,19 @@ export function ReserveDetail(props: IReserveDetailProps) { const amount = Number(value); switch (true) { case type === "deposit": { - await pool.deposit(amount, provider); + await pool.deposit(amount, signer); break; } case type === "withdraw": { - await pool.withdraw(amount, provider); + await pool.withdraw(amount, signer); break; } case type === "borrow": { - await pool.borrow(amount, provider); + await pool.borrow(amount, signer); break; } case type === "repay": { - await pool.repay(amount, provider); + await pool.repay(amount, signer); break; } default: @@ -411,11 +355,10 @@ export function ReserveDetail(props: IReserveDetailProps) { ) : ( <> ); - const DepositBtn = walletAddress && (walletBalance || 0) > 0 && - supplyPoolRatioInPercent < 99 ? ( + (supplyPoolRatioInPercent < 99 || Infinity) ? ( + { + setIsModalOptionsOpen(() => true); + }} + > + Choose option + + + ) : ( + + ); + return ( <> @@ -617,60 +576,7 @@ export function ReserveDetail(props: IReserveDetailProps) { size-lg="6" className="ion-text-center" > - {walletAddress ? ( - <> - { - setIsModalOptionsOpen(() => true); - }} - > - Choose option - - {}} - keyboardClose={false} - isOpen={isModalOptionsOpen} - onDidDismiss={() => { - setIsModalOptionsOpen(false); - }} - > - - - - -

- Select option -

-
- -

- - Choose an option to interact with this - pool. - -

-
-
- - {/* {ExchangeAssetBtn} - {BuyAssetBtn} */} - {WithdrawBtn} - {DepositBtn} - {RepayBtn} - {BorrowBtn} - -
-
-
- - ) : ( - - )} + {!isMobilePWADevice ? callActionsBtn : null} {tokenDetails && (
+ {isMobilePWADevice && ( + + + {callActionsBtn} + + + )} + {}} + keyboardClose={false} + isOpen={isModalOptionsOpen} + onDidDismiss={() => { + setIsModalOptionsOpen(false); + }} + > + + + + +

+ Select option +

+
+ +

+ + Choose an option to interact with this + pool. + +

+
+
+ + {/* {ExchangeAssetBtn} + {BuyAssetBtn} */} + {WithdrawBtn} + {DepositBtn} + {RepayBtn} + {BorrowBtn} + +
+
+
+ { diff --git a/src/components/SelectNetwork.tsx b/src/components/SelectNetwork.tsx index 11126e19..c7ba5beb 100644 --- a/src/components/SelectNetwork.tsx +++ b/src/components/SelectNetwork.tsx @@ -16,13 +16,13 @@ import { IChain } from "@/constants/chains"; interface SelectNetworkProps { chains: Pick[]; - isMagicWallet: boolean; + isExternalWallet: boolean; dismiss: (data?: any, role?: string | undefined) => void; } export const SelectNetwork: React.FC = ({ chains, - isMagicWallet, + isExternalWallet, dismiss, }) => { return ( @@ -32,7 +32,7 @@ export const SelectNetwork: React.FC = ({

Select network

- {!isMagicWallet && ( + {isExternalWallet && (

= ({ }} > {chains - // .filter(chain => isMagicWallet ? true : chain.type === "evm") .sort((a, b) => (a.name > b.name ? 1 : -1)) .map((chain, index) => ( = ({ button={true} detail={false} disabled={ - isMagicWallet ? false : chain.type === "evm" ? false : true + isExternalWallet && chain.type !== "evm" ? true : false } style={{ "--background": "transparent" }} onClick={() => dismiss(chain.id, "getAddressFromNetwork")} diff --git a/src/components/base/WalletBaseContainer.tsx b/src/components/base/WalletBaseContainer.tsx index c3d42b97..edd71e90 100644 --- a/src/components/base/WalletBaseContainer.tsx +++ b/src/components/base/WalletBaseContainer.tsx @@ -16,6 +16,7 @@ import { IAsset } from "@/interfaces/asset.interface"; import { DepositContainer } from "@/containers/DepositContainer"; import { HookOverlayOptions } from "@ionic/react/dist/types/hooks/HookOverlayOptions"; import { TransferContainer } from "../../containers/TransferContainer"; +import { TxInterface } from "@/interfaces/tx.interface"; const BuyWithFiatContainer = lazy(() => import("@/containers/BuyWithFiat")); export type SelectedTokenDetail = { @@ -31,7 +32,7 @@ export type SelectedTokenDetail = { export interface WalletComponentProps { modalOpts: Omit & HookOverlayOptions; - walletAddress?: string; + walletAddress?: string|null; assets: IAsset[]; loadAssets: (force?: boolean) => Promise; } @@ -45,6 +46,7 @@ export interface WalletComponentState { isTransferModalOpen: boolean; isDepositModalOpen: boolean; isBuyWithFiatModalOpen: boolean; + currentView: 'tokens' | 'txs' | 'nfts' } export default class WalletBaseComponent extends React.Component< @@ -62,6 +64,7 @@ export default class WalletBaseComponent extends React.Component< isTransferModalOpen: false, isDepositModalOpen: false, isBuyWithFiatModalOpen: false, + currentView: 'tokens' }; } diff --git a/src/components/mobile/ActionNavButtons.tsx b/src/components/mobile/ActionNavButtons.tsx index 9a2c8570..ce36e7f2 100644 --- a/src/components/mobile/ActionNavButtons.tsx +++ b/src/components/mobile/ActionNavButtons.tsx @@ -81,7 +81,6 @@ export const MobileActionNavButtons = (props: { { setState({ isEarnModalOpen: true }); }} diff --git a/src/components/mobile/WalletAssetsList.tsx b/src/components/mobile/WalletAssetsList.tsx index bf933ff4..6a11e76c 100644 --- a/src/components/mobile/WalletAssetsList.tsx +++ b/src/components/mobile/WalletAssetsList.tsx @@ -30,8 +30,6 @@ export const WalletAssetsList = (props: { totalBalance, assetGroup, filterBy, handleTokenDetailClick, handleTransferClick, setIsSwapModalOpen } = props; - const { walletAddress, assets, isMagicWallet, loadAssets } = - Store.useState(getWeb3State); return ( <> diff --git a/src/components/ui/CheckIcon/CheckIcon.module.scss b/src/components/ui/CheckIcon/CheckIcon.module.scss new file mode 100644 index 00000000..056253a9 --- /dev/null +++ b/src/components/ui/CheckIcon/CheckIcon.module.scss @@ -0,0 +1,64 @@ +@keyframes outline { + from { + stroke-dasharray: 0, 345.576px; + } + to { + stroke-dasharray: 345.576px, 345.576px; + } +} +@keyframes circle { + from { + transform: scale(1); + } + to { + transform: scale(0); + } +} +@keyframes check { + from { + stroke-dasharray: 0, 75px; + } + to { + stroke-dasharray: 75px, 75px; + } +} +@keyframes check-group { + from { + transform: scale(1); + } + 50% { + transform: scale(1.09); + } + to { + transform: scale(1); + } +} + + +#check__group { + animation: 0.32s ease-in-out 1.03s check-group; + transform-origin: center; +} +#filled__circle {} + +#white__circle { + animation: 0.35s ease-in 0.35s forwards circle; + transform: none; + transform-origin: center; +} + +#outline__circle { + animation: 0.38s ease-in outline; + transform: rotate(0deg); + transform-origin: center; +} + +#check__icon { + animation: 0.34s cubic-bezier(0.65, 0, 1, 1) 0.8s forwards check; + stroke-dasharray: 0, 75px; + stroke-linecap: round; + stroke-linejoin: round; +} + + + diff --git a/src/components/ui/CheckIcon/CheckIcon.tsx b/src/components/ui/CheckIcon/CheckIcon.tsx new file mode 100644 index 00000000..a427dc6d --- /dev/null +++ b/src/components/ui/CheckIcon/CheckIcon.tsx @@ -0,0 +1,58 @@ +import { IonText } from '@ionic/react'; +import styles from './CheckIcon.module.scss'; + +export const CheckIcon = (props: {message?: string}) => { + return (<> + + + + + + + + + {props.message && (<> +

+ +

{props.message}

+
+
+ )} + ) +} \ No newline at end of file diff --git a/src/components/ui/ConnectButton.tsx b/src/components/ui/ConnectButton.tsx new file mode 100644 index 00000000..fe4e8ba8 --- /dev/null +++ b/src/components/ui/ConnectButton.tsx @@ -0,0 +1,48 @@ +import Store from "@/store"; +import { IonButton, IonSkeletonText } from "@ionic/react"; +import { getWeb3State } from "@/store/selectors"; +import { useRef } from "react"; + +const ConnectButton = (props: { + style?: any; + size?: "small" | "default" | "large"; + expand?: "full" | "block"; +}) => { + const { style = {}, size = "default", expand = undefined } = props; + // Get the initializeWeb3 function from the Web3 context + const { connectWallet, walletAddress } = Store.useState(getWeb3State); + const buttonRef = useRef(null); + const isDisabled = Boolean(walletAddress); + + // Render the button component with the click event handler + return ( + { + if (!buttonRef.current) { + throw new Error("Element not connected to DOM"); + } + buttonRef.current.disabled = true; + try { + await connectWallet(); + } catch (err: any) { + buttonRef.current.disabled = false; + console.log("[ERROR] {ConnectButton} handleConnect(): ", err); + } + }} + > + {walletAddress === undefined ? ( + + ) : ( + "Connect" + )} + + ); +}; + +export default ConnectButton; diff --git a/src/components/ui/CrossIcon/CrossIcon.module.scss b/src/components/ui/CrossIcon/CrossIcon.module.scss new file mode 100644 index 00000000..3d62738e --- /dev/null +++ b/src/components/ui/CrossIcon/CrossIcon.module.scss @@ -0,0 +1,46 @@ + +@keyframes stroke { + 100% { + stroke-dashoffset: 0; + } +} + +.cross__svg { + border-radius: 50%; + display: block; + height: 111px; + margin: 1rem auto; + stroke-width: 4; + width: 111px; +} + +.cross__circle { + animation: 0.6s ease 0s normal forwards 1 running stroke; + fill: none; + margin: 0 auto; + stroke: var(--ion-color-danger); + stroke-dasharray: 166; + stroke-dashoffset: 166; + stroke-width: 3; +} + +.cross__path { + stroke: var(--ion-color-danger); + stroke-dasharray: 48; + stroke-dashoffset: 48; + transform-origin: 50% 50% 0; +} + +.cross__path__right { + animation: 0.3s ease 0.8s normal forwards 1 running stroke; +} + +.cross__path__left { + animation: 1s ease 0.8s normal forwards 1 running stroke; +} + +.cross__message { + color: var(--ion-color-danger); + font-size: 0.8rem; + text-align: center; +} \ No newline at end of file diff --git a/src/components/ui/CrossIcon/CrossIcon.tsx b/src/components/ui/CrossIcon/CrossIcon.tsx new file mode 100644 index 00000000..61a57f30 --- /dev/null +++ b/src/components/ui/CrossIcon/CrossIcon.tsx @@ -0,0 +1,26 @@ +import styles from './CrossIcon.module.scss'; + +export const CrossIcon = (props: {message: string}) => { + return ( + <> + + + + + +

{props.message}

+ + ); +}; diff --git a/src/components/ui/InputAssetWithDropDown/InputAssetWithDropDown.tsx b/src/components/ui/InputAssetWithDropDown/InputAssetWithDropDown.tsx new file mode 100644 index 00000000..fe173fa1 --- /dev/null +++ b/src/components/ui/InputAssetWithDropDown/InputAssetWithDropDown.tsx @@ -0,0 +1,195 @@ +import { SymbolIcon } from "@/components/SymbolIcon"; +import { CHAIN_AVAILABLES, CHAIN_DEFAULT } from "@/constants/chains"; +import { IAsset } from "@/interfaces/asset.interface"; +import { getReadableAmount } from "@/utils/getReadableAmount"; +import { InputInputEventDetail, IonInputCustomEvent } from "@ionic/core"; +import { IonCol, IonGrid, IonIcon, IonInput, IonItem, IonLabel, IonList, IonListHeader, IonModal, IonRow, IonText } from "@ionic/react"; +import { chevronDown } from "ionicons/icons"; +import { Dispatch, SetStateAction, useEffect, useMemo, useState } from "react"; + +const isNumberKey = (evt: React.KeyboardEvent) => { + var charCode = evt.which ? evt.which : evt.keyCode; + return !(charCode > 31 && (charCode < 48 || charCode > 57)); +}; + +export const InputAssetWithDropDown = (props: { + assets: IAsset[]; + inputFromAmount: number; + setInputFromAmount: Dispatch>; + setInputFromAsset: Dispatch>; +}) => { + const { assets, setInputFromAmount, inputFromAmount, setInputFromAsset } = + props; + const [selectedAsset, setSelectedAsset] = useState(assets[0]); + const [popoverOpen, setPopoverOpen] = useState(false); + + useEffect(() => { + if (selectedAsset) { + setInputFromAsset(selectedAsset); + } + return () => {}; + }); + + const maxBalance = useMemo(() => { + // round to the lower tenth + return Math.floor(selectedAsset?.balance * 10000) / 10000; + }, [selectedAsset]); + + const handleInputChange = async ( + e: IonInputCustomEvent + ) => { + let value = Number((e.target as any).value || 0); + setInputFromAmount(() => value); + }; + + return ( + <> + + + +
{ + $event.stopPropagation(); + setPopoverOpen(() => true); + }} + > +
+ + +
+ +
+ +

{selectedAsset?.symbol}

+
+ { + $event.stopPropagation(); + setInputFromAmount(() => selectedAsset?.balance || 0); + }} + > + Max: {maxBalance} + +
+
+
+ +
+ ["e", "E", "+", "-"].includes(evt.key) && evt.preventDefault()} + onIonInput={(e) => handleInputChange(e)} + /> +
+
+
+
+ + setPopoverOpen(false)} + className="modalAlert" + > + + +

Available assets

+
+
+ + {assets + .filter((a) => a.balance > 0) + .map((asset, index) => ( + { + setPopoverOpen(() => false); + setSelectedAsset(asset); + setInputFromAsset(asset); + setInputFromAmount(() => 0); + console.log('[INFO] selectedAsset: ',{ selectedAsset }); + }} + > +
+ +
+ + {asset.symbol} +
+ + + { + CHAIN_AVAILABLES.find((c) => c.id === asset?.chain?.id) + ?.name + } + + +
+
+ {Number(asset?.balance).toFixed(6)} +
+ + + {getReadableAmount( + +asset?.balance, + Number(asset?.priceUsd), + "No deposit" + )} + + +
+
+ ))} +
+
+ + ); +}; \ No newline at end of file diff --git a/src/components/ui/LightChart.tsx b/src/components/ui/LightChart.tsx index d2ab6481..40160be1 100644 --- a/src/components/ui/LightChart.tsx +++ b/src/components/ui/LightChart.tsx @@ -1,20 +1,80 @@ -import { ColorType, IChartApi, createChart } from 'lightweight-charts'; -import { useEffect, useRef } from 'react'; - -// Generated by https://quicktype.io +import { IonButton, IonButtons } from "@ionic/react"; +import { + ColorType, + IChartApi, + ISeriesApi, + LineStyle, + LineType, + SeriesMarker, + Time, + createChart, +} from "lightweight-charts"; +import { useEffect, useRef, useState } from "react"; export interface DataItem { - time: string; + time: string|number; value: number; } +type SerieIntervalType = "1D" | "1W" | "1M" | "1Y"; +export type SeriesData = Map; +export type SeriesMarkerData = Map[]>; -export default function LightChart(props: { data: DataItem[], minHeight?: number }) { +export default function LightChart(props: { + data?: DataItem[]; + seriesData?: SeriesData; + markers?: SeriesMarkerData; + interval?: "1D"|"1W"|"1M"|"1Y"; + handleChartEvent?: ({ + action, + payload, + }: { + action: string; + payload: unknown; + }) => any; + minHeight?: number; +}) { + const { seriesData, data, interval, markers, handleChartEvent } = props; const chartContainerRef = useRef(null); - const chartRef = useRef(null); - + const chartRef = useRef(null); + const [chartSeries, setChartSeries] = useState< + ISeriesApi<"Line" | "Area", any> + >(null as any); + const [currentInterval, setcurrentInterval] = + useState(interval || "1M"); + + const setChartInterval = (interval: SerieIntervalType) => { + if (!chartSeries) throw new Error("chartSeries not initialized"); + const value = data ? data : seriesData?.get(interval); + if (!value) + throw new Error("Serie value not found for this interval: " + interval); + if (!chartRef.current) throw new Error("Chart not initialized"); + // set value & options + chartSeries.setData(value); + chartSeries.applyOptions({ + topColor: "rgba(0,144,255, 0.618)", + lineStyle: LineStyle.Solid, + lineType: LineType.Simple, + bottomColor: "rgba(0,144,255, 0.01)", + lineColor: "rgba(0,144,255, 1)", + lineWidth: 3, + baseLineWidth: 3, + }); + // markers + const markerValue = markers?.get(interval); + if (chartSeries && markerValue) { + + chartSeries.setMarkers(markerValue); + } + chartRef.current.timeScale().fitContent(); + setcurrentInterval(interval); + }; useEffect(() => { - if (chartContainerRef.current && props.data.length > 0) { + if ( + chartContainerRef.current && + ((data?.length || 0) > 0 || (seriesData?.size || 0) > 0) + ) { + console.log(data); // remove the chart if it already exists if (chartRef.current) { chartRef.current.remove(); @@ -23,14 +83,14 @@ export default function LightChart(props: { data: DataItem[], minHeight?: number // create a new chart const chart = createChart(chartContainerRef.current, { - width: window.innerWidth||400, + width: window.innerWidth || 400, height: props?.minHeight || 250, layout: { background: { - type: ColorType.Solid, - color: 'transparent', - }, - textColor: '#d1d4dc', + type: ColorType.Solid, + color: "transparent", + }, + textColor: "#d1d4dc", }, grid: { vertLines: { @@ -38,18 +98,15 @@ export default function LightChart(props: { data: DataItem[], minHeight?: number }, horzLines: { // color: 'rgba(42, 46, 57, 0.05)', - visible: false + visible: false, }, }, rightPriceScale: { borderVisible: false, - visible: true, + visible: false, }, timeScale: { borderVisible: false, - fixLeftEdge: true, - rightBarStaysOnScroll: true, - fixRightEdge: true, }, crosshair: { horzLine: { @@ -58,37 +115,75 @@ export default function LightChart(props: { data: DataItem[], minHeight?: number }, }, autoSize: true, - - }); - // const lineSeries = chart.addLineSeries(); - // lineSeries.setData(props.data); - - const series = chart.addAreaSeries({ - topColor: 'rgba(0,144,255, 0.618)', - bottomColor: 'rgba(0,144,255, 0.01)', - lineColor: 'rgba(0,144,255, 1)', - lineWidth: 3, + handleScroll: false, + handleScale: false, }); - series.setData(props.data); - - const now = new Date(); - chart.timeScale().setVisibleRange({ - from: new Date(`${now.getFullYear()}-${(now.getMonth()+1) < 10 ? `0${(now.getMonth() + 1)}` : now.getMonth()+1}-${now.getDate()-7}`).getTime() / 1000 as any, - to: now.getTime() / 1000 as any, - }); - // store the chart instance in the ref chartRef.current = chart; + // subscribe to event mouse move + if (handleChartEvent) { + chart.subscribeCrosshairMove((param) => { + if ( + param.point === undefined || + !param.time || + param.point.x < 0 || + param.point.y < 0 + ) { + handleChartEvent({ action: "leave", payload: undefined }); + } else { + const dateStr = new Date(param.time.toString()).toDateString(); + const data = param.seriesData.get(series) as DataItem; + const price = data.value; + handleChartEvent({ action: "move", payload: { dateStr, price } }); + // console.log(); + } + }); + } + + const series = chart.addAreaSeries(); + setChartSeries(series); + + // if (markers && series) { + + // series.setMarkers(markers); + // } } // clean up the chart when the component is unmounted return () => { if (chartRef.current) { + // chartRef.current.unsubscribeCrosshairMove(); chartRef.current.remove(); chartRef.current = null; } }; - }, [props.data]); + }, [data, seriesData]); - return
; -}; + useEffect(() => { + if (!chartSeries || !chartRef.current) return () => {}; + setChartInterval(interval||currentInterval); + chartRef.current?.timeScale().fitContent(); + }, [chartSeries, chartRef.current, interval || currentInterval]); + return ( + <> +
+ {(seriesData?.size || 0) > 1 && !interval? ( +
+ + {["1D", "1W", "1M", "1Y"].map((interval: any, index: number) => ( + setChartInterval(interval)} + > + {interval} + + ))} + +
+ ) : null} + + ); +} diff --git a/src/components/ui/MenuSetting.tsx b/src/components/ui/MenuSetting.tsx index 462e41d1..d2950ba5 100644 --- a/src/components/ui/MenuSetting.tsx +++ b/src/components/ui/MenuSetting.tsx @@ -18,14 +18,15 @@ import { useIonRouter, IonPopover, } from "@ionic/react"; -import { close, open, openOutline, radioButtonOn, ribbonOutline } from "ionicons/icons"; +import { close, openOutline, saveOutline, ribbonOutline } from "ionicons/icons"; import { getAddressPoints } from "@/servcies/datas.service"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; -import ConnectButton from "../ConnectButton"; +import ConnectButton from "./ConnectButton"; import DisconnectButton from "../DisconnectButton"; import { ToggleLightmode } from "./ToogleLightmode"; import { PointsPopover } from "../PointsPopover"; +import web3Connector from "@/servcies/firebase-web3-connect"; interface MenuSettingsProps { dismiss: ()=> void @@ -169,20 +170,27 @@ export const MenuSettings: React.FC = ({dismiss}) => { > -

Feedback

+

Backup Wallet

- Send your feedback + + Download wallet backup +

- { - window.open('https://forms.gle/Dx25eG66TMxyFfh8A', '_blank') - }}> - + { + await web3Connector.backupWallet(); + }} + > + - + = ({dismiss}) => { > -

Gouvernance

+

Feedback

- Snapshot + Send your feedback

{ - window.open('https://snapshot.org/#/hexaonelabs.eth', '_blank') + window.open('https://forms.gle/Dx25eG66TMxyFfh8A', '_blank') }}> @@ -211,16 +219,16 @@ export const MenuSettings: React.FC = ({dismiss}) => { > -

Source code

+

Gouvernance

- Github + Snapshot

{ - window.open('https://github.com/hexaonelabs', '_blank') + window.open('https://snapshot.org/#/hexaonelabs.eth', '_blank') }}> @@ -232,20 +240,20 @@ export const MenuSettings: React.FC = ({dismiss}) => { > -

Terms & Conditions

+

Source code

- PDF + Github

{ - window.open('https://hexa-lite.io/terms-conditions.pdf', '_blank') + window.open('https://github.com/hexaonelabs', '_blank') }}> -
+ = ({dismiss}) => { > -

Wallet key export

-
+

Terms & Conditions

+

- Wallet Magik + PDF

{ - window.open('https://wallet.magic.link/', '_blank') + window.open('https://hexa-lite.io/terms-conditions.pdf', '_blank') }}> -
+ { + const { token, allocationRatioInPercent } = props; + + return ( + + +
+
+ + c.id === token.chain?.id)?.logo + } + alt={token.symbol} + onError={(event) => { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${token.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

+ {token.chain?.name} +
+ network +

+
+
+ {allocationRatioInPercent && ( + + + {allocationRatioInPercent}% + + + )} +
+
+ +

+ +
+ + + {numberFormat.format(token.balance)} {token.symbol} + + +

+
+
+
+
+ ); +}; diff --git a/src/components/ui/NftsList/NftsList.tsx b/src/components/ui/NftsList/NftsList.tsx new file mode 100644 index 00000000..5d44394e --- /dev/null +++ b/src/components/ui/NftsList/NftsList.tsx @@ -0,0 +1,110 @@ +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import { + IonButton, + IonCard, + IonCardContent, + IonCardHeader, + IonCardSubtitle, + IonCardTitle, + IonChip, + IonCol, + IonGrid, + IonIcon, + IonImg, + IonInfiniteScroll, + IonLabel, + IonRow, + IonText, +} from "@ionic/react"; +import { imageOutline, ticket } from "ionicons/icons"; +import { useEffect, useState } from "react"; +import { WalletTxEntitySkeleton } from "../WalletTxEntitySkeleton"; + +export const NftsList = (props: { filterBy?: string | null }) => { + const { nfts } = Store.useState(getWeb3State); + const [maxItemCount, setMaxItemCount] = useState(9); + const [] = useState(); + + const data = nfts; + // preload img + useEffect(() => {}); + + return ( + <> + + {nfts.length > 0 ? ( + <> + + {data.slice(0, maxItemCount).map((nft, i) => ( + + + {nft.imageUrl && nft.imageUrl.length > 0 ? ( + { + console.log("yy", $event.target); + }} + /> + ) : ( + + )} + + {nft.name || "unknown"} + + {nft.collectionName || "unknown"} + + + + {nft.chain?.name} + + + + ))} + + {maxItemCount < data.length + ? ( + <> + + + setMaxItemCount(maxItemCount + 9)}> + load more + + + + + ) + : null} + + ) : ( + <> + + +

No NFTs found.

+
+
+ + )} +
+ + ); +}; diff --git a/src/components/ui/TokenDetailDescription.tsx b/src/components/ui/TokenDetailDescription.tsx index 1b28aec4..e94db235 100644 --- a/src/components/ui/TokenDetailDescription.tsx +++ b/src/components/ui/TokenDetailDescription.tsx @@ -1,4 +1,4 @@ -import { TokenInfo } from "@/utils/getTokenInfo"; +import { TokenInfo } from "@/servcies/coingecko.service"; import { IonChip, IonLabel, IonListHeader, IonText } from "@ionic/react"; export function TokenDetailDescription(props: { tokenInfo: TokenInfo }) { diff --git a/src/components/ui/TokenDetailMarketData.tsx b/src/components/ui/TokenDetailMarketData.tsx index dc7cecd0..02279485 100644 --- a/src/components/ui/TokenDetailMarketData.tsx +++ b/src/components/ui/TokenDetailMarketData.tsx @@ -1,5 +1,5 @@ import { currencyFormat } from "@/utils/currencyFormat"; -import { TokenInfo } from "@/utils/getTokenInfo"; +import { TokenInfo } from '@/servcies/coingecko.service'; import { numberFormat } from "@/utils/numberFormat"; import { IonItem, diff --git a/src/components/ui/ToogleLightmode.tsx b/src/components/ui/ToogleLightmode.tsx index d620a6a2..d1277b3f 100644 --- a/src/components/ui/ToogleLightmode.tsx +++ b/src/components/ui/ToogleLightmode.tsx @@ -23,6 +23,7 @@ export const ToggleLightmode = () => { ); } \ No newline at end of file diff --git a/src/components/ui/TsxList/TxsList.tsx b/src/components/ui/TsxList/TxsList.tsx new file mode 100644 index 00000000..692b94e9 --- /dev/null +++ b/src/components/ui/TsxList/TxsList.tsx @@ -0,0 +1,98 @@ +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import { IonCol, IonGrid, IonInfiniteScroll, IonLabel, IonRow, IonText } from "@ionic/react"; +import { useState } from "react"; +import { WalletTxEntity } from "../WalletTxEntity"; +import { LoadingPoolGroupsSkeleton } from "@/components/LoadingPoolGroupsSkeleton"; +import { WalletTxEntitySkeleton } from "../WalletTxEntitySkeleton"; + +export const TxsList = (props: { + filterBy?: string|null; +}) => { + const { txs } = Store.useState(getWeb3State); + const [maxItemCount, setMaxItemCount] = useState(10); + const data = txs + .filter((tx)=> { + if (!props.filterBy) { + return true; + } + // check transfers + if (tx.attributes.transfers.find( + t => t.fungible_info?.symbol.toLocaleLowerCase() === props.filterBy?.toLocaleLowerCase()) + ) { + return true; + } + // check approvals + if (tx.attributes.approvals.find( + t => t.fungible_info?.symbol.toLocaleLowerCase() === props.filterBy?.toLocaleLowerCase()) + ) { + return true; + } + return false + }); + + return ( + <> + + + + + Transaction Type + + + + + + Details + + + + + + Date/Time + + + + + + {data.length <= 0 + ? (
+ + no existing transaction + +
) + : data + .slice(0, maxItemCount) + .map((tx, i) => ( + + ))} + { + console.log(maxItemCount, data.length) + if (maxItemCount >= data.length) { + ev.target.disabled = true; + ev.target.complete(); + return; + } + setMaxItemCount((s) => s + 10); + setTimeout(() => ev.target.complete(), 150); + }} + > +
+ 10 ? 5 : txs.length - maxItemCount} /> +
+
+ + ); +}; diff --git a/src/components/ui/WalletAssetEntity.tsx b/src/components/ui/WalletAssetEntity.tsx index 2d55fe90..8caad57a 100644 --- a/src/components/ui/WalletAssetEntity.tsx +++ b/src/components/ui/WalletAssetEntity.tsx @@ -17,9 +17,10 @@ import { Currency } from "./Currency"; export function WalletAssetEntity(props: { asset: SelectedTokenDetail; + allocationRatioInPercent: number; setSelectedTokenDetail: (asset: SelectedTokenDetail) => void; }) { - const { asset, setSelectedTokenDetail } = props; + const { asset, setSelectedTokenDetail, allocationRatioInPercent } = props; return ( ) : ''} - + + +

+ {allocationRatioInPercent}% +

+
+
+

{currencyFormat.format(asset.priceUsd)}

- +

{numberFormat.format(asset.balance)}

- + -

+

diff --git a/src/components/ui/WalletTxEntity.tsx b/src/components/ui/WalletTxEntity.tsx new file mode 100644 index 00000000..0e4a6994 --- /dev/null +++ b/src/components/ui/WalletTxEntity.tsx @@ -0,0 +1,241 @@ +import { + IonAvatar, + IonBadge, + IonButton, + IonChip, + IonCol, + IonGrid, + IonIcon, + IonLabel, + IonRow, + IonText, + IonThumbnail, +} from "@ionic/react"; +import { Transfer, TxInterface } from "@/interfaces/tx.interface"; +import { CHAIN_AVAILABLES } from "@/constants/chains"; +import { useStores } from "pullstate"; +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import { getSplitedAddress } from "@/utils/getSplitedAddress"; +import { useMemo } from "react"; +import { arrowDown, arrowUp, document, lockOpen, repeat } from "ionicons/icons"; +import { currencyFormat } from "@/utils/currencyFormat"; + +export function WalletTxEntity(props: { tx: TxInterface }) { + const { tx } = props; + const { walletAddress } = Store.useState(getWeb3State); + + let icon; + let color = 'primary'; + switch (true) { + case tx.attributes.operation_type === 'trade': + icon = repeat; + break; + case tx.attributes.operation_type === 'deposit': + case tx.attributes.operation_type === 'receive': + color = 'success'; + icon = arrowDown; + break; + case tx.attributes.operation_type === 'approve': + icon = lockOpen; + break + case tx.attributes.operation_type === 'send': + case tx.attributes.operation_type === 'withdraw': + color = 'warning'; + icon = arrowUp; + break; + case tx.attributes.operation_type === 'execute': + icon = document; + break; + case tx.attributes.operation_type === 'mint': + color = 'success' + icon = document; + break; + default: + icon = document; + color = 'primary'; + break; + } + + const action1 = tx.attributes.transfers.length > 0 + ? tx.attributes.transfers[0] + : tx.attributes.approvals[0]; + const action2 = tx.attributes.transfers.length > 0 + ? tx.attributes.transfers[1] + : undefined; + + return ( + { + // setDisplayTxDetail(asset); + console.log(tx) + }} + style={{ + cursor: "default", + borderBottom: "solid 1px rgba(var(--ion-color-primary-rgb), 0.2)", + }} + > + + +

+ + + c.value === tx.relationships.chain.data.id)?.logo + } + alt={tx.relationships.chain.data.id} + style={{ transform: "scale(1.01)" }} + onError={(event) => { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${tx.relationships.chain.data.id}&bgColor=%23cccccc&textColor=%23182449`; + }} + /> + +
+ {/* +

+ {tx.attributes.operation_type} +

+
*/} + + {tx.attributes.operation_type} + + +
+ + +
+ + {tx.relationships.chain.data.id} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${action1.fungible_info.symbol}&bgColor=%23cccccc&textColor=%23182449`; + }} + /> + + + {(tx.attributes.operation_type === 'trade' || tx.attributes.operation_type === 'receive' || tx.attributes.operation_type === 'approve'|| tx.attributes.operation_type === 'deposit') && ( +

+ {tx.attributes.operation_type !== 'approve' && ( + (action1 as Transfer).direction === 'in' ? '+ ' : '- ' + )} + {action1.quantity.float.toFixed(3) + ' '} + {action1.fungible_info.symbol} + {tx.attributes.operation_type !== 'approve' && ( + +
{currencyFormat.format((action1 as Transfer).value)} +
+ )} +

+ )} +
+
+ { tx.attributes.operation_type === 'trade' && action2 && ( +
+ + {tx.relationships.chain.data.id} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${action2.fungible_info.symbol}&bgColor=%23cccccc&textColor=%23182449`; + }} + /> + + +

+ {(action2 as Transfer).direction === 'in' ? '+ ' : '- '} + {action2.quantity.float.toFixed(3) + ' '} + {action2.fungible_info.symbol} + +
{currencyFormat.format((action2 as Transfer).value)} +
+

+
+
+ )} +
+ + +
+ {tx.attributes.application_metadata?.icon?.url !== undefined && ( + + {tx.attributes.application_metadata.name} + + )} + {tx.attributes.application_metadata?.icon?.url === undefined && tx?.attributes?.application_metadata?.contract_address && ( + + + {getSplitedAddress(tx.attributes.application_metadata.contract_address)} + + + )} + + {tx.attributes.application_metadata?.name} + +
+
+ + + +

+ + {new Date(tx.attributes.mined_at).toLocaleDateString()}
+ {new Date(tx.attributes.mined_at).toLocaleTimeString()} +
+

+
+
+ +
+
+ ); +} diff --git a/src/components/ui/WalletTxEntitySkeleton.tsx b/src/components/ui/WalletTxEntitySkeleton.tsx new file mode 100644 index 00000000..473b52d4 --- /dev/null +++ b/src/components/ui/WalletTxEntitySkeleton.tsx @@ -0,0 +1,100 @@ +import React from "react"; +import { + IonGrid, + IonRow, + IonCol, + IonItem, + IonAvatar, + IonSkeletonText, + IonLabel, + IonText, +} from "@ionic/react"; + +interface Props { + itemCounts?: number; +} + +export const WalletTxEntitySkeleton: React.FC = ({ itemCounts }) => { + return ( + + + + {/* Skeleton item */} + {Array.from({ length: itemCounts ? itemCounts : 5 }).map( + (_, index) => ( + + + + +
+ + + +
+ +
+ + +
+ + + + +
+
+ + +
+ +
+
+ + +
+ +
+
+
+
+
+ ) + )} +
+
+
+ ); +}; diff --git a/src/constants/chains.ts b/src/constants/chains.ts index 9f672ff8..132eb3af 100644 --- a/src/constants/chains.ts +++ b/src/constants/chains.ts @@ -2,7 +2,7 @@ import { ChainId } from "@aave/contract-helpers"; // Define Network enum that represents supported networks export enum NETWORK { - bitcoin = 1000, + bitcoin = 128, mainnet = 1, polygon = 137, avalanche = 43114, @@ -14,8 +14,15 @@ export enum NETWORK { solana = 1399811149, base = 8453, scroll = 534352, + /** + * HERE ADD TESTNETS + */ + sepolia = 11155111, + goerli = 5, } +export type chainType = 'evm' | 'cosmos' | 'bitcoin' | 'solana' | 'polkadot'; + export interface IChain { id: number; value: string; @@ -24,219 +31,221 @@ export interface IChain { nativeSymbol?: string; logo?: string; testnet?: boolean; - type: 'evm'|'cosmos'|'bitcoin'|'solana'|'polkadot'; -}; + type: chainType; +} -const CHAINS_DISABLED = [ - NETWORK.cosmos, - // NETWORK.avalanche, - NETWORK.polkadot, -] +const CHAINS_DISABLED = [NETWORK.cosmos, NETWORK.polkadot, NETWORK.avalanche]; -export const CHAIN_AVAILABLES: IChain[] = [ +export const ALL_CHAINS: IChain[] = [ { id: NETWORK.mainnet, - value: 'eth', - name: 'Ethereum', - nativeSymbol: 'ETH', - logo: '/assets/cryptocurrency-icons/eth.svg', - rpcUrl: [ - {primary: false, url: 'https://eth-mainnet-public.unifra.io'}, - {primary: true, url: "https://rpc.ankr.com/eth"} - ] - .find( - (rpc) => rpc.primary - )?.url||'', - type: 'evm', + value: "eth", + name: "Ethereum", + nativeSymbol: "ETH", + logo: "/assets/cryptocurrency-icons/eth.svg", + rpcUrl: + [ + { primary: false, url: "https://eth-mainnet-public.unifra.io" }, + { primary: true, url: "https://rpc.ankr.com/eth" }, + ].find((rpc) => rpc.primary)?.url || "", + type: "evm", }, { id: NETWORK.binancesmartchain, - value: 'bsc', - name: 'Binance smart chain', - nativeSymbol: 'BNB', - logo: '/assets/cryptocurrency-icons/bnb.svg', - rpcUrl: [ - {primary: false, url: 'https://rpc.ankr.com/bsc'}, - {primary: true, url: "https://binance.llamarpc.com"} - ].find( - (rpc) => rpc.primary - )?.url||'', - type: 'evm', + value: "bsc", + name: "Binance smart chain", + nativeSymbol: "BNB", + logo: "/assets/cryptocurrency-icons/bnb.svg", + rpcUrl: + [ + { primary: false, url: "https://rpc.ankr.com/bsc" }, + { primary: true, url: "https://1rpc.io/bnb" }, + ].find((rpc) => rpc.primary)?.url || "", + type: "evm", }, - // { - // id: 250, - // value: 'fantom', - // name: 'Fantom', - // nativeSymbol: 'FTM', - // logo: '/assets/cryptocurrency-icons/eth.svg' - // }, - // { - // id: 43114, - // value: 'avalanche', - // name: 'Avalanche', - // nativeSymbol: 'AVAX' - // }, { id: NETWORK.polygon, - value: 'polygon', - name: 'Polygon', - nativeSymbol: 'MATIC', - logo: '/assets/cryptocurrency-icons/matic.svg', - rpcUrl: [ - {primary: false, url: 'https://polygon-rpc.com'}, - {primary: true, url: "https://rpc.ankr.com/polygon"} - ] - .find( - (rpc) => rpc.primary - )?.url||'', - type: 'evm', + value: "polygon", + name: "Polygon", + nativeSymbol: "MATIC", + logo: "/assets/cryptocurrency-icons/matic.svg", + rpcUrl: + [ + { primary: false, url: "https://polygon-rpc.com" }, + { primary: true, url: "https://rpc.ankr.com/polygon" }, + ].find((rpc) => rpc.primary)?.url || "", + type: "evm", }, { id: NETWORK.arbitrum, - value: 'arbitrum', - name: 'Arbitrum', - nativeSymbol: 'ARB', - logo: '/assets/icons/arb.svg', - rpcUrl: [ - {primary: true, url: 'https://arbitrum.llamarpc.com'}, - {primary: false, url: "https://rpc.ankr.com/arbitrum_one"} - ].find( - (rpc) => rpc.primary - )?.url||'', - type: 'evm', + value: "arbitrum", + name: "Arbitrum", + nativeSymbol: "ARB", + logo: "/assets/icons/arb.svg", + rpcUrl: + [ + { primary: true, url: "https://1rpc.io/arb" }, + { primary: false, url: "https://rpc.ankr.com/arbitrum_one" }, + ].find((rpc) => rpc.primary)?.url || "", + type: "evm", }, { id: NETWORK.optimism, - value: 'optimism', - name: 'Optimism', - nativeSymbol: 'OP', - logo: '/assets/icons/op.svg', - rpcUrl: [ - {primary: false, url:'https://mainnet.optimism.io'}, - {primary: true, url: "https://rpc.ankr.com/optimism"} - ] - .find( - (rpc) => rpc.primary - )?.url||'', - type: 'evm', + value: "optimism", + name: "Optimism", + nativeSymbol: "OP", + logo: "/assets/icons/op.svg", + rpcUrl: + [ + { primary: false, url: "https://mainnet.optimism.io" }, + { primary: true, url: "https://rpc.ankr.com/optimism" }, + ].find((rpc) => rpc.primary)?.url || "", + type: "evm", }, { id: NETWORK.base, - value: 'base', - name: 'Base', - nativeSymbol: 'ETH', - logo: '/assets/icons/base.svg', - rpcUrl: [ - {primary: false, url: 'https://endpoints.omniatech.io/v1/base/mainnet/public'}, - {primary: true, url: "https://base.llamarpc.com"} - ] - .find( - (rpc) => rpc.primary - )?.url||'', - type: 'evm', + value: "base", + name: "Base", + nativeSymbol: "ETH", + logo: "/assets/icons/base.svg", + rpcUrl: + [ + { + primary: false, + url: "https://endpoints.omniatech.io/v1/base/mainnet/public", + }, + { primary: true, url: "https://1rpc.io/base" }, + ].find((rpc) => rpc.primary)?.url || "", + type: "evm", }, { id: NETWORK.scroll, - value: 'scroll', - name: 'Scroll', - nativeSymbol: 'ETH', - logo: '/assets/icons/scroll.svg', - rpcUrl: [ - {primary: false, url: 'https://scroll-mainnet.public.blastapi.io'}, - {primary: true, url: "https://1rpc.io/scroll"} - ] - .find( - (rpc) => rpc.primary - )?.url||'', - type: 'evm', + value: "scroll", + name: "Scroll", + nativeSymbol: "ETH", + logo: "/assets/icons/scroll.svg", + rpcUrl: + [ + { primary: false, url: "https://scroll-mainnet.public.blastapi.io" }, + { primary: true, url: "https://1rpc.io/scroll" }, + ].find((rpc) => rpc.primary)?.url || "", + type: "evm", }, { id: NETWORK.cosmos, - value: 'cosmos', - name: 'Cosmos', - nativeSymbol: 'ATOM', - logo: '/assets/cryptocurrency-icons/atom.svg', - rpcUrl: [ - {primary: true, url:'https://rpc.cosmos.network:26657'}, - {primary: false, url: "https://cosmos-rpc.publicnode.com:443"}, - ] - .find( - (rpc) => rpc.primary - )?.url||'', - type: 'cosmos', + value: "cosmos", + name: "Cosmos", + nativeSymbol: "ATOM", + logo: "/assets/cryptocurrency-icons/atom.svg", + rpcUrl: + [ + { primary: true, url: "https://rpc.cosmos.network:26657" }, + { primary: false, url: "https://cosmos-rpc.publicnode.com:443" }, + ].find((rpc) => rpc.primary)?.url || "", + type: "cosmos", }, { id: NETWORK.avalanche, - value: 'avalanche', - name: 'Avalanche', - nativeSymbol: 'AVAX', - logo: '/assets/cryptocurrency-icons/avax.svg', - rpcUrl: [ - {primary: false, url:'https://avalanche-c-chain.publicnode.com'}, - {primary: true, url: "https://rpc.ankr.com/avalanche"} - ] - .find( - (rpc) => rpc.primary - )?.url||'', - type: 'evm', + value: "avalanche", + name: "Avalanche", + nativeSymbol: "AVAX", + logo: "/assets/cryptocurrency-icons/avax.svg", + rpcUrl: + [ + { primary: false, url: "https://avalanche-c-chain.publicnode.com" }, + { primary: true, url: "https://rpc.ankr.com/avalanche" }, + ].find((rpc) => rpc.primary)?.url || "", + type: "evm", + }, + { + id: NETWORK.solana, + value: "solana", + name: "Solana", + nativeSymbol: "SOL", + logo: "/assets/cryptocurrency-icons/sol.svg", + rpcUrl: + [{ primary: true, url: "https://api.devnet.solana.com" }].find( + (rpc) => rpc.primary + )?.url || "", + type: "solana", }, - // testnets - // { - // id: 5, - // value: 'eth_goerli', - // name: 'Goerli', - // testnet: true, - // rpcUrl: "https://rpc.ankr.com/eth_goerli", - // }, - // { - // id: 80001, - // value: 'polygon_mumbai', - // name: 'mumbai', - // testnet: true, - // rpcUrl: "https://rpc.ankr.com/polygon_mumbai", - // }, - // { - // id: 43113, - // value: 'avalanche_fuji', - // name: 'Fuji', - // }, { id: NETWORK.bitcoin, - name: 'Bitcoin', - value: 'bitcoin', - nativeSymbol: 'BTC', - rpcUrl: [ - {url: '84-30-190-204.cable.dynamic.v4.ziggo.nl', primary: false}, - {url: 'https://rpc.coinsdo.net/btc', primary: true} - ].find( - (rpc) => rpc.primary - )?.url||'', - type: 'bitcoin', - logo: '/assets/cryptocurrency-icons/btc.svg', + name: "Bitcoin", + value: "bitcoin", + nativeSymbol: "BTC", + rpcUrl: + [ + { url: "84-30-190-204.cable.dynamic.v4.ziggo.nl", primary: false }, + { url: "https://rpc.coinsdo.net/btc", primary: true }, + ].find((rpc) => rpc.primary)?.url || "", + type: "bitcoin", + logo: "/assets/cryptocurrency-icons/btc.svg", + }, + + /** + * HERE ADD TESTNETS + */ + { + id: NETWORK.sepolia, + value: "sepolia", + name: "sepolia", + nativeSymbol: "ETH", + logo: "/assets/cryptocurrency-icons/eth.svg", + rpcUrl: "https://rpc.ankr.com/eth_sepolia", + type: "evm", + testnet: true, }, { - id: NETWORK.solana, - value: 'solana', - name: 'Solana', - nativeSymbol: 'SOL', - logo: '/assets/cryptocurrency-icons/sol.svg', - rpcUrl: [ - {primary: true, url: "https://api.devnet.solana.com"} - ] - .find( - (rpc) => rpc.primary - )?.url||'', - type: 'solana', + id: NETWORK.goerli, + value: "eth_goerli", + name: "Goerli", + testnet: true, + logo: "/assets/cryptocurrency-icons/eth.svg", + rpcUrl: "https://rpc.ankr.com/eth_goerli", + type: "evm", }, -] -.filter(c => !CHAINS_DISABLED.includes(c.id)) as IChain[]; + // { + // id: 43113, + // value: 'avalanche_fuji', + // name: 'Fuji', + // }, +]; -const NETWORK_DEFAULT = NETWORK.optimism; -export const CHAIN_DEFAULT = CHAIN_AVAILABLES.find(c => c.id === NETWORK_DEFAULT) || { - id: NETWORK_DEFAULT, name: 'default', value: 'default', rpcUrl: '', type: 'evm' +export const CHAIN_AVAILABLES: IChain[] = ALL_CHAINS +.filter((c) => + // PROD: only mainnets + // LOCAL: only testnets + // DEV: all + process.env.NEXT_PUBLIC_APP_IS_PROD === "true" + ? !c.testnet + : process.env.NEXT_PUBLIC_APP_IS_LOCAL === "true" + ? c.testnet + : true +) +.filter((c) => !CHAINS_DISABLED.includes(c.id)) as IChain[]; + +// PROD: optimism +// LOCAL: sepolia +// DEV: optimism +const NETWORK_DEFAULT = + process.env.NEXT_PUBLIC_APP_IS_PROD === "true" + ? NETWORK.optimism + : process.env.NEXT_PUBLIC_APP_IS_LOCAL === "false" + ? NETWORK.optimism + : NETWORK.sepolia; + +export const CHAIN_DEFAULT = CHAIN_AVAILABLES.find( + (c) => c.id === NETWORK_DEFAULT +) || { + id: NETWORK_DEFAULT, + name: "default", + value: "default", + rpcUrl: "", + type: "evm", }; export const minBaseTokenRemainingByNetwork: Record = { [ChainId.optimism]: "0.0001", [ChainId.arbitrum_one]: "0.0001", -}; \ No newline at end of file +}; diff --git a/src/containers/AuthWithLinkContainer.tsx b/src/containers/AuthWithLinkContainer.tsx new file mode 100644 index 00000000..da696203 --- /dev/null +++ b/src/containers/AuthWithLinkContainer.tsx @@ -0,0 +1,62 @@ +import web3Connector from "@/servcies/firebase-web3-connect"; +import { FirebaseWeb3Connect } from "@hexaonelabs/firebase-web3connect"; +import { IonContent, IonPage, useIonAlert, useIonLoading } from "@ionic/react"; +import { useEffect } from "react"; + +export default function AuthWithLinkContainer() { + const [presentLoader, dismissLoader] = useIonLoading(); + const [presentAlert] = useIonAlert(); + + useEffect(() => { + const connectFromEmailLink = FirebaseWeb3Connect.isConnectWithLink(); + if (!connectFromEmailLink) { + presentAlert({ + backdropDismiss: false, + header: "Error", + subHeader: "Authentication failed.", + message: + "Unable to access to this page without email connection link. Restart application & try again.", + }); + return () => {}; + } + // display loader + presentLoader({ + message: "Authenticate with email link...", + }) + // call connetWithLink() + .then(async () => await web3Connector.connectWithLink()) + // hide loader + .then(async () => await dismissLoader()) + // display success message + .then(async () => + await presentAlert({ + backdropDismiss: false, + header: "Authentication", + subHeader: "Success", + message: "Close this page & go back to the app.", + }) + ) + // handle error + .catch(async (error) => { + // dismiss loader + await dismissLoader(); + // display alert + await presentAlert({ + backdropDismiss: false, + header: "Error", + subHeader: "Authentication failed.", + message: + (error as Error)?.message || + "Unable to authenticate. Restart application & try again.", + buttons: ["ok"], + }); + }); + return () => {}; + }, []); + + return ( + + + + ); +} diff --git a/src/containers/BuyWithFiat.tsx b/src/containers/BuyWithFiat.tsx index 6a720aea..1d5956dc 100644 --- a/src/containers/BuyWithFiat.tsx +++ b/src/containers/BuyWithFiat.tsx @@ -22,7 +22,7 @@ export default function BuyWithFiat(props: { -

Buy

+ Buy
(null); const chain = @@ -49,7 +48,7 @@ export const DepositContainer = (props: { const [presentSelectNetwork, dismissSelectNetwork] = useIonModal(() => ( )); @@ -119,7 +118,7 @@ export const DepositContainer = (props: { -

Deposit

+ Deposit
void; +}) { + const { setIsMagicMigrationModalOpen } = props; + + return ( + <> + + + Hexa Lite Update + + + + + + +

+ We're thrilled to announce the launch of our new Wallet + solution! 🎉 +

+ +

+ 100% non-custodial, now you have complete + control over your Wallet & can manage all your financial assets securely. +

+

+ Migration Guide with 2 steps +

+ + + + 1: Magic Link + + +
    +
  • + Go to{" "} + + https://wallet.magic.link + + . +
  • +
  • Connect to your Wallet with usual method.
  • +
  • Click you avatar on top left of the wallet card.
  • +
  • + Click on Wallet secret phrase. +
  • +
  • Get you Wallet secret phrase.
  • +
+
+
+ + + + 2: Hexa Lite + + +
    +
  • + Back to HexaLite App, click Connect button & select Connect Wallet âž¡ Import secret seed{" "} + option. +
  • +
  • Use you secret seed & connect with Google.
  • +
  • + Backup your secret seed phrase to ensure that you never + loose your wallet access. +
  • +
+
+
+ + +

+ Congrate! +
+ Now you're ready to enjoy DeFi services with full non-custodial Wallet. +

+

+ Hexa Lite Team +

+
+
+
+
+
+ + + setIsMagicMigrationModalOpen(false)} + > + OK + + + + + ); +} diff --git a/src/containers/TransferContainer.tsx b/src/containers/TransferContainer.tsx index ef42af0c..a92e7aad 100644 --- a/src/containers/TransferContainer.tsx +++ b/src/containers/TransferContainer.tsx @@ -7,41 +7,29 @@ import { IonCol, IonContent, IonFab, - IonFabButton, + IonFooter, IonGrid, IonHeader, IonIcon, IonInput, - IonItem, IonLabel, - IonList, - IonListHeader, IonModal, - IonPopover, IonRow, - IonText, + IonSpinner, IonTitle, IonToolbar, + useIonAlert, } from "@ionic/react"; -import { chevronDown, close, scan } from "ionicons/icons"; -import { SymbolIcon } from "../components/SymbolIcon"; -import { - Dispatch, - SetStateAction, - useEffect, - useMemo, - useRef, - useState, -} from "react"; -import { CHAIN_AVAILABLES, CHAIN_DEFAULT } from "@/constants/chains"; -import { getReadableAmount } from "@/utils/getReadableAmount"; -import { InputInputEventDetail, IonInputCustomEvent } from "@ionic/core"; -import { Html5Qrcode } from "html5-qrcode"; -const isNumberKey = (evt: React.KeyboardEvent) => { - var charCode = evt.which ? evt.which : evt.keyCode; - return !(charCode > 31 && (charCode < 48 || charCode > 57)); -}; +import { useEffect, useRef, useState } from "react"; + +import { Html5Qrcode } from "html5-qrcode"; +import { CheckIcon } from "@/components/ui/CheckIcon/CheckIcon"; +import { CrossIcon } from "@/components/ui/CrossIcon/CrossIcon"; +import { close, scan } from "ionicons/icons"; +import { InputAssetWithDropDown } from "@/components/ui/InputAssetWithDropDown/InputAssetWithDropDown"; +import { WarningBox } from "@/components/WarningBox"; +import { OverlayEventDetail } from "@ionic/react/dist/types/components/react-component-lib/interfaces"; const scanQrCode = async ( html5QrcodeScanner: Html5Qrcode @@ -65,7 +53,8 @@ const scanQrCode = async ( // get prefered back camera if available or load the first one const cameraId = - cameras.find((c) => c.label.toLowerCase().includes("rear"))?.id || cameras[0].id; + cameras.find((c) => c.label.toLowerCase().includes("rear"))?.id || + cameras[0].id; console.log(">>", cameraId, cameras); // start scanner const config = { @@ -167,224 +156,9 @@ const ScanModal = (props: { ); }; -const InputAssetWithDropDown = (props: { - assets: IAsset[]; - inputFromAmount: number; - setInputFromAmount: Dispatch>; - setInputFromAsset: Dispatch>; -}) => { - const { assets, setInputFromAmount, inputFromAmount, setInputFromAsset } = - props; - const [errorMessage, setErrorMessage] = useState(); - const [selectedAsset, setSelectedAsset] = useState(assets[0]); - const [isLoading, setIsLoading] = useState(false); - const [popoverOpen, setPopoverOpen] = useState(false); - // const popover = useRef(null); - - useEffect(() => { - if (selectedAsset) { - setInputFromAsset(selectedAsset); - } - return () => {}; - }); - - const maxBalance = useMemo(() => { - // round to the lower tenth - return Math.floor(selectedAsset?.balance * 10000) / 10000; - }, [selectedAsset]); - - const handleInputChange = async ( - e: IonInputCustomEvent - ) => { - let value = Number((e.target as any).value || 0); - if (maxBalance && value > maxBalance) { - (e.target as any).value = maxBalance; - value = maxBalance; - } - if (value <= 0) { - setErrorMessage(() => undefined); - // UI loader control - setIsLoading(() => false); - return; - } - setInputFromAmount(() => value); - setErrorMessage(() => undefined); - // UI loader control - setIsLoading(() => false); - }; - - return ( - <> - - - -
{ - $event.stopPropagation(); - // set position - // popover.current!.event = $event; - // open popover - setPopoverOpen(() => true); - }} - > -
- - -
- -
- -

{selectedAsset?.symbol}

-
- { - $event.stopPropagation(); - setInputFromAmount(() => selectedAsset?.balance || 0); - }} - > - Max: {maxBalance} - -
-
-
- -
- { - if (isNumberKey(e)) { - setIsLoading(() => true); - } - }} - onIonInput={(e) => handleInputChange(e)} - /> -
-
-
-
- - setPopoverOpen(false)} - className="modalAlert" - > - - -

Available assets

-
-
- - {assets - .filter((a) => a.balance > 0) - .map((asset, index) => ( - { - setPopoverOpen(() => false); - setSelectedAsset(asset); - setInputFromAsset(asset); - setInputFromAmount(() => 0); - setErrorMessage(() => undefined); - // setQuote(() => undefined); - console.log({ selectedAsset }); - }} - > -
- -
- - {asset.symbol} -
- - - { - CHAIN_AVAILABLES.find((c) => c.id === asset?.chain?.id) - ?.name - } - - -
-
- {Number(asset?.balance).toFixed(6)} -
- - - {getReadableAmount( - +asset?.balance, - Number(asset?.priceUsd), - "No deposit" - )} - - -
-
- ))} -
-
- - ); -}; - export const TransferContainer = (props: { dismiss: () => Promise }) => { - const { - walletAddress, - isMagicWallet, - assets, - loadAssets, - transfer, - switchNetwork, - currentNetwork, - } = Store.useState(getWeb3State); + const { assets, loadAssets, transfer, switchNetwork, currentNetwork } = + Store.useState(getWeb3State); const [inputFromAmount, setInputFromAmount] = useState(0); const [inputToAddress, setInputToAddress] = useState( undefined @@ -392,43 +166,93 @@ export const TransferContainer = (props: { dismiss: () => Promise }) => { const [inputFromAsset, setInputFromAsset] = useState( undefined ); - const [isScanModalOpen, setIsScanModalOpen] = useState(false); - const [isLoading, setIsLoading] = useState(false); + const [isScanModalOpen, setIsScanModalOpen] = useState(false); + const [isLoading, setIsLoading] = useState(false); + const [isSuccess, setIsSuccess] = useState(undefined); + const [errorMessage, setErrorMessage] = useState( + undefined + ); + const [openConfirm, closeConfirm] = useIonAlert() const isValid = - inputFromAmount > 0 && + inputFromAmount > 0 && + inputFromAmount <= (inputFromAsset?.balance || 0) && inputToAddress && inputToAddress.length > 0 && inputFromAsset?.contractAddress; const handleSend = async () => { - console.log("handleSend: ", { + console.log("[INFO] handleSend: ", { inputFromAmount, inputToAddress, inputFromAsset, }); + const {detail: {role}}: CustomEvent> = await new Promise(resolve => { + openConfirm({ + header: 'Confirm', + message: ` + You are about to send ${inputFromAmount} ${inputFromAsset?.symbol} to the EVM ${inputFromAsset?.chain?.name} network address ${inputToAddress}. + `, + buttons: [ + { + text: 'cancel', + role: 'cancel', + cssClass: 'danger' + }, + { + text: 'OK', + role: 'ok' + } + ], + onDidDismiss: ($event)=> { + resolve($event); + } + }); + + }); + if (role !== 'ok') { + return; + } if (inputFromAmount && inputToAddress && inputFromAsset?.contractAddress) { - if ( - inputFromAsset?.chain?.id && - inputFromAsset?.chain?.id !== currentNetwork - ) { - await switchNetwork(inputFromAsset?.chain?.id); + try { + if ( + inputFromAsset?.chain?.id && + inputFromAsset?.chain?.id !== currentNetwork + ) { + await switchNetwork(inputFromAsset?.chain?.id); + } + await transfer({ + inputFromAmount, + inputToAddress, + inputFromAsset: inputFromAsset.contractAddress, + }); + // toggle state + setIsSuccess(true); + setIsLoading(false); + setErrorMessage(undefined); + await Promise.all([ + // ensure waiting to display check animation + new Promise((resolve) => setTimeout(resolve, 3000)), + // finalize with reload asset list + loadAssets(true), + ]); + // close modal + props.dismiss(); + } catch (error: any) { + // toggle state + setIsSuccess(false); + setIsLoading(false); + setErrorMessage(error?.message || "Error while transfer token"); } - await transfer({ - inputFromAmount, - inputToAddress, - inputFromAsset: inputFromAsset.contractAddress, - }); - // finalize with reload asset list - await loadAssets(true); } }; + return ( <> -

Send token

+ Send token
Promise }) => {
- - - - -

- Currently only support native token transfer -

-
-
- - + {isSuccess === undefined && ( + <> + + + +

Token

+
+ a.balance > 0)} + inputFromAmount={inputFromAmount} + setInputFromAmount={setInputFromAmount} + setInputFromAsset={setInputFromAsset} + /> +
+ + +

EVM Destination address

+
+ + + + { + setInputToAddress( + () => $event.detail.value || undefined + ); + }} + /> + + + { + setIsScanModalOpen(() => true); + }} + > + + + + + + { + if (data) { + setInputToAddress(() => data); + } + setIsScanModalOpen(() => false); + }} + /> +
+
+ + )} + + {isSuccess === true && ( + <> + -

Token

-
- a.type === "NATIVE")} - inputFromAmount={inputFromAmount} - setInputFromAmount={setInputFromAmount} - setInputFromAsset={setInputFromAsset} - /> -
- - + + +
+ + )} + + {isSuccess === false && errorMessage && ( + <> + -

Destination address

- - - - - { - setInputToAddress( - () => $event.detail.value || undefined - ); - }} - /> - - - { - setIsScanModalOpen(() => true); - }} - > - - - - - - { - if (data) { - setInputToAddress(() => data); - } - setIsScanModalOpen(() => false); - }} - /> - - + + + +
+ + )} + + {inputFromAmount > (inputFromAsset?.balance || 0) && ( + <> + + + +

+ You don't have enough funds to complete the transaction. +

+
+
+
+ + )} +
+
+ + + {isSuccess === false && ( + { + props.dismiss() + }} + >Cancel and retry + )} + + {isSuccess === undefined && ( + <> Promise }) => { setIsLoading(false); }} > - Send + {isLoading === true ? ( + <> + Waiting + confirmation + + ) : ( + "Send" + )} - - - - + + )} + {isSuccess === true && ( + <> + { + props.dismiss(); + }} + > + OK + + + )} + + ); }; diff --git a/src/containers/desktop/SwapContainer.tsx b/src/containers/desktop/SwapContainer.tsx index e22f94ad..4b01ed65 100644 --- a/src/containers/desktop/SwapContainer.tsx +++ b/src/containers/desktop/SwapContainer.tsx @@ -7,6 +7,7 @@ import { useIonToast, } from "@ionic/react"; import { + HiddenUI, RouteExecutionUpdate, WidgetConfig, WidgetEvent, @@ -16,7 +17,7 @@ import type { Route } from "@lifi/sdk"; import { useEffect } from "react"; import { useLoader } from "../../context/LoaderContext"; import { CHAIN_AVAILABLES, CHAIN_DEFAULT, NETWORK } from "../../constants/chains"; -import { ethers } from "ethers"; +import { Wallet, ethers } from "ethers"; import { LiFiWidgetDynamic } from "../../components/LiFiWidgetDynamic"; import { LIFI_CONFIG } from "../../servcies/lifi.service"; // import { SquidWidgetDynamic } from "@/components/SquidWidgetDynamic"; @@ -28,7 +29,7 @@ import { getWeb3State } from "@/store/selectors"; export default function SwapContainer() { const { - web3Provider, + signer, currentNetwork, walletAddress, connectWallet, @@ -98,10 +99,9 @@ export default function SwapContainer() { const chain = CHAIN_AVAILABLES.find((chain) => chain.id === currentNetwork); switch (true) { case chain?.type === "evm": { - const signer = - web3Provider instanceof ethers.providers.Web3Provider && walletAddress - ? web3Provider?.getSigner() - : undefined; + const defaultChain = process.env.NEXT_PUBLIC_APP_IS_LOCAL === 'true' + ? NETWORK.goerli + : currentNetwork || CHAIN_DEFAULT.id; // load environment config const widgetConfig: WidgetConfig = { ...LIFI_CONFIG, @@ -111,12 +111,11 @@ export default function SwapContainer() { try { await displayLoader(); await connectWallet(); - if (!(web3Provider instanceof ethers.providers.Web3Provider)) { + if (!(signer instanceof ethers.Signer)) { throw new Error( - "[ERROR] Only support ethers.providers.Web3Provider" + "[ERROR] Only support ethers.Signer" ); } - const signer = web3Provider?.getSigner(); console.log("signer", signer); if (!signer) { throw new Error("Signer not found"); @@ -127,22 +126,7 @@ export default function SwapContainer() { } catch (error: any) { // Log any errors that occur during the connection process hideLoader(); - await presentToast({ - message: `[ERROR] Connect Failed with reason: ${ - error?.message || error - }`, - color: "danger", - buttons: [ - { - text: "x", - role: "cancel", - handler: () => { - dismissToast(); - }, - }, - ], - }); - throw new Error("handleConnect:" + error?.message); + return error; } }, disconnect: async () => { @@ -171,12 +155,19 @@ export default function SwapContainer() { }); } }, - signer, + signer: signer || undefined, }, + hiddenUI: [ + ...(LIFI_CONFIG?.hiddenUI as any[]), + HiddenUI.WalletMenu, + HiddenUI.ToAddress, + // HiddenUI.DrawerButton, + // HiddenUI.DrawerCloseButton + ], // set source chain to Polygon - fromChain: currentNetwork || CHAIN_DEFAULT.id, + fromChain: defaultChain, // set destination chain to Optimism - toChain: currentNetwork || CHAIN_DEFAULT.id, + toChain: defaultChain, // set source token to ETH (Ethereum) fromToken: "0x0000000000000000000000000000000000000000", }; diff --git a/src/containers/desktop/TokenDetailDesktopContainer.tsx b/src/containers/desktop/TokenDetailDesktopContainer.tsx index d6468edb..bb111a1e 100644 --- a/src/containers/desktop/TokenDetailDesktopContainer.tsx +++ b/src/containers/desktop/TokenDetailDesktopContainer.tsx @@ -6,6 +6,8 @@ import { IonAvatar, IonBadge, IonButton, + IonCard, + IonCardContent, IonChip, IonCol, IonContent, @@ -33,16 +35,28 @@ import { ethers } from "ethers"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { CHAIN_AVAILABLES } from "@/constants/chains"; -import { airplane, chevronDown, close, closeSharp, download, paperPlane, repeat } from "ionicons/icons"; -import { DataItem } from "@/components/ui/LightChart"; -import { getTokenHistoryPrice } from "@/utils/getTokenHistoryPrice"; -import { TokenInfo, getTokenInfo } from "@/utils/getTokenInfo"; +import { + airplane, + chevronDown, + close, + closeSharp, + download, + paperPlane, + repeat, +} from "ionicons/icons"; +import { DataItem, SeriesData, SeriesMarkerData } from "@/components/ui/LightChart"; +import { TokenInfo } from '@/servcies/coingecko.service'; import { numberFormat } from "@/utils/numberFormat"; import { currencyFormat } from "@/utils/currencyFormat"; import { TokenDetailDescription } from "@/components/ui/TokenDetailDescription"; import { TokenDetailMarketDetail } from "@/components/ui/TokenDetailMarketData"; import { isStableAsset } from "@/utils/isStableAsset"; import { Currency } from "@/components/ui/Currency"; +import { NetworkTokenDetailCard } from "@/components/ui/NetworkTokenDetailCard/NetworkTokenDetailCard"; +import { getAllocationRatioInPercent } from "@/utils/getAllocationRatioInPercent"; +import { formatTxsAsSeriemarker } from "@/servcies/zerion.service"; +import { CoingeckoAPI } from "@/servcies/coingecko.service"; +import { TxsList } from "@/components/ui/TsxList/TxsList"; const LightChart = lazy(() => import("@/components/ui/LightChart")); @@ -66,25 +80,29 @@ export const TokenDetailDesktopContainer = (props: { setState: (state: any) => void; }) => { const { data, dismiss } = props; - const { walletAddress } = Store.useState(getWeb3State); - const [dataChartHistory, setDataChartHistory] = useState([]); + const { walletAddress, txs } = Store.useState(getWeb3State); + const [dataChartHistory, setDataChartHistory] = useState(new Map()); + const [txsChartHistory, setTxsChartHistory] = useState(new Map()); const [tokenInfo, setTokenInfo] = useState(undefined); const [isInfoOpen, setInfoOpen] = useState(false); + const [isAccOpen, setIsAccOpen] = useState(false); + const [tokentPrice, setTokentPrice] = useState(tokenInfo?.market_data?.current_price?.usd || + data.priceUsd); + + const filteredTxs = txs.filter((tx) => { + return tx.attributes.transfers.some((transfer) => { + return transfer.fungible_info.symbol === data.symbol; + }); + }); useEffect(() => { if (!walletAddress) return; - getTxsFromAddress(walletAddress); - getTokenHistoryPrice(props.data.symbol).then((prices) => { - const data: DataItem[] = prices.map(([time, value]: string[]) => { - const dataItem = { - time: new Date(time).toISOString().split("T").shift() || "", - value: Number(value), - }; - return dataItem; - }); - setDataChartHistory(() => data.slice(0, data.length - 1)); + const TxsSerie = formatTxsAsSeriemarker(filteredTxs); + setTxsChartHistory(()=> TxsSerie); + CoingeckoAPI.getTokenHistoryPrice(props.data.symbol).then((prices) => { + setDataChartHistory(() => prices); }); - getTokenInfo(props.data.symbol).then((tokenInfo) => + CoingeckoAPI.getTokenInfo(props.data.symbol).then((tokenInfo) => setTokenInfo(() => tokenInfo) ); }, [walletAddress]); @@ -123,8 +141,11 @@ export const TokenDetailDesktopContainer = (props: { > - - + + {data.symbol} { @@ -157,7 +181,8 @@ export const TokenDetailDesktopContainer = (props: {

- { tokenInfo?.market_data?.price_change_percentage_24h_in_currency?.usd && ( + {tokenInfo?.market_data + ?.price_change_percentage_24h_in_currency?.usd && ( - ({tokenInfo.market_data.price_change_percentage_24h_in_currency.usd.toFixed( - 2 - )} - % /24h) + ( + {tokenInfo.market_data.price_change_percentage_24h_in_currency.usd.toFixed( + 2 + )} + % /24h) )}

{isStableAsset(data.symbol) ? ( - { - setInfoOpen(()=> true); - }} > + onClick={() => { + setInfoOpen(() => true); + }} + > stable - ) : ''} - - - - { - props.setState({ isTransferModalOpen: true }); - }}> - - Send - - { - props.setState({ isDepositModalOpen: true }); - }}> - - Deposit - - - - - - - -
- -
- - - -

Networks details

-
-
- {data.assets - .sort((a, b) => - a.chain && b.chain - ? a.chain.id - b.chain.id - : a.balance + b.balance - ) - .map((token, index) => ( - - - c.id === token.chain?.id - )?.logo - } - alt={token.symbol} - style={{ transform: "scale(1.01)" }} - onError={(event) => { - ( - event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${token.symbol}&bgColor=%23000000&textColor=%23182449`; - }} - /> - - -

{token.chain?.name}

-
- - { numberFormat.format(token.balance)} {token.symbol} -
- - - - - -
-
- ))} -
-
-
-
-
-
+ ) : ( + "" + )} +
+
+
+ + + + + { + props.setState({ isTransferModalOpen: true }); + }} + > + + Send + + { + props.setState({ isDepositModalOpen: true }); + }} + > + + Deposit + + + + + + + +
setIsAccOpen(()=> !isAccOpen)}> + + {isAccOpen ? 'Hide' : 'Display'} Wallet details + + +
+ + + {data.assets + .sort((a, b) => + a.chain && b.chain + ? a.chain.id - b.chain.id + : a.balance + b.balance + ) + .map((token, index) => ( + + + + ))} + + +
+
- + - - }> + + + + + } + > -

+

{props.data.symbol} / USD - 1 {data.symbol} = {currencyFormat.format(tokenInfo?.market_data?.current_price?.usd||data.priceUsd)} + 1 {data.symbol} ={" "} + {currencyFormat.format( + tokentPrice + )}

- + { + if (action === 'leave') { + setTokentPrice(tokenInfo?.market_data?.current_price?.usd || + data.priceUsd); + } else { + setTokentPrice((payload as any)?.price) + } + }} />
+ {/* TXs list if existing tx */} + {filteredTxs.length > 0 + ? ( + + + +

Transaction history

+
+
+ +
+
) + : null} + {tokenInfo && ( - + - + @@ -328,7 +379,12 @@ export const TokenDetailDesktopContainer = (props: {

Market datas from Coingeeko API -
Last update: {new Date(tokenInfo?.market_data?.last_updated||new Date ().toLocaleDateString()).toLocaleString()} +
+ Last update:{" "} + {new Date( + tokenInfo?.market_data?.last_updated || + new Date().toLocaleDateString() + ).toLocaleString()}

@@ -355,7 +411,7 @@ export const TokenDetailDesktopContainer = (props: { setInfoOpen(false) } + onClick={() => setInfoOpen(false)} > @@ -363,27 +419,31 @@ export const TokenDetailDesktopContainer = (props: { -

- What is a stablecoin? -

+

What is a stablecoin?

- Stablecoins are a type of cryptocurrency whose value is pegged to another asset, such as a fiat currency or gold, to maintain a stable price. + Stablecoins are a type of cryptocurrency whose value is + pegged to another asset, such as a fiat currency or gold, to + maintain a stable price.

- They strive to provide an alternative to the high volatility of popular cryptocurrencies, making them potentially more suitable for common transactions. + They strive to provide an alternative to the high volatility + of popular cryptocurrencies, making them potentially more + suitable for common transactions.

- Stablecoins can be utilized in various blockchain-based financial services and can even be used to pay for goods and services. + Stablecoins can be utilized in various blockchain-based + financial services and can even be used to pay for goods and + services.

diff --git a/src/containers/desktop/WalletDesktopContainer.tsx b/src/containers/desktop/WalletDesktopContainer.tsx index 02ec8382..ff445eaf 100644 --- a/src/containers/desktop/WalletDesktopContainer.tsx +++ b/src/containers/desktop/WalletDesktopContainer.tsx @@ -1,9 +1,10 @@ -import { card, download, eyeOffOutline, eyeOutline, paperPlane } from "ionicons/icons"; +import { card, download, eyeOffOutline, eyeOutline, grid, gridOutline, gridSharp, image, list, logoUsd, paperPlane, ticket, ticketOutline, time } from "ionicons/icons"; import WalletBaseComponent, { WalletComponentProps, } from "../../components/base/WalletBaseContainer"; import { IonButton, + IonButtons, IonCard, IonCardContent, IonCol, @@ -13,9 +14,11 @@ import { IonModal, IonRow, IonSearchbar, + IonSegment, + IonSegmentButton, IonText, } from "@ionic/react"; -import ConnectButton from "@/components/ConnectButton"; +import ConnectButton from "@/components/ui/ConnectButton"; import Store from "@/store"; import { getAppSettings, getWeb3State } from "@/store/selectors"; import { TokenDetailDesktopContainer } from "./TokenDetailDesktopContainer"; @@ -24,6 +27,10 @@ import { WalletAssetEntity } from "@/components/ui/WalletAssetEntity"; import { Currency } from "@/components/ui/Currency"; import { patchAppSettings } from "@/store/actions"; import { ToggleHideCurrencyAmount } from "@/components/ui/ToggleHideCurrencyAmount"; +import { WalletTxEntity } from "@/components/ui/WalletTxEntity"; +import { TxsList } from "@/components/ui/TsxList/TxsList"; +import { NftsList } from "@/components/ui/NftsList/NftsList"; +import { getAllocationRatioInPercent } from "@/utils/getAllocationRatioInPercent"; class WalletDesktopContainer extends WalletBaseComponent { constructor(props: WalletComponentProps) { @@ -128,7 +135,7 @@ class WalletDesktopContainer extends WalletBaseComponent { > { super.handleBuyWithFiat(true); }} @@ -170,7 +177,7 @@ class WalletDesktopContainer extends WalletBaseComponent { > { super.handleDepositClick() }} @@ -179,7 +186,7 @@ class WalletDesktopContainer extends WalletBaseComponent { - + @@ -219,108 +226,170 @@ class WalletDesktopContainer extends WalletBaseComponent { {/* wrapper to display card with assets items */} {this.state.assetGroup.length > 0 && ( <> - - + + { this.handleSearchChange(e); }} /> + +
+ this.setState(state => ({ + ...state, + currentView: 'tokens' + }))}> + + + this.setState(state => ({ + ...state, + currentView: 'nfts' + }))}> + + + this.setState(state => ({ + ...state, + currentView: 'txs' + }))}> + + +
+
- - - - - - - - Asset - - - - - - - - - Price - - - - - Balance - - - - - Value - - - - - - - - {this.state.assetGroup - .filter((asset) => - this.state.filterBy - ? asset.symbol - .toLowerCase() - .includes(this.state.filterBy.toLowerCase()) - : true - ) - .map((asset, index) => { - return ( - - this.handleTokenDetailClick(asset) - } - asset={asset} - key={index} - /> - ); - })} + + {/* tokens view */} + {this.state.currentView === 'tokens' && ( + + + {/* Header List */} + + + + + Asset + + + + + + + + + Wallet % + + + + + Price USD + + + + + Balance + + + + + Value USD + + + + + + + + {this.state.assetGroup + .filter((asset) => + this.state.filterBy + ? asset.symbol + .toLowerCase() + .includes(this.state.filterBy.toLowerCase()) + : true + ) + .map((asset, index) => { + return ( + + this.handleTokenDetailClick(asset) + } + asset={asset} + allocationRatioInPercent={getAllocationRatioInPercent(asset.balanceUsd, this.state.totalBalance)} + key={index} + /> + ); + })} - {(this.state.assetGroup.filter((asset) => - this.state.filterBy - ? asset.symbol - .toLowerCase() - .includes(this.state.filterBy.toLowerCase()) - : true - ).length === 0) && ( -

Assets not found in your wallet

- )} -
+ {(this.state.assetGroup.filter((asset) => + this.state.filterBy + ? asset.symbol + .toLowerCase() + .includes(this.state.filterBy.toLowerCase()) + : true + ).length === 0) && ( +

Assets not found in your wallet

+ )} +
+ )} + {/* txs view */} + {this.state.currentView === 'txs' && ( + + + + )} + {/* nfts view */} + {this.state.currentView === 'nfts' && ( + + + + )}
)} diff --git a/src/containers/index.ts b/src/containers/index.ts new file mode 100644 index 00000000..d637e335 --- /dev/null +++ b/src/containers/index.ts @@ -0,0 +1,20 @@ + +import { lazy } from "react"; + +export const LeaderboardContainer = lazy(() => import("@/containers/desktop/LeaderboardContainer")); +export const WalletDesktopContainer = lazy(() => import("@/containers/desktop/WalletDesktopContainer")); +export const SwapContainer = lazy(() => import("@/containers/desktop/SwapContainer")); +export const DefiContainer = lazy(() => import("@/containers/desktop/DefiContainer")); +export const EarnContainer = lazy(() => import("@/containers/desktop/EarnContainer")); +export const AvailablePlatformsContainer = lazy(() => import("@/containers/desktop/AvailablePlatformsContainer")); +export const AboutContainer = lazy(() => import("@/containers/desktop/AboutContainer")); +export const BuyWithFiatContainer = lazy(() => import("@/containers/BuyWithFiat")); +export const WalletMobileContainer = lazy( + () => import("@/containers/mobile/WalletMobileContainer") +); +export const WelcomeMobileContainer = lazy( + () => import("@/containers/mobile/WelcomeMobileContainer") + ); +export const MagicMigrationContainer = lazy(()=> import('@/containers/MagicMigrationContainer')) + +export const AuthWithLinkContainer = lazy(() => import('@/containers/AuthWithLinkContainer')); diff --git a/src/containers/mobile/SwapMobileContainer.tsx b/src/containers/mobile/SwapMobileContainer.tsx index a542dffe..e6551021 100644 --- a/src/containers/mobile/SwapMobileContainer.tsx +++ b/src/containers/mobile/SwapMobileContainer.tsx @@ -44,7 +44,7 @@ export const SwapMobileContainer = (props: { dismiss: ()=> void; }) => { const { - web3Provider, + signer, currentNetwork, walletAddress, connectWallet, @@ -88,10 +88,6 @@ export const SwapMobileContainer = (props: { return () => widgetEvents.all.clear(); }, [widgetEvents]); - const signer = - web3Provider instanceof ethers.providers.Web3Provider && walletAddress - ? web3Provider?.getSigner() - : undefined; // load environment config const widgetConfig: WidgetConfig = { ...LIFI_CONFIG, @@ -102,6 +98,7 @@ export const SwapMobileContainer = (props: { ...(LIFI_CONFIG?.hiddenUI as any[]), HiddenUI.History, HiddenUI.WalletMenu, + HiddenUI.ToAddress, // HiddenUI.DrawerButton, // HiddenUI.DrawerCloseButton ], @@ -111,12 +108,6 @@ export const SwapMobileContainer = (props: { try { await displayLoader(); await connectWallet(); - if (!(web3Provider instanceof ethers.providers.Web3Provider)) { - throw new Error( - "[ERROR] Only support ethers.providers.Web3Provider" - ); - } - const signer = web3Provider?.getSigner(); console.log("signer", signer); if (!signer) { throw new Error("Signer not found"); @@ -127,22 +118,7 @@ export const SwapMobileContainer = (props: { } catch (error: any) { // Log any errors that occur during the connection process hideLoader(); - await presentToast({ - message: `[ERROR] Connect Failed with reason: ${ - error?.message || error - }`, - color: "danger", - buttons: [ - { - text: "x", - role: "cancel", - handler: () => { - dismissToast(); - }, - }, - ], - }); - throw new Error("handleConnect:" + error?.message); + return error; } }, disconnect: async () => { @@ -171,7 +147,7 @@ export const SwapMobileContainer = (props: { }); } }, - signer, + signer: signer || undefined, }, // set source chain to Polygon fromChain: props?.token?.assets?.[0]?.chain?.id || CHAIN_DEFAULT.id, diff --git a/src/containers/mobile/TokenDetailMobileContainer.tsx b/src/containers/mobile/TokenDetailMobileContainer.tsx index 7bc21111..b872baa3 100644 --- a/src/containers/mobile/TokenDetailMobileContainer.tsx +++ b/src/containers/mobile/TokenDetailMobileContainer.tsx @@ -34,13 +34,18 @@ import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { CHAIN_AVAILABLES } from "@/constants/chains"; import { airplane, chevronDown, close, closeSharp, download, paperPlane } from "ionicons/icons"; -import { DataItem } from "@/components/ui/LightChart"; -import { getTokenHistoryPrice } from "@/utils/getTokenHistoryPrice"; -import { TokenInfo, getTokenInfo } from "@/utils/getTokenInfo"; +import { DataItem, SeriesData, SeriesMarkerData } from "@/components/ui/LightChart"; +import { TokenInfo } from '@/servcies/coingecko.service'; import { TokenDetailMarketDetail } from "@/components/ui/TokenDetailMarketData"; import { TokenDetailDescription } from "@/components/ui/TokenDetailDescription"; import { isStableAsset } from "@/utils/isStableAsset"; import { Currency } from "@/components/ui/Currency"; +import { NetworkTokenDetailCard } from "@/components/ui/NetworkTokenDetailCard/NetworkTokenDetailCard"; +import { getAllocationRatioInPercent } from "@/utils/getAllocationRatioInPercent"; +import { formatTxsAsSeriemarker } from "@/servcies/zerion.service"; +import { CoingeckoAPI } from "@/servcies/coingecko.service"; +import { TxsList } from "@/components/ui/TsxList/TxsList"; +import { currencyFormat } from "@/utils/currencyFormat"; const LightChart = lazy(() => import("@/components/ui/LightChart")); @@ -65,25 +70,31 @@ export const TokenDetailMobileContainer = (props: { setIsSwapModalOpen: (state: boolean) => void; }) => { const { data, dismiss } = props; - const { walletAddress } = Store.useState(getWeb3State); - const [dataChartHistory, setDataChartHistory] = useState([]); + const { walletAddress, txs } = Store.useState(getWeb3State); + const [dataChartHistory, setDataChartHistory] = useState(new Map()); + const [txsChartHistory, setTxsChartHistory] = useState(new Map()); const [tokenInfo, setTokenInfo] = useState(undefined); const [isInfoOpen, setInfoOpen] = useState(false); + const [isAccOpen, setIsAccOpen] = useState(false); + const [chartInterval, setChartInterval] = useState< "1D"|"1W"|"1M"|"1Y">('1M') + + const filteredTxs = txs.filter((tx) => { + return tx.attributes.transfers.some((transfer) => { + return transfer.fungible_info.symbol === data.symbol; + }); + }); + + const [tokentPrice, setTokentPrice] = useState(tokenInfo?.market_data?.current_price?.usd || + data.priceUsd); useEffect(() => { if (!walletAddress) return; - getTxsFromAddress(walletAddress); - getTokenHistoryPrice(props.data.symbol).then((prices) => { - const data: DataItem[] = prices.map(([time, value]: string[]) => { - const dataItem = { - time: new Date(time).toISOString().split("T").shift() || "", - value: Number(value), - }; - return dataItem; - }); - setDataChartHistory(() => data.slice(0, data.length - 1)); + const TxsSerie = formatTxsAsSeriemarker(filteredTxs); + setTxsChartHistory(()=> TxsSerie); + CoingeckoAPI.getTokenHistoryPrice(props.data.symbol).then((prices) => { + setDataChartHistory(() => prices); }); - getTokenInfo(props.data.symbol).then((tokenInfo) => + CoingeckoAPI.getTokenInfo(props.data.symbol).then((tokenInfo) => setTokenInfo(() => tokenInfo) ); }, [walletAddress]); @@ -130,7 +141,7 @@ export const TokenDetailMobileContainer = (props: { - + -

+

{data.balance.toFixed(6)} {data.symbol}

@@ -195,82 +206,40 @@ export const TokenDetailMobileContainer = (props: { ) : ''}
- - - - - -
- -
- - - -

Networks details

-
-
- {data.assets - .sort((a, b) => - a.chain && b.chain - ? a.chain.id - b.chain.id - : a.balance + b.balance - ) - .map((token, index) => ( - - - c.id === token.chain?.id - )?.logo - } - alt={token.symbol} - style={{ transform: "scale(1.01)" }} - onError={(event) => { - ( - event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${token.symbol}&bgColor=%23000000&textColor=%23182449`; - }} - /> - - -

{token.chain?.name}

-
- - {token.balance.toFixed(6)} {token.symbol} -
- - - - - -
-
- ))} -
-
-
-
-
-
+
+
+
+ + + + + + +
setIsAccOpen(()=> !isAccOpen)}> + + {isAccOpen ? 'Hide' : 'Display'} Wallet details + + +
+ + + {data.assets + .sort((a, b) => + a.chain && b.chain + ? a.chain.id - b.chain.id + : a.balance + b.balance + ) + .map((token, index) => ( + + + + ))} + + +
+
@@ -281,24 +250,85 @@ export const TokenDetailMobileContainer = (props: { .....}> - - - - 1 {data.symbol} = $ {(tokenInfo?.market_data?.current_price?.usd||data.priceUsd).toFixed(2)} - - + + + + +

+ {props.data.symbol} / USD + + 1 {data.symbol} ={" "} + {currencyFormat.format( + tokentPrice + )} + +

+
+
+ +
+ + {["1D", "1W", "1M", "1Y"].map((interval: any, index: number) => ( + setChartInterval(()=> interval)} + > + {interval} + + ))} + +
+
+
+
+ { + if (action === 'leave') { + setTokentPrice(tokenInfo?.market_data?.current_price?.usd || + data.priceUsd); + } else { + setTokentPrice((payload as any)?.price) + } + }} />
+ {/* TXs list if existing tx */} + {filteredTxs.length > 0 + ? ( + + + +

Transaction history

+
+
+ +
+
) + : null} + + {/* Token detail information */} - {tokenInfo && ( + {tokenInfo ? ( <> @@ -307,7 +337,7 @@ export const TokenDetailMobileContainer = (props: { - )} + ): null}

diff --git a/src/containers/mobile/WalletMobileContainer.tsx b/src/containers/mobile/WalletMobileContainer.tsx index 69a5d454..cd608c4f 100644 --- a/src/containers/mobile/WalletMobileContainer.tsx +++ b/src/containers/mobile/WalletMobileContainer.tsx @@ -37,6 +37,8 @@ import { IonRefresherContent, RefresherEventDetail, IonChip, + IonSegment, + IonSegmentButton, } from "@ionic/react"; import { card, download, paperPlane, repeat, settings, settingsOutline } from "ionicons/icons"; import { useState } from "react"; @@ -49,9 +51,10 @@ import { currencyFormat } from "@/utils/currencyFormat"; import { isStableAsset } from "@/utils/isStableAsset"; import { Currency } from "@/components/ui/Currency"; import { ToggleHideCurrencyAmount } from "@/components/ui/ToggleHideCurrencyAmount"; +import { TxsList } from "@/components/ui/TsxList/TxsList"; +import { NftsList } from "@/components/ui/NftsList/NftsList"; interface WalletMobileComProps { - isMagicWallet: boolean; isSwapModalOpen: SelectedTokenDetail | boolean | undefined; setIsSwapModalOpen: ( value?: SelectedTokenDetail | boolean | undefined @@ -94,6 +97,16 @@ class WalletMobileContainer extends WalletBaseComponent< } render() { + const assetGroup = this.state.assetGroup + .filter((asset) => + this.state.filterBy + ? asset.symbol + .toLowerCase() + .includes(this.state.filterBy.toLowerCase()) + : true + ) + .sort((a, b) => (a.balanceUsd > b.balanceUsd ? -1 : 1)); + return ( <> @@ -150,7 +163,7 @@ class WalletMobileContainer extends WalletBaseComponent< - + @@ -191,11 +204,40 @@ class WalletMobileContainer extends WalletBaseComponent<

{ this.handleSearchChange(event); }} >
+ {this.state.totalBalance > 0 && ( + + this.setState(state => ({ + ...state, + currentView: 'tokens' + }))}> + Assets + + this.setState(state => ({ + ...state, + currentView: 'nfts' + }))}> + NFTs + + this.setState(state => ({ + ...state, + currentView: 'txs' + }))}> + History + + + )}
)} @@ -214,7 +256,7 @@ class WalletMobileContainer extends WalletBaseComponent< {this.state.totalBalance <= 0 && ( - super.handleBuyWithFiat(true)}> + super.handleBuyWithFiat(true)}> @@ -280,119 +322,128 @@ class WalletMobileContainer extends WalletBaseComponent< className="ion-no-padding" style={{ maxWidth: "950px", margin: "auto" }} > - - - {this.state.assetGroup - .filter((asset) => - this.state.filterBy - ? asset.symbol - .toLowerCase() - .includes(this.state.filterBy.toLowerCase()) - : true - ) - .sort((a, b) => (a.balanceUsd > b.balanceUsd ? -1 : 1)) - .map((asset, index) => ( - - { - console.log("handleTokenDetailClick: ", asset); - this.handleTokenDetailClick(asset); - }} - > - + + {assetGroup + .map((asset, index) => ( + + { + console.log("handleTokenDetailClick: ", asset); + this.handleTokenDetailClick(asset); }} > - {asset.symbol} { - ( - event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${asset.symbol}&bgColor=%23000000&textColor=%23182449`; + - - - -

- {asset.symbol} -

-
- -

- {asset.name} -

-
-
- {isStableAsset(asset.symbol) ? ( - stable - ) : ''} - -

- -
+ > + {asset.symbol} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${asset.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + + +

+ {asset.symbol} +

+
- {asset.balance.toFixed(6)} +

+ {asset.name} +

-

- -
- { - // close the sliding item after clicking the option - (event.target as HTMLElement) - .closest("ion-item-sliding") - ?.close(); - }} - > - { - this.handleTransferClick(true); - }} - > - - - { - this.setIsSwapModalOpen(asset); + + {isStableAsset(asset.symbol) ? ( + stable + ) : ''} + +

+ +
+ + {asset.balance.toFixed(6)} + +

+
+
+ { + // close the sliding item after clicking the option + (event.target as HTMLElement) + .closest("ion-item-sliding") + ?.close(); }} > - - - -
- ))} -
-
+ { + this.handleTransferClick(true); + }} + > + + + { + this.setIsSwapModalOpen(asset); + }} + > + + + + + ))} + +
+ )} + + {/* txs view */} + {this.state.currentView === 'txs' && ( + + + + )} + + {/* nfts view */} + {this.state.currentView === 'nfts' && ( + + + + )}
)} @@ -476,7 +527,7 @@ const withStore = ( ) => { // use named function to prevent re-rendering failure return function WalletMobileContainerWithStore() { - const { walletAddress, assets, isMagicWallet, loadAssets } = + const { walletAddress, assets, loadAssets } = Store.useState(getWeb3State); const [isSettingOpen, setIsSettingOpen] = useState(false); const [isAlertOpen, setIsAlertOpen] = useState(false); @@ -486,7 +537,6 @@ const withStore = ( return ( - {!walletAddress && ( + {walletAddress === undefined + ? ( + + ) + : ( )}
diff --git a/src/context/LoaderContext.tsx b/src/context/LoaderContext.tsx index b4815ff4..94608052 100644 --- a/src/context/LoaderContext.tsx +++ b/src/context/LoaderContext.tsx @@ -8,12 +8,12 @@ import { useIonLoading } from "@ionic/react"; // Define the type for the user context. type LoaderContextType = { isVisible: boolean; - display: () => Promise; + display: (msg?: string) => Promise; hide: () => Promise; }; const LoaderContext = createContext({ isVisible: false, - display: () => Promise.resolve(), + display: (msg?: string) => Promise.resolve(), hide: () => Promise.resolve(), }) diff --git a/src/interfaces/nft.interface.ts b/src/interfaces/nft.interface.ts new file mode 100644 index 00000000..68edd633 --- /dev/null +++ b/src/interfaces/nft.interface.ts @@ -0,0 +1,6 @@ +import { IChain } from "@/constants/chains"; +import { IAnkrNTFResponse } from "@/servcies/ankr.service"; + +export type INFT = (IAnkrNTFResponse & { + chain: IChain; +}); \ No newline at end of file diff --git a/src/interfaces/tx.interface.ts b/src/interfaces/tx.interface.ts new file mode 100644 index 00000000..51ef9f5e --- /dev/null +++ b/src/interfaces/tx.interface.ts @@ -0,0 +1,137 @@ +export enum TxType { + ['0x0'] = 'Natif', +} + +export interface TxInterface1 { + timestamp: Date; + nonce: number; + blockNumber: number; + from: string; + to: string; + gas: number; + gasPrice: number; + input: string; + transactionIndex: string; + blockHash: string; + value: string; + type: string; + cumulativeGasUsed: number; + gasUsed: number; + hash: string; + status: number; + blockchain: string; +} + +export interface TxInterface { + type: string; + id: string; + attributes: TxAttributes; + relationships: Relationships; +} + +export interface TxAttributes { + operation_type: string; + hash: string; + mined_at_block: number; + mined_at: string; + sent_from: string; + sent_to: string; + status: string; + nonce: number; + fee: Fee; + transfers: Transfer[]; + approvals: Approval[]; + application_metadata: TxApplicationMetadata; + flags: AttributesFlags; +} + +export interface TxApplicationMetadata { + name: string; + icon: Icon; + contract_address: string; + method: Method; +} + +export interface Icon { + url: string; +} + +export interface Method { + id: string; + name: string; +} + +export interface Approval { + fungible_info: FungibleInfo; + quantity: Quantity; + sender: string; +} + +export interface FungibleInfo { + name: string; + symbol: string; + icon: Icon | null; + flags: FungibleInfoFlags; + implementations: Implementation[]; +} + +export interface FungibleInfoFlags { + verified: boolean; +} + +export interface Implementation { + chain_id: string; + address: string; + decimals: number; +} + +export interface Quantity { + int: string; + decimals: number; + float: number; + numeric: string; +} + +export interface Fee { + fungible_info: FungibleInfo; + quantity: Quantity; + price: number; + value: number; +} + +export interface AttributesFlags { + is_trash: boolean; +} + +export interface Transfer { + fungible_info: FungibleInfo; + direction: string; + quantity: Quantity; + value: number; + price: number; + sender: string; + recipient: string; +} + +export interface Relationships { + chain: Chain; + dapp: Dapp; +} + +export interface Chain { + links: Links; + data: Data; +} + +export interface Data { + type: string; + id: string; +} + +export interface Links { + related: string; +} + +export interface Dapp { + data: Data; +} diff --git a/src/interfaces/web3.interface.ts b/src/interfaces/web3.interface.ts index 17a3c9ff..f48d262b 100644 --- a/src/interfaces/web3.interface.ts +++ b/src/interfaces/web3.interface.ts @@ -1,5 +1,5 @@ import { StargateClient } from "@cosmjs/stargate"; -import { ethers } from "ethers"; -import { Connection as SolanaClient } from '@solana/web3.js'; +import { Signer as EVMSigner } from "ethers"; +import { Connection as SolanaClient, Signer as SolSigner } from '@solana/web3.js'; -export type Web3ProviderType = ethers.providers.Web3Provider | StargateClient | SolanaClient; // | Avalanche; +export type Web3SignerType = EVMSigner // | SolSigner; \ No newline at end of file diff --git a/src/lib/assets/svg/download-outline.svg b/src/lib/assets/svg/download-outline.svg new file mode 100644 index 00000000..f9af237e --- /dev/null +++ b/src/lib/assets/svg/download-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/lib/assets/svg/extension-puzzle-outline.svg b/src/lib/assets/svg/extension-puzzle-outline.svg new file mode 100644 index 00000000..f37b76a1 --- /dev/null +++ b/src/lib/assets/svg/extension-puzzle-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/lib/assets/svg/extension-puzzle.svg b/src/lib/assets/svg/extension-puzzle.svg new file mode 100644 index 00000000..5c3ad1ce --- /dev/null +++ b/src/lib/assets/svg/extension-puzzle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/lib/assets/svg/key-outline.svg b/src/lib/assets/svg/key-outline.svg new file mode 100644 index 00000000..65aa8853 --- /dev/null +++ b/src/lib/assets/svg/key-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/lib/assets/svg/wallet-outline.svg b/src/lib/assets/svg/wallet-outline.svg new file mode 100644 index 00000000..0089d6d7 --- /dev/null +++ b/src/lib/assets/svg/wallet-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/lib/assets/svg/wallet.svg b/src/lib/assets/svg/wallet.svg new file mode 100644 index 00000000..7f1c9b0e --- /dev/null +++ b/src/lib/assets/svg/wallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/lib/constant.ts b/src/lib/constant.ts new file mode 100644 index 00000000..dc791a98 --- /dev/null +++ b/src/lib/constant.ts @@ -0,0 +1,31 @@ +// enum of available signin methods +export enum SigninMethod { + Google = 'connect-google', + Email = 'connect-email', + EmailLink = 'connect-email-link', + Wallet = 'connect-wallet' +} + +export const DEFAULT_SIGNIN_METHODS: SigninMethod[] = [ + SigninMethod.Google, + SigninMethod.Email, + SigninMethod.EmailLink, + SigninMethod.Wallet +]; + +export enum KEYS { + AUTH_SIGNATURE_KEY = 'hexa-signature', + AUTH_SIGNATURE_VALUE = 'hexa-signature-value', + STORAGE_PRIVATEKEY_KEY = 'hexa-private-key', + STORAGE_SEED_KEY = 'hexa-seed-key', + STORAGE_SECRET_KEY = 'hexa-secret', + STORAGE_BACKUP_KEY = 'hexa-backup', + STORAGE_SKIP_BACKUP_KEY = 'hexa-skip', + STORAGE_EMAIL_FOR_SIGNIN_KEY = 'hexa-connect-email-for-sign-in', + URL_QUERYPARAM_FINISH_SIGNUP = 'finishSignUp', + STORAGE_AUTH_METHOD_KEY = 'hexa-auth-method' +} + +export const MAX_SKIP_BACKUP_TIME = 15 * 60 * 1000; // 15 minutes + +export * from '@/constants/chains'; \ No newline at end of file diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 00000000..fbdc8584 --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1,6 @@ +import { SigninMethod } from './constant'; +import { KEYS, CHAIN_AVAILABLES, NETWORK } from './constant'; +import { parseApiKey } from './utils'; + +export * from './sdk'; +export { KEYS, SigninMethod, CHAIN_AVAILABLES, NETWORK, parseApiKey }; diff --git a/src/lib/interfaces/auth-provider.interface.ts b/src/lib/interfaces/auth-provider.interface.ts new file mode 100644 index 00000000..55fe26f1 --- /dev/null +++ b/src/lib/interfaces/auth-provider.interface.ts @@ -0,0 +1,23 @@ +import { Auth, User } from 'firebase/auth'; + +type Unsubscribe = () => void; + +// type User = { uid: string; isAnonymous: boolean }; +type UserCredential = { user: User }; + +export interface IAuthProvider { + signinWithGoogle: () => Promise; + sendLinkToEmail: (email: string, ops?: { url?: string }) => Promise; + signInWithLink: () => Promise; + signInAsAnonymous: () => Promise; + signInWithEmailPwd: ( + email: string, + password: string, + privateKey?: string + ) => Promise; + signOut: () => Promise; + getOnAuthStateChanged: (cb: (user: User | null) => void) => Unsubscribe; + getCurrentUserAuth: () => Promise; + updateUserAndTriggerStateChange: () => Promise; + initialize: (auth: Auth, ops?: string) => void; +} diff --git a/src/lib/interfaces/dialog-element.interface.ts b/src/lib/interfaces/dialog-element.interface.ts new file mode 100644 index 00000000..8100624a --- /dev/null +++ b/src/lib/interfaces/dialog-element.interface.ts @@ -0,0 +1,86 @@ +import { DialogUIOptions } from './sdk.interface'; + +export type WalletConnectType = + | 'browser-extension' + | 'import-privatekey' + | 'import-seed'; + +export type FirebaseWeb3ConnectDialogElement = HTMLElement & { + ops: DialogUIOptions | undefined; + + /** + * Method that reset the dialog element + */ + reset(): void; + + /** + * Method that display the dialog element to the user + */ + showModal(): void; + + /** + * Method that hide the dialog element from the user + */ + hideModal(): void; + + /** + * Method that remove a spinner and display a check icon to the user + */ + toggleSpinnerAsCheck(message?: string): Promise; + + /** + * Method that remove spinner and display a cross icon + * with an optional message to the user + * @param message + */ + toggleSpinnerAsCross(message?: string): Promise; + + /** + * Methods that display a prompt to the user + * and return the user's response as a string. + */ + promptPassword(): Promise; + + /** + * Methods that display a prompt to the user + * and return the user's response as Object `{password: string; email: string;}` + */ + promptEmailPassword(ops?: { + hideEmail?: boolean; + hidePassword?: boolean; + }): Promise<{ password?: string; email?: string }>; + + /** + * Methods that display a prompt to the user to backup their wallet + * and return the user's response as Object. + */ + promptBackup(): Promise<{ + withEncryption?: boolean | undefined; + skip?: boolean | undefined; + }>; + + /** + * Method that display prompt to user before signout + * to request backup of wallet seed phrase + */ + promptSignoutWithBackup(): Promise<{ + withEncryption?: boolean | undefined; + skip?: boolean | undefined; + clearStorage?: boolean; + cancel?: boolean; + }>; + + /** + * Methods that display a prompt to the user to select the wallet type + * that they want to connect with. + * This method returns the user's response as a string. + */ + promptWalletType(): Promise; + + /** + * Methods that display a prompt to the user to select the authentication method + * that they want to connect with. + * @info This method is under development and will be available in future releases. + */ + promptAuthMethods(): Promise; +}; diff --git a/src/lib/interfaces/sdk.interface.ts b/src/lib/interfaces/sdk.interface.ts new file mode 100644 index 00000000..3e1122ef --- /dev/null +++ b/src/lib/interfaces/sdk.interface.ts @@ -0,0 +1,29 @@ +import { SigninMethod } from '../constant'; +import { IStorageProvider } from './storage-provider.interface'; + +export type SDKApiKey = string; + +export type DialogUIOptions = { + integrator?: string; + logoUrl?: string; + template?: { + primaryColor?: string; + secondaryColor?: string; + backgroundColor?: string; + }; + isLightMode?: boolean; + enabledSigninMethods?: SigninMethod[]; + ops?: { + authProvider?: { + authEmailUrl?: string; + }; + }; +}; + +export type SDKOptions = { + dialogUI?: Omit; + chainId?: number; + rpcUrl?: string; + enabledSigninMethods?: SigninMethod[]; + storageService?: IStorageProvider; +}; diff --git a/src/lib/interfaces/storage-provider.interface.ts b/src/lib/interfaces/storage-provider.interface.ts new file mode 100644 index 00000000..d3ffead3 --- /dev/null +++ b/src/lib/interfaces/storage-provider.interface.ts @@ -0,0 +1,8 @@ +export interface IStorageProvider { + initialize(apiKey?: string): Promise; + getItem(key: string): Promise; + setItem(key: string, value: string): Promise; + removeItem(key: string): Promise; + clear(): Promise; + getUniqueID(): string; +} diff --git a/src/lib/interfaces/storage-service.interface.ts b/src/lib/interfaces/storage-service.interface.ts new file mode 100644 index 00000000..ed370940 --- /dev/null +++ b/src/lib/interfaces/storage-service.interface.ts @@ -0,0 +1,7 @@ +import { IStorageProvider } from './storage-provider.interface'; + +export interface IStorageService extends Omit { + isExistingPrivateKeyStored(): Promise; + executeBackup(requestBackup: boolean, secret?: string): Promise; + initialize(storageProvider: IStorageProvider, apiKey?: string): Promise; +} diff --git a/src/lib/interfaces/walllet-provider.interface.ts b/src/lib/interfaces/walllet-provider.interface.ts new file mode 100644 index 00000000..e7ae6843 --- /dev/null +++ b/src/lib/interfaces/walllet-provider.interface.ts @@ -0,0 +1,9 @@ +import { Web3Wallet } from '../networks/web3-wallet'; + +export interface IWalletProvider { + connectWithExternalWallet: (ops?: { + chainId?: number; + }) => Promise; + generateWalletFromMnemonic: (ops: T) => Promise; + generateDID: (address: string) => string; +} diff --git a/src/lib/networks/bitcoin.ts b/src/lib/networks/bitcoin.ts new file mode 100644 index 00000000..072bc359 --- /dev/null +++ b/src/lib/networks/bitcoin.ts @@ -0,0 +1,142 @@ +import { generateMnemonic, mnemonicToSeedSync } from 'bip39'; +import { BIP32Factory } from 'bip32'; +import * as bitcoin from 'bitcoinjs-lib'; +import ecc from '@bitcoinerlab/secp256k1'; +import { Web3Wallet } from './web3-wallet'; +import { TransactionResponse } from '@ethersproject/abstract-provider'; +import { IWalletProvider } from '../interfaces/walllet-provider.interface'; +import { Logger } from '../utils'; + +const generateDID = (address: string) => { + return `did:ethr:${address}`; +}; + +class BTCWallet extends Web3Wallet { + public chainId: number; + private _mnemonic!: string; + + constructor( + mnemonic: string, + network: bitcoin.Network = bitcoin.networks.bitcoin, + derivationPath: string = "m/44'/0'/0'/0/0" + ) { + super(); + if (!mnemonic) { + throw new Error('Mnemonic is required to generate wallet'); + } + const bip32 = BIP32Factory(ecc); + const seed = mnemonicToSeedSync(mnemonic); + const path = derivationPath; + // generate key pair + const { privateKey, publicKey } = bip32.fromSeed(seed).derivePath(path); + if (!privateKey || !publicKey) { + throw new Error('Failed to generate key pair'); + } + // generate address + const { address } = bitcoin.payments.p2pkh({ + pubkey: publicKey, + network + }); + // check if address is generated + if (!address) { + throw new Error('Failed to generate wallet'); + } + // set wallet properties + this.address = address; + this.publicKey = publicKey.toString('hex'); + this._privateKey = privateKey.toString('hex'); + this.chainId = network.wif; + this._mnemonic = mnemonic; + } + + sendTransaction(tx: unknown): Promise { + Logger.log('sendTransaction', tx); + throw new Error('Method not implemented.'); + } + + signTransaction(tx: unknown): Promise { + Logger.log('signTransaction', tx); + throw new Error('Method not implemented.'); + } + + async signMessage(message: string): Promise { + Logger.log('signMessage', message); + // Sign the message with the private key + const bufferMsg = Buffer.from(message, 'utf-8'); + const hash = bitcoin.crypto.sha256(bufferMsg); + // generate KeyPair from private key + const keyPair = this._generateKeyPair(); + const signature = keyPair.sign(hash); + Logger.log(`Signature: ${signature.toString('base64')}\n`); + return signature.toString('base64'); + } + + verifySignature(message: string, signature: string): boolean { + if (!this.address) { + throw new Error('Address is required to verify signature'); + } + const bufferMsg = Buffer.from(message, 'utf-8'); + const hash = bitcoin.crypto.sha256(bufferMsg); + // generate KeyPair from private key + const keyPair = this._generateKeyPair(); + const isValid = keyPair.verify(hash, Buffer.from(signature, 'base64')); + return isValid; + } + + async switchNetwork(chainId: number): Promise { + Logger.log('switchNetwork', chainId); + throw new Error('Method not implemented.'); + } + + async getSigner(): Promise { + Logger.log('getSigner'); + throw new Error('Method not implemented.'); + } + + private _generateKeyPair() { + if (!this._mnemonic) { + throw new Error('Mnemonic is required to sign message'); + } + const seed = mnemonicToSeedSync(this._mnemonic); + const path = "m/44'/0'/0'/0/0"; + // generate key pair + const bip32 = BIP32Factory(ecc); + const keyPair = bip32.fromSeed(seed).derivePath(path); + if (!keyPair) { + throw new Error('Failed to generate key pair'); + } + return keyPair; + } +} + +const generateWalletFromMnemonic = async (ops: { + mnemonic?: string; + derivationPath?: string; + network?: bitcoin.Network; +}): Promise => { + const { mnemonic = generateMnemonic(), derivationPath, network } = ops; + if (derivationPath) { + const purpose = derivationPath?.split('/')[1]; + if (purpose !== "44'") { + throw new Error('Invalid derivation path '); + } + } + const wallet = new BTCWallet(mnemonic, network, derivationPath); + return wallet; +}; + +const btcWallet: Readonly< + IWalletProvider<{ + mnemonic?: string; + derivationPath?: string; + network?: bitcoin.Network; + }> +> = Object.freeze({ + connectWithExternalWallet: async () => { + throw new Error('Method not implemented.'); + }, + generateWalletFromMnemonic, + generateDID +}); + +export default btcWallet; diff --git a/src/lib/networks/evm.ts b/src/lib/networks/evm.ts new file mode 100755 index 00000000..5a985dad --- /dev/null +++ b/src/lib/networks/evm.ts @@ -0,0 +1,289 @@ +import { Wallet, utils, providers, Contract, constants, Signer } from 'ethers'; +import { CHAIN_AVAILABLES, CHAIN_DEFAULT } from '../constant'; +import { generateMnemonic, validateMnemonic } from 'bip39'; +import { IWalletProvider } from '../interfaces/walllet-provider.interface'; +import { Web3Wallet } from './web3-wallet'; +import { Logger } from '../utils'; +// import cryptoRandomString from 'crypto-random-string'; +// const generatePrivateKey = () => { +// // Générer une clé privée aléatoire de 32 octets +// return cryptoRandomString({ length: 64, type: 'hex' }); +// }; + +// Generate a DID from an Ethereum address +const generateDID = (address: string) => { + return `did:ethr:${address}`; +}; + +class EVMWallet extends Web3Wallet { + public did!: string; + public chainId: number; + + constructor(mnemonic: string, provider: providers.JsonRpcProvider) { + super(); + if (!mnemonic) { + throw new Error('Mnemonic is required to generate wallet'); + } + const _w = Wallet.fromMnemonic(mnemonic); + const _wallet = new Wallet(_w.privateKey, provider); + const wallet = _wallet.connect(provider); + this.address = wallet.address; + this.publicKey = wallet.publicKey; + this._privateKey = wallet.privateKey; + this.did = generateDID(this.address); + this.provider = provider; + this.chainId = provider.network.chainId; + } + + async switchNetwork(chainId: number): Promise { + if (this.chainId === chainId) { + return; + } + const chain = CHAIN_AVAILABLES.find(c => c.id === chainId); + if (!chain) { + throw new Error('Chain not available'); + } + if (!this.provider) { + throw new Error('Provider not available'); + } + const provider = new providers.JsonRpcProvider(chain.rpcUrl, chain.id); + this.provider = provider; + this.chainId = chainId; + } + + async sendTransaction(tx: { + to: string; + value: string; + contractAddress: string; + }): Promise { + if (!this._privateKey) { + throw new Error('Private key is required to send token'); + } + const { + to: destination, + value: decimalAmount, + contractAddress = constants.AddressZero + } = tx; + try { + const wallet = new Wallet(this._privateKey, this.provider); + // Check if the receiver address is the same as the token contract address + if (destination.toLowerCase() === contractAddress.toLowerCase()) { + // Sending tokens to the token contract address + throw new Error( + 'Sending tokens to ERC20 contract address is not allowed.' + ); + } + const amount = utils.parseUnits(decimalAmount.toString()); // Convert 1 ether to wei + + let tx; + // Check if the token address is the same as the native ETH address + if ( + contractAddress.toLowerCase() === constants.AddressZero.toLowerCase() + ) { + Logger.log('[INFO] Sending native token'); + tx = await wallet.sendTransaction({ + to: destination, + value: amount + }); + } else { + Logger.log('[INFO] Sending erc20 token'); + // ABI (Application Binary Interface) of the ERC20 token contract + const tokenABI = [ + // Standard ERC20 functions + 'function balanceOf(address) view returns (uint)', + 'function transfer(address to, uint amount) returns (boolean)' + ]; + const wallet = new Wallet(this._privateKey, this.provider); + // Load the ERC20 token contract + const tokenContract = new Contract(contractAddress, tokenABI, wallet); + // Convert amount to wei if necessary + // (depends on the token's decimal precision) + // Call the transfer function of the ERC20 token contract + tx = await tokenContract.transfer(destination, amount); + } + Logger.log('[INFO] Transaction Hash:', tx.hash); + const receipt = await tx.wait(); + Logger.log('[INFO] Transaction confirmed'); + return receipt; + } catch (error) { + Logger.error('[ERROR] _sendToken:', error); + throw error; + } + } + + async signMessage(message: string): Promise { + if (!this._privateKey) { + throw new Error('Private key is required to sign message'); + } + const wallet = new Wallet(this._privateKey, this.provider); + return wallet.signMessage(message); + } + + async signTransaction( + message: providers.TransactionRequest + ): Promise { + if (!this._privateKey) { + throw new Error('Private key is required to sign transaction'); + } + const wallet = new Wallet(this._privateKey, this.provider); + return wallet.signTransaction(message); + } + + async getSigner(): Promise { + if (!this._privateKey) { + throw new Error('Private key is required to get signer'); + } + if (!this.provider) { + throw new Error('Provider is required to get signer'); + } + const eoaWallet = new Wallet(this._privateKey, this.provider); + const signer = eoaWallet.connect(this.provider); + return signer as Signer; + } + + verifySignature(message: string, signature: string): boolean { + if (!this.publicKey) { + throw new Error('Public key is required to verify signature'); + } + return utils.verifyMessage(message, signature) === this.address; + } +} + +class ExternalEVMWallet extends Web3Wallet { + public chainId: number; + public externalProvider!: providers.Web3Provider; + private _signer!: Signer; + + constructor( + public readonly provider: providers.Web3Provider, + fromInitializer: boolean = false + ) { + super(); + if (!fromInitializer) { + throw new Error('Use create method to initialize ExternalEVMWallet'); + } + this.chainId = provider?.network?.chainId; + this.externalProvider = provider; + this._signer = provider.getSigner(); + } + + static async create(chainId: number) { + // get current account + const externalProvider = new providers.Web3Provider( + (window as unknown as WindowWithEthereumProvider).ethereum + ); + await externalProvider.send('eth_requestAccounts', []); + // build wallet + const wallet = new ExternalEVMWallet(externalProvider, true); + // switch to default chain + if (wallet.externalProvider?.network?.chainId !== chainId || !wallet.chainId) { + await wallet.switchNetwork(chainId); + } + wallet.chainId = chainId; + wallet.address = await wallet._signer.getAddress(); + return wallet; + } + + async switchNetwork(chainId: number): Promise { + const chain = CHAIN_AVAILABLES.find(c => c.id === chainId); + if (!chain) { + throw new Error('Chain not available'); + } + if (chain.type !== 'evm') { + throw new Error('Only EVM chain is supported with external wallet.'); + } + const chainIdAsHex = utils.hexValue(chainId); + await this.externalProvider.send('wallet_switchEthereumChain', [ + { chainId: chainIdAsHex } + ]); + this.chainId = chainId; + } + async sendTransaction(tx: utils.Deferrable) { + return this._signer.sendTransaction(tx); + } + + async signMessage(message: string) { + return this._signer.signMessage(message); + } + + async signTransaction(tx: utils.Deferrable) { + return this._signer.signTransaction(tx); + } + + async getSigner(): Promise { + return this._signer as Signer; + } + + verifySignature(message: string, signature: string) { + return utils.verifyMessage(message, signature) === this.address; + } +} + +const generateWalletFromMnemonic = async ( + ops: { + mnemonic?: string; + chainId?: number; + } = {} +) => { + const { mnemonic = generateMnemonic(), chainId } = ops; + // validate mnemonic + if (!validateMnemonic(mnemonic)) { + throw new Error('Invalid mnemonic'); + } + const chain = CHAIN_AVAILABLES.find(c => c.id === chainId) || CHAIN_DEFAULT; + const provider = new providers.JsonRpcProvider(chain.rpcUrl, chain.id); + const web3Wallet = new EVMWallet(mnemonic, provider); + return web3Wallet; +}; + +// const generateWalletFromPrivateKey = async ( +// privateKey: string, +// chainId?: number +// ): Promise => { +// if (!utils.isHexString(privateKey)) { +// throw new Error('Invalid private key'); +// } + +// const chain = CHAIN_AVAILABLES.find(c => c.id === chainId) || CHAIN_DEFAULT; +// const provider = new providers.JsonRpcProvider(chain.rpcUrl, chain.id); +// const wallet = new EVMWallet(privateKey, provider); +// return wallet; +// // const ethrDid = generateDID(wallet.address); +// // return { +// // privateKey: wallet.privateKey, +// // publicKey: wallet.publicKey, +// // address: wallet.address, +// // provider +// // }; +// }; + +interface WindowWithEthereumProvider extends Window { + ethereum: providers.ExternalProvider; +} + +const connectWithExternalWallet = async (ops?: { + chainId?: number; +}): Promise => { + // check if metamask/browser extension is installed + if (!(window as unknown as WindowWithEthereumProvider).ethereum) { + throw new Error(` + No web3 wallet extension found. + Install browser extensions like Metamask or Rabby wallet to connect with the app using your existing or hardware wallet. + `); + } + // return object fromated as Web3Wallet + const wallet = await ExternalEVMWallet.create( + ops?.chainId || CHAIN_DEFAULT.id + ); + return wallet; +}; + +const evmWallet: Readonly< + IWalletProvider<{ mnemonic?: string; chainId?: number }> +> = Object.freeze({ + connectWithExternalWallet, + generateWalletFromMnemonic, + generateDID +}); + +export default evmWallet; diff --git a/src/lib/networks/solana.ts b/src/lib/networks/solana.ts new file mode 100644 index 00000000..0260ff24 --- /dev/null +++ b/src/lib/networks/solana.ts @@ -0,0 +1,205 @@ +import { generateMnemonic, mnemonicToSeedSync } from 'bip39'; +import { + Connection, + Keypair, + LAMPORTS_PER_SOL, + PublicKey, + SystemProgram, + Transaction, + TransactionResponse, + sendAndConfirmTransaction +} from '@solana/web3.js'; +import { + getOrCreateAssociatedTokenAccount, + transfer as transferToken, + getMint +} from '@solana/spl-token'; +import { derivePath } from 'ed25519-hd-key'; +import * as bs58 from 'bs58'; +import { Web3Wallet } from './web3-wallet'; +import { IWalletProvider } from '../interfaces/walllet-provider.interface'; +import { NETWORK } from '../constant'; +import { Logger } from '../utils'; + +declare type bs58 = any; + +const generateDID = (address: string) => { + return `did:ethr:${address}`; +}; + +class SolanaWallet extends Web3Wallet { + private _rpcUrl: string = ''; + public chainId: number = NETWORK.solana; + + constructor(mnemonic: string, derivationPath: string = "m/44'/501'/0'/0'") { + super(); + if (!mnemonic) { + throw new Error('Mnemonic is required to generate wallet'); + } + const seed = mnemonicToSeedSync(mnemonic); + const path = derivationPath; + const derivedSeed = derivePath(path, seed as unknown as string).key; + // generate key pair + const { publicKey, secretKey } = Keypair.fromSeed(derivedSeed); + const privateKey = bs58.encode(secretKey); + if (!privateKey || !publicKey) { + throw new Error('Failed to generate key pair'); + } + // generate address + const address = publicKey.toBase58(); + // check if address is generated + if (!address) { + throw new Error('Failed to generate wallet'); + } + // set wallet properties + this.address = address; + this.publicKey = publicKey.toString(); + this._privateKey = privateKey; + } + + async sendTransaction(tx: { + recipientAddress: string; + amount: number; + tokenAddress?: string; + }): Promise { + Logger.log('sendTransaction', tx); + if (!this._privateKey) { + throw new Error('Private key is required to send transaction'); + } + const connection = this._getConnection(this._rpcUrl); + + const recipient = new PublicKey(tx.recipientAddress); + let secretKey; + let signature; + + if (this._privateKey.split(',').length > 1) { + secretKey = new Uint8Array( + this._privateKey.split(',') as Iterable + ); + } else { + secretKey = bs58.decode(this._privateKey); + } + + const from = Keypair.fromSecretKey(secretKey, { + skipValidation: true + }); + + if (tx.tokenAddress) { + // Get token mint + const mint = await getMint(connection, new PublicKey(tx.tokenAddress)); + + // Get the token account of the from address, and if it does not exist, create it + const fromTokenAccount = await getOrCreateAssociatedTokenAccount( + connection, + from, + mint.address, + from.publicKey + ); + + // Get the token account of the recipient address, and if it does not exist, create it + const recipientTokenAccount = await getOrCreateAssociatedTokenAccount( + connection, + from, + mint.address, + recipient + ); + + signature = await transferToken( + connection, + from, + fromTokenAccount.address, + recipientTokenAccount.address, + from.publicKey, + LAMPORTS_PER_SOL * tx.amount + ); + } else { + const transaction = new Transaction().add( + SystemProgram.transfer({ + fromPubkey: from.publicKey, + toPubkey: recipient, + lamports: LAMPORTS_PER_SOL * tx.amount + }) + ); + + // Sign transaction, broadcast, and confirm + signature = await sendAndConfirmTransaction(connection, transaction, [ + from + ]); + } + + const txRecipe = await connection.getTransaction(signature); + if (!txRecipe) { + throw new Error('Transaction not found'); + } + return { + ...txRecipe + }; + } + + signTransaction(tx: unknown): Promise { + Logger.log('signTransaction', tx); + throw new Error('Method not implemented.'); + } + + async signMessage(message: string): Promise { + Logger.log('signMessage', message); + throw new Error('Method not implemented.'); + } + + verifySignature(message: string, signature: string): boolean { + Logger.log('[INFO]: verifySignature:', { message, signature }); + if (!this.address) { + throw new Error('Address is required to verify signature'); + } + throw new Error('Method not implemented.'); + } + + async switchNetwork(chainId: number): Promise { + Logger.log('switchNetwork', chainId); + throw new Error('Method not implemented.'); + } + + async getSigner(): Promise { + return this._getConnection(this._rpcUrl) as Connection; + } + + private _getConnection = (rpcUrl?: string): Connection => { + const connection = this._provider(rpcUrl); + + return connection; + }; + + private _provider(rpcUrl?: string) { + return new Connection(rpcUrl as string); + } +} + +const generateWalletFromMnemonic = async (ops: { + mnemonic?: string; + derivationPath?: string; +}): Promise => { + const { mnemonic = generateMnemonic(), derivationPath } = ops; + if (derivationPath) { + const purpose = derivationPath?.split('/')[1]; + if (purpose !== "44'") { + throw new Error('Invalid derivation path '); + } + } + const wallet = new SolanaWallet(mnemonic, derivationPath); + return wallet; +}; + +const solanaWallet: Readonly< + IWalletProvider<{ + mnemonic?: string; + derivationPath?: string; + }> +> = Object.freeze({ + connectWithExternalWallet: async () => { + throw new Error('Method not implemented.'); + }, + generateWalletFromMnemonic, + generateDID +}); + +export default solanaWallet; diff --git a/src/lib/networks/web3-wallet.ts b/src/lib/networks/web3-wallet.ts new file mode 100644 index 00000000..d76a4fb9 --- /dev/null +++ b/src/lib/networks/web3-wallet.ts @@ -0,0 +1,16 @@ +import { providers } from 'ethers'; + +export abstract class Web3Wallet { + public address!: string; + public publicKey: string | undefined; + public provider: providers.JsonRpcProvider | undefined; + protected _privateKey: string | undefined; + public abstract chainId: number; + + public abstract getSigner(): Promise; + abstract sendTransaction(tx: unknown): Promise; + abstract signTransaction(tx: unknown): Promise; + abstract signMessage(message: string): Promise; + abstract verifySignature(message: string, signature: string): boolean; + abstract switchNetwork(chainId: number): Promise; +} diff --git a/src/lib/providers/auth/firebase.ts b/src/lib/providers/auth/firebase.ts new file mode 100755 index 00000000..85f0fbe9 --- /dev/null +++ b/src/lib/providers/auth/firebase.ts @@ -0,0 +1,206 @@ +// Import the functions you need from the SDKs you need +// import { FirebaseOptions, initializeApp } from 'firebase/app'; +// TODO: Add SDKs for Firebase products that you want to use +// https://firebase.google.com/docs/web/setup#available-libraries +import { + GoogleAuthProvider, + signInWithPopup, + sendSignInLinkToEmail, + isSignInWithEmailLink, + signInWithEmailLink, + signInAnonymously, + signOut as signOutFormFirebase, + Auth, + // onAuthStateChanged as onAuthStateChangedFirebase, + User, + // browserPopupRedirectResolver, + signInWithEmailAndPassword, + createUserWithEmailAndPassword, + sendEmailVerification, + getAdditionalUserInfo, + onIdTokenChanged + // updateCurrentUser, + // beforeAuthStateChanged, + // getAdditionalUserInfo +} from 'firebase/auth'; +import { IAuthProvider } from '../../interfaces/auth-provider.interface'; +import { KEYS } from '../../constant'; +import { Logger } from '../../utils'; + +let auth!: Auth; + +const signinWithGoogle = async () => { + // Initialize Firebase Google Auth + const provider = new GoogleAuthProvider(); + const credential = await signInWithPopup( + auth, + provider + // browserPopupRedirectResolver + ); + if (!credential) { + throw new Error('Credential not found'); + } + // TODO: implement this + const { isNewUser } = getAdditionalUserInfo(credential) || {}; + if (!isNewUser) { + // await signOut(); + // throw new Error(`auth/google-account-already-in-use`); + } + return credential.user; +}; + +const sendLinkToEmail = async ( + email: string, + ops?: { + url?: string; + } +) => { + const url = + ops?.url || + `${window.location.origin}/?${KEYS.URL_QUERYPARAM_FINISH_SIGNUP}=true`; + const actionCodeSettings = { + // URL you want to redirect back to. The domain (www.example.com) for this + // URL must be in the authorized domains list in the Firebase Logger. + url, + // This must be true. + handleCodeInApp: true + // dynamicLinkDomain: 'example.page.link' + }; + // Initialize Firebase email Auth + + // await setPersistence(auth, browserLocalPersistence); + await sendSignInLinkToEmail(auth, email, actionCodeSettings); + // The link was successfully sent. Inform the user. + // Save the email locally so you don't need to ask the user for it again + // if they open the link on the same device. + window.localStorage.setItem(KEYS.STORAGE_EMAIL_FOR_SIGNIN_KEY, email); +}; + +const signInWithLink = async () => { + if (!isSignInWithEmailLink(auth, window.location.href)) { + return undefined; + } + Logger.log( + '[INFO] FirebaseWeb3Connect - signInWithLink: ', + window.location.href + ); + // Additional state parameters can also be passed via URL. + // This can be used to continue the user's intended action before triggering + // the sign-in operation. + // Get the email if available. This should be available if the user completes + // the flow on the same device where they started it. + let email = window.localStorage.getItem(KEYS.STORAGE_EMAIL_FOR_SIGNIN_KEY); + if (!email) { + // User opened the link on a different device. To prevent session fixation + // attacks, ask the user to provide the associated email again. For example: + email = window.prompt('Please provide your email for confirmation'); + } + if (!email) { + throw new Error('No email provided'); + } + + // The client SDK will parse the code from the link for you. + const credential = await signInWithEmailLink( + auth, + email, + window.location.href + ); //.catch(err => err) + // You can check if the user is new or existing: + // result.additionalUserInfo.isNewUser + // Clear email from storage. + window.localStorage.removeItem(KEYS.STORAGE_EMAIL_FOR_SIGNIN_KEY); + return credential; +}; + +const signInAsAnonymous = async () => { + return await signInAnonymously(auth); +}; + +const signInWithEmailPwd = async (email: string, password: string) => { + let user!: User; + try { + // Create user with email and password + const credential = await createUserWithEmailAndPassword( + auth, + email, + password + ); + user = credential.user; + if (!user.emailVerified) { + await sendEmailVerification(user); + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (error: any) { + console.log('[ERROR] auth with email pwd: ', error, { + code: error?.code, + message: error?.message + }); + if ( + error?.code === 'auth/email-already-in-use' || + error?.code === 'auth/network-request-failed' + ) { + const credential = await signInWithEmailAndPassword( + auth, + email, + password + ); + user = credential.user; + return user; + } + + // TODO: implement this to prevent user from creating new account if email already in use + // if (error?.code === 'auth/email-already-in-use' && privateKey) { + // const credential = await signInWithEmailAndPassword( + // auth, + // email, + // password + // ); + // user = credential.user; + // return user; + // } + throw error; + } + if (!user) { + throw new Error('User not found'); + } + return user; +}; + +const signOut = async () => { + await signOutFormFirebase(auth); +}; + +const initialize = (_auth: Auth) => { + auth = _auth; + // Object.freeze(auth); +}; + +const getOnAuthStateChanged = (cb: (user: User | null) => void) => { + return onIdTokenChanged(auth, user => cb(user)); + // return onAuthStateChangedFirebase(auth, user => cb(user)); +}; + +const getCurrentUserAuth = async () => { + return auth.currentUser; +}; + +const updateUserAndTriggerStateChange = async () => { + const user = auth.currentUser; + // update if user is connected + await user?.getIdToken(true); +}; + +const FirebaseAuthProvider: IAuthProvider = { + signinWithGoogle, + sendLinkToEmail, + signInWithLink, + signInAsAnonymous, + signInWithEmailPwd, + signOut, + getOnAuthStateChanged, + getCurrentUserAuth, + updateUserAndTriggerStateChange, + initialize +}; + +export default FirebaseAuthProvider; diff --git a/src/lib/providers/crypto/crypto.ts b/src/lib/providers/crypto/crypto.ts new file mode 100644 index 00000000..d07b3dd5 --- /dev/null +++ b/src/lib/providers/crypto/crypto.ts @@ -0,0 +1,316 @@ +import { Logger } from '../../utils'; + +export default class Crypto { + // iterations: It must be a number and should be set as high as possible. + // So, the more is the number of iterations, the more secure the derived key will be, + // but in that case it takes greater amount of time to complete. + // number of interation - the value of 2145 is randomly chosen + private static iteration = 1000; + + // algorithm - AES 256 GCM Mode + private static encryptionAlgorithm = 'AES-GCM'; + + // random initialization vector length + private static ivLength = 12; + + // random salt length + private static saltLength = 16; + + // digest: It is a digest algorithms of string type. + private static digest = 'SHA-256'; + + // text encoder + private static enc = new TextEncoder(); + + // text decoder + private static dec = new TextDecoder(); + + /** + * + * @param u8 + * @returns + */ + private static base64Encode(u8: Uint8Array): string { + return btoa(String.fromCharCode.apply(undefined, Array.from(u8))); + } + + /** + * + * @param str + * @returns + */ + private static base64Decode(str: string): Uint8Array { + return Uint8Array.from(atob(str), c => c.charCodeAt(0)); + } + + /** + * + * @param secretKey + * @returns + */ + private static getPasswordKey(secretKey: string): Promise { + return window.crypto.subtle.importKey( + 'raw', + Crypto.enc.encode(secretKey), + 'PBKDF2', + false, + ['deriveKey'] + ); + } + + /** + * + * @param passwordKey + * @param salt + * @param iteration + * @param digest + * @param encryptionAlgorithm + * @param keyUsage + * @returns + */ + private static deriveKey( + passwordKey: CryptoKey, + salt: Uint8Array, + iteration: number, + digest: string, + encryptionAlgorithm: string, + keyUsage: ['encrypt'] | ['decrypt'] + ): Promise { + return window.crypto.subtle.deriveKey( + { + name: 'PBKDF2', + salt, + iterations: iteration, + hash: digest + }, + passwordKey, + { + name: encryptionAlgorithm, + length: 256 + }, + false, + keyUsage + ); + } + + /** + * + * @param secretKey + * @param data + * @returns + */ + public static async encrypt( + secretKey: string, + data: string + ): Promise { + try { + // generate random salt + const salt = window.crypto.getRandomValues( + new Uint8Array(Crypto.saltLength) + ); + + // How to transport IV ? + // Generally the IV is prefixed to the ciphertext or calculated using some kind of nonce on both sides. + const iv = window.crypto.getRandomValues(new Uint8Array(Crypto.ivLength)); + + // create master key from secretKey + // The method gives an asynchronous Password-Based Key Derivation + // Create a password based key (PBKDF2) that will be used to derive the AES-GCM key used for encryption + const passwordKey = await Crypto.getPasswordKey(secretKey); + + // to derive a secret key from a master key for encryption + // Create an AES-GCM key using the PBKDF2 key and a randomized salt value. + const aesKey = await Crypto.deriveKey( + passwordKey, + salt, + Crypto.iteration, + Crypto.digest, + Crypto.encryptionAlgorithm, + ['encrypt'] + ); + + // create a Cipher object, with the stated algorithm, key and initialization vector (iv). + // @algorithm - AES 256 GCM Mode + // @key + // @iv + // @options + // Encrypt the input data using the AES-GCM key and a randomized initialization vector (iv). + const encryptedContent = await window.crypto.subtle.encrypt( + { + name: Crypto.encryptionAlgorithm, + iv + }, + aesKey, + Crypto.enc.encode(data) + ); + + // convert encrypted string to buffer + const encryptedContentArr: Uint8Array = new Uint8Array(encryptedContent); + + // create buffer array with length [salt + iv + encryptedContentArr] + const buff: Uint8Array = new Uint8Array( + salt.byteLength + iv.byteLength + encryptedContentArr.byteLength + ); + + // set salt at first postion + buff.set(salt, 0); + + // set iv at second postion + buff.set(iv, salt.byteLength); + // set encrypted at third postion + buff.set(encryptedContentArr, salt.byteLength + iv.byteLength); + // encode the buffer array + const base64Buff: string = Crypto.base64Encode(buff); + + // return encrypted string + return base64Buff; + } catch (error) { + // if any expection occurs + Logger.error(`Error - ${error}`); + return ''; + } + } + + /** + * + * @param secretKey + * @param ciphertext + * @returns + */ + public static async decrypt(secretKey: string, ciphertext: string) { + try { + // Creates a new Buffer containing the given JavaScript string {str} + const encryptedDataBuff = Crypto.base64Decode(ciphertext); + + // extract salt from encrypted data + const salt = encryptedDataBuff.slice(0, Crypto.saltLength); + + // extract iv from encrypted data + const iv = encryptedDataBuff.slice( + Crypto.saltLength, + Crypto.saltLength + Crypto.ivLength + ); + + // extract encrypted text from encrypted data + const data = encryptedDataBuff.slice(Crypto.saltLength + Crypto.ivLength); + + // create master key from secretKey + // The method gives an asynchronous Password-Based Key Derivation + // Create a password based key (PBKDF2) that will be used to derive the AES-GCM key used for decryption. + const passwordKey = await Crypto.getPasswordKey(secretKey); + + // to derive a secret key from a master key for decryption + // Create an AES-GCM key using the PBKDF2 key and the salt from the ArrayBuffer. + const aesKey = await Crypto.deriveKey( + passwordKey, + salt, + Crypto.iteration, + Crypto.digest, + Crypto.encryptionAlgorithm, + ['decrypt'] + ); + + // Return the buffer containing the value of cipher object. + // Decrypt the input data using the AES-GCM key and the iv from the ArrayBuffer. + const decryptedContent = await window.crypto.subtle.decrypt( + { + name: Crypto.encryptionAlgorithm, + iv + }, + aesKey, + data + ); + + // Returns the result of running encoding's decoder. + return Crypto.dec.decode(decryptedContent); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (error: any) { + // // if any expection occurs + // Logger.error(`Error - ${error}`); + // return ""; + throw new Error( + error?.message || + 'Error while decrypting data.
Invalid secret or content.' + ); + } + } + + public static async signMessageFromPassword( + password: string, + message: string + ): Promise { + // generate key thath allow signature + const key = await window.crypto.subtle.importKey( + 'raw', + Crypto.enc.encode(password), + { name: 'HMAC', hash: { name: 'SHA-256' } }, + false, + ['sign'] + ); + const signature = await window.crypto.subtle.sign( + { + name: 'HMAC', + hash: { name: 'SHA-256' } + }, + key, + Crypto.enc.encode(message) + ); + return Crypto.base64Encode(new Uint8Array(signature)); + } + + public static async verifySignatureFromPassword( + password: string, + message: string, + signature: string + ): Promise { + const key = await window.crypto.subtle.importKey( + 'raw', + Crypto.enc.encode(password), + { name: 'HMAC', hash: { name: 'SHA-256' } }, + false, + ['verify'] + ); + const result = await window.crypto.subtle.verify( + { + name: 'HMAC', + hash: { name: 'SHA-256' } + }, + key, + new Uint8Array(Crypto.base64Decode(signature)), + Crypto.enc.encode(message) + ); + return result; + } + + /** + * @deprecated + */ + public static async generatePrivateKeyFromPassword( + password: string + ): Promise { + const passwordKey = await window.crypto.subtle.importKey( + 'raw', + Crypto.enc.encode(password), + 'PBKDF2', + false, + ['deriveBits'] + ); + + const salt = window.crypto.getRandomValues( + new Uint8Array(Crypto.saltLength) + ); + + const key = await window.crypto.subtle.deriveBits( + { + name: 'PBKDF2', + salt, + iterations: Crypto.iteration, + hash: Crypto.digest + }, + passwordKey, + 256 + ); + + return Crypto.base64Encode(new Uint8Array(key)); + } +} diff --git a/src/lib/providers/crypto/password.ts b/src/lib/providers/crypto/password.ts new file mode 100644 index 00000000..22034d08 --- /dev/null +++ b/src/lib/providers/crypto/password.ts @@ -0,0 +1,26 @@ +import Crypto from './crypto'; +import { KEYS } from '../../constant'; +import { storageService } from '../../services/storage.service'; + +export const passwordValidationOrSignature = (value: string) => ({ + execute: async () => { + const privateKey = await storageService.isExistingPrivateKeyStored(); + const signature = await storageService.getItem(KEYS.AUTH_SIGNATURE_KEY); + if (privateKey && signature) { + const isSignatureValid = await Crypto.verifySignatureFromPassword( + value, + KEYS.AUTH_SIGNATURE_VALUE, + signature + ); + if (!isSignatureValid) { + throw new Error('Invalid password'); + } + } else { + const signature = await Crypto.signMessageFromPassword( + value, + KEYS.AUTH_SIGNATURE_VALUE + ); + await storageService.setItem(KEYS.AUTH_SIGNATURE_KEY, signature); + } + } +}); diff --git a/src/lib/providers/storage/firebase.ts b/src/lib/providers/storage/firebase.ts new file mode 100644 index 00000000..ce2eec7f --- /dev/null +++ b/src/lib/providers/storage/firebase.ts @@ -0,0 +1,43 @@ +import { FirebaseApp } from 'firebase/app'; +import { Database, getDatabase, ref, set as setData, get as getDoc } from 'firebase/database'; + +const _params: { + db: Database | undefined; + ops: { + collectionName: string; + }; +} = { + db: undefined, + ops: { collectionName: '_logs-users' } +}; + +export const initialize = ( + app: FirebaseApp, + ops?: { + usersCollectionName?: string; + } +) => { + _params.db = getDatabase(app); + if (ops) { + _params.ops = Object.freeze({ + ..._params.ops, + ...ops + } as const); + } + Object.freeze(_params); + Object.seal(_params); +}; + +export const set = async (refUrl: string, data: unknown) => { + if (!_params.db) throw new Error('Database not initialized'); + const dbRef = ref(_params.db, `${_params.ops.collectionName}/${refUrl}`); + return await setData(dbRef, data); +}; + +export const get = async (refUrl: string) => { + if (!_params.db) throw new Error('Database not initialized'); + const dbRef = ref(_params.db, `${_params.ops.collectionName}/${refUrl}`); + // check doc exists + const snapshot = await getDoc(dbRef); + return snapshot.exists() ? snapshot.val() : null; +} \ No newline at end of file diff --git a/src/lib/providers/storage/fleek.ts b/src/lib/providers/storage/fleek.ts new file mode 100644 index 00000000..881e2361 --- /dev/null +++ b/src/lib/providers/storage/fleek.ts @@ -0,0 +1,29 @@ +import { FleekSdk, ApplicationAccessTokenService } from '@fleekxyz/sdk'; + +let fleekSdk!:FleekSdk; + +const initialize = Object.freeze((clientId: string) => { + const applicationService = new ApplicationAccessTokenService({ + clientId, + }); + fleekSdk = new FleekSdk({ accessTokenService: applicationService }); +}); + +const uploadToIPFS = Object.freeze(async (filename: string, content: Buffer) => { + if (!fleekSdk) { + throw new Error('Fleek SDK not initialized'); + } + const result = await fleekSdk.ipfs().add({ + path: filename, + content: content, + }) + + return result +}); + +const FleekStorageProvider = { + initialize, + uploadToIPFS, +} + +export default FleekStorageProvider; \ No newline at end of file diff --git a/src/lib/providers/storage/local.ts b/src/lib/providers/storage/local.ts new file mode 100644 index 00000000..49dc3581 --- /dev/null +++ b/src/lib/providers/storage/local.ts @@ -0,0 +1,139 @@ +import { IStorageProvider } from '../../interfaces/storage-provider.interface'; +import Crypto from '../crypto/crypto'; + +const generateBucketNameUsingWebGlSignature = () => { + const res = []; + const canvas = document.createElement('canvas'); + const gl = canvas.getContext('webgl2'); + res.push(gl?.getParameter(gl.RENDERER)); + res.push(gl?.getParameter(gl.VENDOR)); + const dbgRenderInfo = gl?.getExtension('WEBGL_debug_renderer_info'); + res.push(dbgRenderInfo?.UNMASKED_RENDERER_WEBGL); + res.push(dbgRenderInfo?.UNMASKED_VENDOR_WEBGL); + const encoded = new TextEncoder().encode(res.join('')); + return btoa(String.fromCharCode(...Array.from(encoded))); +}; + +const generateUIDUsingCanvasID = (): string => { + const canvas = document.createElement('canvas'); + canvas.height = 100; + canvas.width = 800; + const ctx = canvas.getContext('2d'); + if (ctx !== null) { + ctx.font = '30px Arial'; + ctx?.fillText('Hello World', 20, 90); + } + return canvas.toDataURL().split(',').pop() as string; +}; + +export const Environment = Object.freeze({ + applyEncryption: () => (process.env.NEXT_PUBLIC_APP_IS_PROD === 'true' ? true : false), + bucketName: generateBucketNameUsingWebGlSignature() +}); + +const isStringified = Object.freeze((input: string = '') => { + try { + return JSON.parse(input); + } catch { + return input; + } +}); + +class LocalStorage implements IStorageProvider { + private _uid!: string; + private _inMemoryDB?: Map; + + public async initialize() { + const uid = generateUIDUsingCanvasID().slice(0, 16); + this._uid = uid; + await this._getDatabase(); + } + + private async _getDatabase() { + if (!this._inMemoryDB) { + const jsonString = + window.localStorage.getItem(Environment.bucketName) || undefined; + const data = + Environment.applyEncryption() && this._uid && jsonString + ? await Crypto.decrypt(this._uid, jsonString) + : jsonString; + const arrayOfData = isStringified(data); + this._inMemoryDB = new Map(arrayOfData); + } + return this._inMemoryDB as Map; + } + + private async _saveDatabase() { + if (!this._inMemoryDB) { + throw new Error('Database not initialized'); + } + const jsonString = JSON.stringify(Array.from(this._inMemoryDB.entries())); + const data = + Environment.applyEncryption() && this._uid && jsonString + ? await Crypto.encrypt(this._uid, jsonString) + : jsonString; + window.localStorage.setItem(Environment.bucketName, data); + } + + public getUniqueID(): string { + return this._uid; + } + + /** + * + * @param key + * @returns + */ + public async getItem(key: string): Promise { + const result = await this._getDatabase().then(db => db.get(key)); + return result || null; + } + + /** + * + * @param key + * @param value + */ + public async setItem(key: string, value: string): Promise { + if (!this._inMemoryDB) { + throw new Error('Database not initialized'); + } + this._inMemoryDB.set(key, value); + await this._saveDatabase(); + } + + /** + * + * @param key + */ + public async removeItem(key: string) { + if (!this._inMemoryDB) { + throw new Error('Database not initialized'); + } + this._inMemoryDB.delete(key); + await this._saveDatabase(); + if (this._inMemoryDB.size === 0) { + window.localStorage.removeItem(Environment.bucketName); + } + } + + /** + * + * @param keys + */ + public async removeItems(keys: string[]) { + for (const key of keys) await this.removeItem(key); + } + + /** + * + */ + public async clear() { + this._inMemoryDB = new Map(); + window.localStorage.clear(); + } +} + +const storageProvider: IStorageProvider = new LocalStorage(); + +export default storageProvider; diff --git a/src/lib/providers/storage/localforage.ts b/src/lib/providers/storage/localforage.ts new file mode 100644 index 00000000..b68d5059 --- /dev/null +++ b/src/lib/providers/storage/localforage.ts @@ -0,0 +1,126 @@ +import { IStorageProvider } from '../../interfaces/storage-provider.interface'; +import { Storage } from '@ionic/storage'; +import Crypto from '../crypto/crypto'; + +const generateBucketNameUsingWebGlSignature = () => { + const res = []; + const canvas = document.createElement('canvas'); + const gl = canvas.getContext('webgl2'); + res.push(gl?.getParameter(gl.RENDERER)); + res.push(gl?.getParameter(gl.VENDOR)); + const dbgRenderInfo = gl?.getExtension('WEBGL_debug_renderer_info'); + res.push(dbgRenderInfo?.UNMASKED_RENDERER_WEBGL); + res.push(dbgRenderInfo?.UNMASKED_VENDOR_WEBGL); + const encoded = new TextEncoder().encode(res.join('')); + return btoa(String.fromCharCode(...Array.from(encoded))); +}; + +const generateUIDUsingCanvasID = (): string => { + const canvas = document.createElement('canvas'); + canvas.height = 100; + canvas.width = 800; + const ctx = canvas.getContext('2d'); + if (ctx !== null) { + ctx.font = '30px Arial'; + ctx?.fillText('Hello World', 20, 90); + } + return canvas.toDataURL().split(',').pop() as string; +}; + +const Environment = Object.freeze({ + applyEncryption: () => (process.env.NEXT_PUBLIC_APP_IS_PROD === 'true' ? true : false), + bucketName: generateBucketNameUsingWebGlSignature() +}); + +const isStringified = Object.freeze((input: string = '') => { + try { + return JSON.parse(input); + } catch { + return input; + } +}); + +class LocalForageStorage implements IStorageProvider { + private _uid!: string; + private _inMemoryDB?: Map; + private _provider?: Storage; + + private async _getDatabase() { + if (!this._inMemoryDB) { + const values = + await this._provider?.get(Environment.bucketName) || undefined; + const data = + Environment.applyEncryption() && this._uid && values + ? JSON.parse(await Crypto.decrypt(this._uid, values)) + : values; + const arrayOfData = isStringified(data); + console.log(arrayOfData); + this._inMemoryDB = new Map(arrayOfData); + } + return this._inMemoryDB as Map; + } + + private async _saveDatabase() { + if (!this._inMemoryDB) { + throw new Error('Database not initialized'); + } + const values = Array.from(this._inMemoryDB.entries()); + const data = + Environment.applyEncryption() && this._uid && values + ? await Crypto.encrypt(this._uid, JSON.stringify(values)) + : values; + await this._provider?.set(Environment.bucketName, data); + } + + async initialize(apiKey?: string | undefined): Promise { + this._uid = generateUIDUsingCanvasID().slice(0, 16); + const dbKey = Environment.bucketName; + this._provider = new Storage({ + dbKey + }); + await this._provider.create(); + await this._getDatabase(); + } + + getUniqueID(): string { + return this._uid; + } + + async getItem(key: string): Promise { + const result = await this._getDatabase().then((db) => db.get(key)); + return result || null; + } + + async setItem(key: string, value: string): Promise { + if (!this._inMemoryDB) { + throw new Error('Database not initialized'); + } + this._inMemoryDB.set(key, value); + await this._saveDatabase(); + } + + async removeItem(key: string): Promise { + if (!this._inMemoryDB) { + throw new Error('Database not initialized'); + } + this._inMemoryDB.delete(key); + await this._saveDatabase(); + if (this._inMemoryDB.size === 0) { + await this._provider?.remove(Environment.bucketName); + } + } + + async removesItems(keys: string[]): Promise { + for (const key of keys) await this.removeItem(key); + } + + async clear(): Promise { + this._inMemoryDB = new Map(); + await this._provider?.clear(); + } + +} + +const storageProvider: IStorageProvider = new LocalForageStorage(); + +export default storageProvider; \ No newline at end of file diff --git a/src/lib/sdk.ts b/src/lib/sdk.ts new file mode 100644 index 00000000..2902ecfa --- /dev/null +++ b/src/lib/sdk.ts @@ -0,0 +1,746 @@ +import authProvider from './providers/auth/firebase'; +import storageProvider from './providers/storage/localforage'; +import './ui/dialog-element/dialogElement'; +import { + addAndWaitUIEventsResult, + setupSigninDialogElement +} from './ui/dialog-element'; +import { + CHAIN_AVAILABLES, + CHAIN_DEFAULT, + DEFAULT_SIGNIN_METHODS, + KEYS, + MAX_SKIP_BACKUP_TIME, + NETWORK, + SigninMethod +} from './constant'; +// import { parseApiKey } from './utils'; +import { generateMnemonic, initWallet } from './services/wallet.service.ts'; + +import { Auth } from 'firebase/auth'; +import { SDKOptions } from './interfaces/sdk.interface'; +import { storageService } from './services/storage.service'; +import { Web3Wallet } from './networks/web3-wallet'; +import Crypto from './providers/crypto/crypto'; +import { Logger } from './utils'; +import { + initialize as initializeRealtimeDB, + set, get +} from './providers/storage/firebase'; +import { authWithExternalWallet } from './services/auth.servcie'; +import { FirebaseWeb3ConnectDialogElement } from './interfaces/dialog-element.interface'; +import { passwordValidationOrSignature } from './providers/crypto/password'; + +export class FirebaseWeb3Connect { + private readonly _apiKey!: string; + private _ops?: SDKOptions; + private _encryptedSecret!: string | undefined; + private _uid!: string | undefined; + private _cloudBackupEnabled!: boolean | undefined; + private _wallet!: Web3Wallet | undefined; + private _wallets: Web3Wallet[] = []; + private _requestSignout: boolean = false; + + get provider() { + return this._wallet?.provider; + } + + get userInfo() { + return this._wallet + ? { + address: this._wallet.address, + publicKey: this._wallet.publicKey, + chainId: this._wallet.chainId, + uid: this._uid, + cloudBackupEnabled: this._cloudBackupEnabled + } + : null; + } + + get wallet() { + return this._wallet; + } + + constructor(auth: Auth, apiKey: string, ops?: SDKOptions) { + this._apiKey = apiKey; // parseApiKey(apiKey.slice(2)); + this._ops = { + enabledSigninMethods: DEFAULT_SIGNIN_METHODS, + ...ops + }; + // initialize service dependencies + authProvider.initialize(auth); + // set storage.uid + storageService.initialize(this._ops?.storageService || storageProvider); + // init realtimeDatabase users collection + initializeRealtimeDB(auth.app); + // check if window is available and HTMLDialogElement is supported + if (!window || !window.HTMLDialogElement) { + throw new Error( + '[ERROR] FirebaseWeb3Connect: HTMLDialogElement not supported' + ); + } + Logger.log(`[INFO] FirebaseWeb3Connect initialized and ready!`, { + config: this._ops, + isProd: process.env.NEXT_PUBLIC_APP_IS_PROD, + apiKey: this._apiKey, + auth + }); + } + + static isConnectWithLink() { + // check special paramettre in url + const isSignInWithLink = window.location.search.includes( + KEYS.URL_QUERYPARAM_FINISH_SIGNUP + ); + if (!isSignInWithLink) { + return false; + } else { + return true; + } + } + + public async connectWithLink() { + if (!FirebaseWeb3Connect.isConnectWithLink()) { + return; + } + try { + authProvider.signInWithLink(); + } catch (error: unknown) { + Logger.error( + '[ERROR] FirebaseWeb3Connect - connectWithLink: ', + (error as Error).message + ); + throw error; + } + } + + public async connectWithUI(isLightMode?: boolean) { + if (this._requestSignout && this._uid) { + this._requestSignout = false; + await authProvider.updateUserAndTriggerStateChange(); + return this.userInfo; + } + this._requestSignout = false; + // check if have an existing auth method setup + const authMethod = (await storageService.getItem( + KEYS.STORAGE_AUTH_METHOD_KEY + )) as SigninMethod | null; + // build UI + const dialogElement = await setupSigninDialogElement(document.body, { + isLightMode, + enabledSigninMethods: + authMethod && authMethod !== SigninMethod.Wallet + ? [authMethod, SigninMethod.Wallet] + : this._ops?.enabledSigninMethods, + integrator: this._ops?.dialogUI?.integrator, + logoUrl: this._ops?.dialogUI?.logoUrl, + ops: this._ops?.dialogUI?.ops + }); + // open modal + dialogElement.showModal(); + try { + // wait for connect event + const { + isAnonymous = false, + uid, + authMethod + } = (await addAndWaitUIEventsResult(dialogElement)) || {}; + // store default auth method + if (authMethod && authMethod !== SigninMethod.Wallet) { + await storageService.setItem(KEYS.STORAGE_AUTH_METHOD_KEY, authMethod); + } + // handle close event && anonymous user from External wallet + if (!uid && !isAnonymous) { + dialogElement.hideModal(); + await new Promise(resolve => setTimeout(resolve, 225)); + dialogElement.remove(); + return this.userInfo; + } + // init external wallet here, + // all other wallet will be initialized after user connection + // using the `onAuthStateChanged` hook + if (!uid && isAnonymous) { + // first connect external wallet + await this._initWallets({ uid: '', isAnonymous }); + // then connect with auth provider as Anonymous + const { uid: anonymousUid } = await authWithExternalWallet(); + this._uid = anonymousUid; + // manage UI & close modal + await dialogElement.toggleSpinnerAsCheck(); + dialogElement.hideModal(); + // wait 225ms to let the dialog close wth animation + await new Promise(resolve => setTimeout(resolve, 225)); + // remove dialog element + dialogElement?.remove(); + return this.userInfo; + } + // handle user connection + this._uid = uid || this._uid; + if (!this._uid) { + throw new Error('User not connected'); + } + if (isAnonymous) { + throw new Error('External wallet have to be handled to be setup.'); + } + // await user auth state changed that tigger wallet initialization + await new Promise(resolve => { + const unsubscribe = authProvider.getOnAuthStateChanged(async user => { + if (user && this.userInfo?.address) { + console.log({ user, userInfo: this.userInfo }); + resolve(user); + unsubscribe(); + } + }); + }); + } catch (error: unknown) { + const message = + (error as Error)?.message || 'An error occured while connecting'; + await dialogElement.toggleSpinnerAsCross(message); + throw error; + } + await dialogElement.toggleSpinnerAsCheck(); + // close modal with animation and resolve the promise with user info + dialogElement.hideModal(); + // wait 225ms to let the dialog close wth animation + await new Promise(resolve => setTimeout(resolve, 225)); + // remove dialog element + dialogElement?.remove(); + console.log(`[INFO] Closing dialog`, { userInfo: this.userInfo }); + return this.userInfo; + } + + public async signout(withUI?: boolean, isLightMode?: boolean) { + this._requestSignout = true; + // display dialog to backup seed if withUI is true + const isExternalWallet = !this.wallet?.publicKey; + if (withUI && !isExternalWallet) { + const dialogElement = await setupSigninDialogElement(document.body, { + isLightMode, + enabledSigninMethods: [SigninMethod.Wallet], + integrator: this._ops?.dialogUI?.integrator, + logoUrl: this._ops?.dialogUI?.logoUrl, + ops: this._ops?.dialogUI?.ops + }); + // remove all default login buttons + const btnsElement = dialogElement.shadowRoot?.querySelector( + 'dialog .buttonsList' + ) as HTMLElement; + btnsElement.remove(); + // display modal + dialogElement.showModal(); + const { + withEncryption, + skip: reSkip, + clearStorage, + cancel + } = await dialogElement.promptSignoutWithBackup(); + if (cancel) { + dialogElement.hideModal(); + // wait 250ms to let the dialog close wth animation + await new Promise(resolve => setTimeout(resolve, 250)); + // remove dialog element from DOM + dialogElement.remove(); + return; + } + if (!reSkip && this._encryptedSecret) { + await storageService.executeBackup( + Boolean(withEncryption), + await Crypto.decrypt( + storageService.getUniqueID(), + this._encryptedSecret + ) + ); + } + if (reSkip === true) { + await storageService.setItem(KEYS.STORAGE_SKIP_BACKUP_KEY, `${Date.now()}`); + } + + if (clearStorage) { + await storageService.clear(); + await authProvider.signOut(); + } + dialogElement.hideModal(); + // wait 250ms to let the dialog close wth animation + await new Promise(resolve => setTimeout(resolve, 150)); + // remove dialog element from DOM + dialogElement.remove(); + } + + this._wallet = undefined; + this._wallets = []; + this._encryptedSecret = undefined; + + if (isExternalWallet && withUI) { + await authProvider.signOut(); + return; + } + + const unsubscribe = authProvider.getOnAuthStateChanged(user => { + if (user && this._requestSignout === true) { + unsubscribe(); + const t = setTimeout(async () => { + await this.connectWithUI(); + clearTimeout(t); + }, 500); + } + }); + await authProvider.updateUserAndTriggerStateChange(); + // await storageService.removeItem(KEYS.STORAGE_SECRET_KEY); + // await authProvider.signOut(); + } + + public async backupWallet(withUI?: boolean, isLightMode?: boolean) { + if (withUI) { + const dialogElement = await setupSigninDialogElement(document.body, { + isLightMode, + enabledSigninMethods: [SigninMethod.Wallet], + integrator: this._ops?.dialogUI?.integrator, + logoUrl: this._ops?.dialogUI?.logoUrl, + ops: this._ops?.dialogUI?.ops + }); + // remove all default login buttons + const btnsElement = dialogElement.shadowRoot?.querySelector( + 'dialog .buttonsList' + ) as HTMLElement; + btnsElement.remove(); + dialogElement.showModal(); + const { withEncryption, skip: reSkip } = + await dialogElement.promptBackup(); + if (!reSkip && this._encryptedSecret) { + await storageService.executeBackup( + Boolean(withEncryption), + await Crypto.decrypt( + storageService.getUniqueID(), + this._encryptedSecret + ) + ); + } + if (reSkip === true) { + await storageService.setItem(KEYS.STORAGE_SKIP_BACKUP_KEY, `${Date.now()}`); + } + dialogElement.hideModal(); + await new Promise(resolve => setTimeout(resolve, 125)); + dialogElement.remove(); + } else { + throw new Error('Backup wallet without UI is not implemented yet'); + } + } + + /** + * Method that manage the entire wallet management process base on user state. + * Wallet values are set with the corresponding method base on the user authentication provider. + * If no user is connected, all wallet values are set to null with a default provider and the method will return null. + * + * @param cb Call back function that return the formated user information to the caller. + * @returns + */ + public onConnectStateChanged(cb: (user: { address: string } | null) => void) { + return authProvider.getOnAuthStateChanged(async user => { + console.log('[INFO] bof onConnectStateChanged()', user); + if (user?.uid && !user?.emailVerified && !user?.isAnonymous) { + await this._displayVerifyEMailModal(); + return; + } + this._uid = user?.uid; + + switch(true) { + // manage external wallet + case !this.userInfo && user && user?.isAnonymous: { + // initialize all wallets + await this._initWallets(user as any); + break; + } + // manage local wallet + case !this.userInfo && user && !user.isAnonymous && this._requestSignout === false: { + try { + // initialize all wallets + await this._initWallets(user as any); + // check local storage to existing tag to trigger backup download of private key + const requestBackup = localStorage.getItem(KEYS.STORAGE_BACKUP_KEY); + if (this.userInfo && requestBackup && this._encryptedSecret) { + await storageService.executeBackup( + Boolean(requestBackup), + await Crypto.decrypt( + storageService.getUniqueID(), + this._encryptedSecret + ) + ); + } + // ask to download if user skip download prompt from more than 15 minutes + const skip = await storageService.getItem( + KEYS.STORAGE_SKIP_BACKUP_KEY + ); + const skipTime = skip ? parseInt(skip) : Date.now(); + // check if is more than 15 minutes + // TODO: check if is working correctly + const isOut = Date.now() - skipTime > MAX_SKIP_BACKUP_TIME; + const dialogElement = document.querySelector( + 'firebase-web3connect-dialog' + ) as FirebaseWeb3ConnectDialogElement; + if ( + this.userInfo && + isOut && + this._encryptedSecret && + dialogElement + ) { + const { withEncryption, skip: reSkip } = + await dialogElement.promptBackup(); + if (!reSkip) { + await storageService.executeBackup( + Boolean(withEncryption), + await Crypto.decrypt( + storageService.getUniqueID(), + this._encryptedSecret + ) + ); + } + dialogElement.hideModal(); + await new Promise(resolve => setTimeout(resolve, 125)); + dialogElement.remove(); + } + } catch (error: unknown) { + await authProvider.signOut(); + const existingDialog = document.querySelector( + `firebase-web3connect-dialog` + ) as FirebaseWeb3ConnectDialogElement | undefined; + // await storageService.clear(); + const message = + (error as Error)?.message || 'An error occured while connecting'; + if (existingDialog) { + await existingDialog.toggleSpinnerAsCross(message); + } else { + Logger.error('[ERROR] onConnectStateChanged:', message); + } + //throw error; + } + break; + } + } + + // manage Authentication logs + if ( + user?.uid && + process.env.NEXT_PUBLIC_APP_IS_PROD === 'true' + ) { + const data = await get(user.uid); + try { + data + ? await set(user.uid, { + email: user.email, + emailVerified: user.emailVerified, + uid: user.uid, + providerId: user.providerId, + providerData: user.providerData?.[0]?.providerId||'external-wallet', + metaData: user.metadata, + wallets: Array.from(new Set([...(data?.wallets||[]), this.wallet?.address])).filter(Boolean) + }) + : await set(user.uid, { + email: user.email, + emailVerified: user.emailVerified, + uid: user.uid, + providerId: user.providerId, + providerData: user.providerData[0]?.providerId, + metaData: user.metadata, + wallets: [this.wallet?.address] + }); + } catch(err: any) { + console.log('[ERROR] Set log faild: ', err); + } + } + // reset state if no user connected + if (!user) { + this._encryptedSecret = undefined; + this._wallet = undefined; + this._cloudBackupEnabled = undefined; + this._uid = undefined; + } + console.log('[INFO] eof onConnectStateChanged()', { + userInfo: this.userInfo, + encryptedSecret: this._encryptedSecret + }); + cb(user ? this.userInfo : null); + }); + } + + public async switchNetwork(chainId: number) { + if (!this._uid) { + throw new Error('User not connected'); + } + // prevent switching to the same chain + if (this._wallet?.chainId === chainId) { + return this.userInfo; + } + const chain = CHAIN_AVAILABLES.find(chain => chain.id === chainId); + // check if an existing Wallet is available + const wallet = this._wallets.find( + wallet => + wallet.chainId === chainId || + CHAIN_AVAILABLES.find(chain => chain.id === wallet.chainId)?.type === + chain?.type + ); + Logger.log(`[INFO] switchNetwork:`, { wallet, wallets: this._wallets }); + if (wallet) { + // check if wallet have same chainId or switch + if (wallet.chainId !== chainId) { + await wallet.switchNetwork(chainId); + } + await this._setWallet(wallet); + return this.userInfo; + } + // If not existing wallet, init new wallet with chainId + await this._initWallet( + { + isAnonymous: Boolean(this._wallet?.publicKey), + uid: this._uid + }, + chainId + ); + return this.userInfo; + } + + /** + * Method that initialize the main EVM wallet and all other type, base on the user state. + */ + private async _initWallets(user: { uid: string; isAnonymous: boolean }) { + if (!user) { + throw new Error( + 'User not connected. Please sign in to connect with wallet' + ); + } + // and no chainId is provided that mean chainId is the same as the current wallet + if (this.userInfo?.address) { + return this.userInfo; + } + console.log('[INFO] bof - initWallets(): ', { user }); + const defaultNetworkId = this._ops?.chainId || CHAIN_DEFAULT.id; + // handle external wallet: + if (user.isAnonymous) { + const wallet = await initWallet(user, undefined, defaultNetworkId); + this._wallets = [wallet]; + await this._setWallet(wallet); + return this._wallets; + } + + // handle local wallet: + // manage secret + let dialogElement: FirebaseWeb3ConnectDialogElement | undefined; + if (!this._encryptedSecret) { + // prompt user to enter secret using dialog + // check if existing dialog element is available + const existingDialog = document.querySelector( + 'firebase-web3connect-dialog' + ) as FirebaseWeb3ConnectDialogElement; + dialogElement = + existingDialog || + (await setupSigninDialogElement(document.body, { + enabledSigninMethods: [SigninMethod.Wallet], + integrator: this._ops?.dialogUI?.integrator, + logoUrl: this._ops?.dialogUI?.logoUrl, + ops: this._ops?.dialogUI?.ops, + isLightMode: !document.querySelector('body')?.classList.contains('dark') + })); + // remove all default login buttons if existing + const btnsElement = dialogElement.shadowRoot?.querySelector( + 'dialog .buttonsList' + ) as HTMLElement; + btnsElement?.remove(); + // hide `dialog #cancel` button + const cancelButton = dialogElement.shadowRoot?.querySelector( + 'dialog #cancel' + ) as HTMLButtonElement; + cancelButton.style.display = 'none'; + // show dialog if not already displayed + if (!existingDialog) { + dialogElement.showModal(); + cancelButton?.addEventListener('click', () => { + dialogElement?.hideModal(); + dialogElement?.remove(); + return this.userInfo; + }); + } + const secretPassword = await dialogElement.promptPassword(); + // handle reset & create new wallet + if (!secretPassword) { + const confirm = window.confirm( + `You are about to clear all data to create new Wallet. This will remove all your existing data and we will not be able to recover it if you don't have backup. You are confirming that you want to clear all data and create new Wallet?` + ); + if (!confirm) { + // close dialog + dialogElement?.hideModal(); + dialogElement?.remove(); + return null; + } + // clear storage + await storageService.clear(); + localStorage.removeItem(KEYS.STORAGE_BACKUP_KEY); + // signout user + await authProvider.signOut(); + // close dialog + dialogElement?.hideModal(); + dialogElement?.remove(); + return null; + } + try { + await passwordValidationOrSignature(secretPassword).execute(); + } catch (error: unknown) { + // display `dialog #cancel` button + const cancelButton = dialogElement.shadowRoot?.querySelector( + 'dialog #cancel' + ) as HTMLButtonElement; + cancelButton.style.display = 'block'; + throw new Error( + (error as Error).message || `Password validation failed.` + ); + } + // save secret in memory & encrypted + this._encryptedSecret = await Crypto.encrypt( + storageService.getUniqueID(), + secretPassword + ); + } + // check if encrypted mnemonic is available from storage + const storedEncryptedMnemonic = await storageService.getItem( + KEYS.STORAGE_PRIVATEKEY_KEY + ); + const mnemonic = storedEncryptedMnemonic + ? await Crypto.decrypt( + storedEncryptedMnemonic.startsWith('UniqueID') + ? storageService.getUniqueID() + : await Crypto.decrypt( + storageService.getUniqueID(), + this._encryptedSecret + ), + storedEncryptedMnemonic.startsWith('UniqueID') + ? (storedEncryptedMnemonic.split('-').pop() as string) + : storedEncryptedMnemonic + ) + : generateMnemonic(); + // encrypt mnemonic before storing it if not already stored + // or if is encrypted with UniqueID + if ( + !storedEncryptedMnemonic || + storedEncryptedMnemonic?.startsWith('UniqueID') + ) { + const encryptedMnemonic = await Crypto.encrypt( + await Crypto.decrypt( + storageService.getUniqueID(), + this._encryptedSecret + ), + mnemonic + ); + await storageService.setItem( + KEYS.STORAGE_PRIVATEKEY_KEY, + encryptedMnemonic + ); + } + + // manage wallets + try { + const wallets: Web3Wallet[] = []; + await initWallet(user, mnemonic, defaultNetworkId).then(wallet => + wallets.push(wallet) + ); + await initWallet(user, mnemonic, NETWORK.bitcoin).then(wallet => + wallets.push(wallet) + ); + await initWallet(user, mnemonic, NETWORK.solana).then(wallet => + wallets.push(wallet) + ); + // set wallets values with the generated wallet + this._wallets = wallets; + await this._setWallet( + wallets.find(wallet => wallet.chainId === defaultNetworkId) + ); + } catch (error: unknown) { + Logger.error(`[ERROR] _initWallets:`, error); + storageService.clear(); + localStorage.removeItem(KEYS.STORAGE_BACKUP_KEY); + await authProvider.signOut(); + throw error; + } + if (dialogElement) { + // display check & close dialog + await dialogElement.toggleSpinnerAsCheck(); + dialogElement.hideModal(); + await new Promise(resolve => setTimeout(resolve, 125)); + dialogElement.remove(); + } + Logger.log(`[INFO] eof initWallets(): `, { wallets: this._wallets }); + return this._wallets; + } + + /** + * Method that add a new wallet to the wallet list and set the wallet as the main wallet. + */ + private async _initWallet( + user: { + uid: string; + isAnonymous: boolean; + }, + chainId: number + ) { + Logger.log('[INFO] initWallet:', { chainId }); + if (!user) { + throw new Error( + 'User not connected. Please sign in to connect with wallet' + ); + } + // generate wallet base on user state and chainId + if (!this._encryptedSecret) { + throw new Error( + 'Secret is required to decrypt the private key and initialize the wallet.' + ); + } + const wallet = await initWallet( + user, + await Crypto.decrypt(storageService.getUniqueID(), this._encryptedSecret), + chainId + ); + if (!wallet) { + throw new Error('Failed to generate wallet'); + } + // set wallet values with the generated wallet + this._wallets.push(wallet); + await this._setWallet(wallet); + return this.userInfo; + } + + private async _setWallet(wallet?: Web3Wallet) { + this._wallet = wallet; + } + + private async _displayVerifyEMailModal() { + const dialogElement = await setupSigninDialogElement(document.body, { + enabledSigninMethods: [SigninMethod.Wallet], + integrator: this._ops?.dialogUI?.integrator, + logoUrl: this._ops?.dialogUI?.logoUrl + }); + // hide all btns + const btnsElement = dialogElement.shadowRoot?.querySelector( + 'dialog .buttonsList' + ) as HTMLElement; + btnsElement.remove(); + // add HTML to explain the user to verify email + const verifyElement = document.createElement('div'); + verifyElement.innerHTML = ` +

+ Please verify your email before connecting with your wallet. +
+ Click the link in the email we sent you to verify your email address. +

+ + `; + dialogElement.shadowRoot + ?.querySelector('dialog #spinner') + ?.after(verifyElement); + dialogElement.showModal(); + // add event listener to close modal + const buttonOk = dialogElement.shadowRoot?.querySelector( + '#button__ok' + ) as HTMLButtonElement; + buttonOk.addEventListener('click', () => { + dialogElement.hideModal(); + window.location.reload(); + }); + } +} diff --git a/src/lib/services/auth.servcie.ts b/src/lib/services/auth.servcie.ts new file mode 100644 index 00000000..a808e72d --- /dev/null +++ b/src/lib/services/auth.servcie.ts @@ -0,0 +1,186 @@ +import authProvider from '../providers/auth/firebase'; +import Crypto from '../providers/crypto/crypto'; +import { KEYS } from '../constant'; +import { storageService } from './storage.service'; +import { Logger } from '../utils'; + +export const authWithGoogle = async () => { + // const { skip, withEncryption } = ops || {}; + // // if user is requesting to create new privatekey + // const privateKey = await storageService.getItem(KEYS.STORAGE_PRIVATEKEY_KEY); + // if (!privateKey && !skip) { + // // store to local storage tag to trigger download of the private key + // // when the user is connected (using listener onConnectStateChanged) + // localStorage.setItem( + // KEYS.STORAGE_BACKUP_KEY, + // withEncryption ? 'true' : 'false' + // ); + // } + + // // store to local storage tag to trigger download of the private key + // // if user want to skip now and download later on connectWithUI() + // // use timestamp to trigger download later + // if (skip === true) { + // await storageService.setItem(KEYS.STORAGE_SKIP_BACKUP_KEY, `${Date.now()}`); + // } + // Now we can connect with Google + const result = await authProvider.signinWithGoogle(); + // .catch(async (error: { code?: string; message?: string }) => { + // const { code = '', message = '' } = error; + // // alert(`DEBUG: ${code} - ${message}`); + // switch (true) { + // case (code === 'auth/google-account-already-in-use' || + // message === 'auth/google-account-already-in-use') && + // !privateKey: { + // // do not prevent user to signin if account already in use and return user object + // // this will allow user to signin with same account on multiple devices + // Logger.log(`[ERROR] Signin Step: ${code || message}`); + // const user = await authProvider.getCurrentUserAuth(); + // if (!user) { + // throw new Error('User not found'); + // } + // return user; + + // // TODO: implement this logic to prevent multiple account with same email + // // Logger.log(`[ERROR] Signin Step: ${code || message}`); + // // // if email already in use & no ptivatekey, ask to import Wallet Backup file instead + // // storageService.clear(); + // // localStorage.removeItem(KEYS.STORAGE_BACKUP_KEY); + // // throw new Error( + // // `This Google Account is already used and connected to other device. Import your private key instead using: "Connect Wallet -> Import Wallet".` + // // ); + // } + // } + // throw error; + // }); + return result; +}; + +export const authWithEmailPwd = async (ops: { + email: string; + password: string; + skip?: boolean; + withEncryption?: boolean; +}) => { + const { password, skip, withEncryption, email } = ops; + // if user is requesting to create new privatekey + const privateKey = + (await storageService.getItem(KEYS.STORAGE_PRIVATEKEY_KEY)) || undefined; + if (!privateKey && !skip) { + // store to local storage tag to trigger download of the private key + // when the user is connected (using listener onConnectStateChanged) + localStorage.setItem( + KEYS.STORAGE_BACKUP_KEY, + withEncryption ? 'true' : 'false' + ); + } + + // Now we can connect with Google + const result = await authProvider + .signInWithEmailPwd(email, password) + .catch(async (error: { code?: string; message?: string }) => { + // clean storage if error on creation step + const { code = '', message = '' } = error; + switch (true) { + // case code === 'auth/email-already-in-use' && !privateKey: { + // // if email already in use & no ptivatekey, ask to import Wallet Backup file instead + // storageService.clear(); + // localStorage.removeItem(KEYS.STORAGE_BACKUP_KEY); + // await authProvider.signOut(); + // throw new Error( + // `This email is already used and connected to other device. Import your private key instead using: "Connect Wallet -> Import Wallet".` + // ); + // } + case code === 'auth/weak-password': + case code === 'auth/invalid-email': { + Logger.error(`[ERROR] Signin Step: ${code}: ${message}`); + storageService.clear(); + localStorage.removeItem(KEYS.STORAGE_BACKUP_KEY); + break; + } + case code === 'auth/invalid-credential': { + Logger.error(`[ERROR] Signin Step: ${code}: ${message}`); + storageService.clear(); + localStorage.removeItem(KEYS.STORAGE_BACKUP_KEY); + throw new Error( + `This email is already used and connected to other device. Import your private key instead using: "Connect Wallet -> Import Wallet".` + ); + } + } + throw error; + }); + return result; +}; + +/** + * + * @param ops + * @returns + * + * Example: + * ``` + * const origin = window.location.origin; + * const path = '/auth/link'; + * const params = `/?${KEYS.URL_QUERYPARAM_FINISH_SIGNUP}=true`; + * const url = [origin, path, params].join(''); + * await authWithEmailLink({ email: 'demo@demo.com', url }); + * + * // this will send a link to the email with the url to finish the signup. + * // The user have to go to the url with the query param to finish the signup. + * ``` + */ +export const authWithEmailLink = async (ops: { + email: string; + url?: string; +}) => { + const { email, url } = ops; + await authProvider.sendLinkToEmail(email, { url }); + return; +}; + +export const authWithExternalWallet = async () => { + Logger.log('authWithExternalWallet'); + const { + user: { uid } + } = await authProvider.signInAsAnonymous(); + return { uid }; +}; + +export const authByImportPrivateKey = async (ops: { + privateKey: string; + isEncrypted?: boolean; +}) => { + const { privateKey, isEncrypted } = ops; + if (!isEncrypted) { + // encrypt private key before storing it + const encryptedPrivateKey = await Crypto.encrypt( + storageService.getUniqueID(), + privateKey + ); + await storageService.setItem( + KEYS.STORAGE_PRIVATEKEY_KEY, + `UniqueID-${encryptedPrivateKey}` + ); + } else { + await storageService.setItem(KEYS.STORAGE_PRIVATEKEY_KEY, privateKey); + } + // trigger Auth with Google + const { uid } = await authWithGoogle(); + return { uid }; +}; + +export const authByImportSeed = async (ops: { seed: string }) => { + const { seed } = ops; + // encrypt seed before storing it + const encryptedSeed = await Crypto.encrypt( + storageService.getUniqueID(), + seed + ); + await storageService.setItem( + KEYS.STORAGE_PRIVATEKEY_KEY, + `UniqueID-${encryptedSeed}` + ); + // trigger Auth with Google + const { uid } = await authWithGoogle(); + return { uid }; +}; diff --git a/src/lib/services/backup.service.ts b/src/lib/services/backup.service.ts new file mode 100644 index 00000000..af9cf730 --- /dev/null +++ b/src/lib/services/backup.service.ts @@ -0,0 +1,21 @@ +import { FirebaseApp, initializeApp } from 'firebase/app'; +import { getDatabase, ref, set } from 'firebase/database'; +import { Logger } from '../utils'; + +class BackupService { + private _app!: FirebaseApp; + constructor(app: FirebaseApp = initializeApp({}, 'firebaseweb3connect')) { + this._app = app; + } + + async backupSeed(uid: string, encryptedSeed: string) { + Logger.log('backupSeed', uid, encryptedSeed); + const db = getDatabase(this._app); + await set(ref(db, `users/${uid}/seed`), { + encryptedSeed, + timestamp: Date.now() + }); + } +} + +export const backupService = new BackupService(); diff --git a/src/lib/services/storage.service.ts b/src/lib/services/storage.service.ts new file mode 100644 index 00000000..abfacfbf --- /dev/null +++ b/src/lib/services/storage.service.ts @@ -0,0 +1,94 @@ +import { KEYS } from '../constant'; +import { IStorageProvider } from '../interfaces/storage-provider.interface'; +import { IStorageService } from '../interfaces/storage-service.interface'; +import Crypto from '../providers/crypto/crypto'; +import { Environment } from '../providers/storage/local'; +import { Logger } from '../utils'; + +class StorageService implements IStorageService { + private _storageProvider!: IStorageProvider; + + constructor() {} + + public async initialize( + _storageProvider: IStorageProvider, + apiKey?: string + ): Promise { + this._storageProvider = _storageProvider; + return this._storageProvider.initialize(apiKey); + } + + public async getItem(key: string): Promise { + return this._storageProvider.getItem(key); + } + + public async setItem(key: string, value: string): Promise { + return this._storageProvider.setItem(key, value); + } + + public async removeItem(key: string): Promise { + return this._storageProvider.removeItem(key); + } + + public async clear(): Promise { + return this._storageProvider.clear(); + } + + public async isExistingPrivateKeyStored() { + const encryptedPrivateKey = await this._storageProvider.getItem( + KEYS.STORAGE_PRIVATEKEY_KEY + ); + return !!encryptedPrivateKey && !encryptedPrivateKey?.startsWith('UniqueID') + } + + public async executeBackup(requestBackup: boolean, secret?: string) { + Logger.log('[INFO] Execute Backup request:', { requestBackup, secret }); + const encriptedPrivateKey = await this._getBackup(); + const withEncryption = requestBackup === true; + if (!secret && withEncryption) { + throw new Error('Secret is required to decrypt the private key'); + } + const data = + !withEncryption && secret + ? await Crypto.decrypt(secret, encriptedPrivateKey) + : encriptedPrivateKey; + Logger.log('[INFO] Backup data:', { + data, + withEncryption, + encriptedPrivateKey + }); + const blob = new Blob([data], { type: 'text/plain' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + // use name formated with current date time like: hexa-backup-2021-08-01_12-00-00.txt + a.download = `hexa-backup-${new Date().toISOString().replace(/:/g, '-').split('.')[0]}.txt`; + a.click(); + URL.revokeObjectURL(url); + await new Promise(resolve => setTimeout(resolve, 500)); + localStorage.removeItem(KEYS.STORAGE_BACKUP_KEY); + await this._storageProvider.removeItem(KEYS.STORAGE_SKIP_BACKUP_KEY); + } + + public getUniqueID(): string { + return this._storageProvider.getUniqueID(); + } + + private async _getBackup() { + // check if the database exist + const db = window.localStorage.getItem(Environment.bucketName); + if (!db) { + throw new Error('Database empty'); + } + // get privateKey from the database + const enriptatePrivateKey = await this._storageProvider.getItem( + KEYS.STORAGE_PRIVATEKEY_KEY + ); + if (!enriptatePrivateKey) { + throw new Error('Private key not found'); + } + return enriptatePrivateKey; + } +} + +export const storageService: IStorageService = new StorageService(); diff --git a/src/lib/services/wallet.service.ts.ts b/src/lib/services/wallet.service.ts.ts new file mode 100644 index 00000000..6df9d4c4 --- /dev/null +++ b/src/lib/services/wallet.service.ts.ts @@ -0,0 +1,78 @@ +import evmWallet from '../networks/evm'; +import btcWallet from '../networks/bitcoin'; +import authProvider from '../providers/auth/firebase'; +import { ALL_CHAINS } from '../constant'; +import { Web3Wallet } from '../networks/web3-wallet'; +import solanaWallet from '../networks/solana'; +import { Logger } from '../utils'; + +export { generateMnemonic } from 'bip39'; + +export const initWallet = async ( + user: { + uid: string; + isAnonymous: boolean; + } | null, + mnemonic?: string, + chainId?: number +): Promise => { + Logger.log('[INFO] initWallet:', { user, mnemonic }); + + if (!mnemonic && user && !user.isAnonymous) { + throw new Error('Mnemonic is required to initialize the wallet.'); + } + + // connect with external wallet + if (!mnemonic && user && user.isAnonymous === true) { + const wallet = await evmWallet.connectWithExternalWallet({ + chainId + }); + return wallet; + } + + // others methods require mnemonic + // Handle case where mnemonic is not required + if (!mnemonic) { + throw new Error( + 'Mnemonic is required to decrypt the private key and initialize the wallet.' + ); + } + let wallet!: Web3Wallet; + // check if is EVM chain + const chain = ALL_CHAINS.find(chain => chain.id === chainId); + // generate wallet from encrypted mnemonic or generate new from random mnemonic + switch (true) { + // evm wallet + case chain?.type === 'evm': { + wallet = await evmWallet.generateWalletFromMnemonic({ + mnemonic, + chainId + }); + break; + } + // btc wallet + case chain?.type === 'bitcoin': { + wallet = await btcWallet.generateWalletFromMnemonic({ + mnemonic + }); + break; + } + // solana wallet + case chain?.type === 'solana': { + wallet = await solanaWallet.generateWalletFromMnemonic({ + mnemonic + }); + break; + } + default: + throw new Error('Unsupported chain type'); + } + if (!mnemonic) { + await authProvider.signOut(); + throw new Error('Secret is required to encrypt the mnemonic.'); + } + if (!wallet.publicKey) { + throw new Error('Failed to generate wallet from mnemonic'); + } + return wallet; +}; diff --git a/src/lib/ui/checkbox-element/checkbox-element.ts b/src/lib/ui/checkbox-element/checkbox-element.ts new file mode 100644 index 00000000..1ba50a10 --- /dev/null +++ b/src/lib/ui/checkbox-element/checkbox-element.ts @@ -0,0 +1,58 @@ +export const CheckboxElement = (ops?: { + label: string; + id: string; + checked?: boolean; +}) => { + const { label, id, checked = false } = ops || {}; + return ` + +
+ + +
+ `; +}; diff --git a/src/lib/ui/dialog-element/dialogElement.css b/src/lib/ui/dialog-element/dialogElement.css new file mode 100644 index 00000000..219ce4de --- /dev/null +++ b/src/lib/ui/dialog-element/dialogElement.css @@ -0,0 +1,242 @@ +:host([theme='light']) { + --icon-color: #180d68; + --dialog-box-shadow: 0 0 2rem 0 rgba(0, 0, 0, '0.1'); + --dialog-background-color: #fff; + --text-color: #242424; + --text-link: #646cff; + --text-link-hover: #747bff; + --dialog-border: solid 1px #ccc; + --button-background: #fff; + --button-hover-background: #f5f5f5; +} + +:host([theme='dark']) { + --icon-color: #fff; + --dialog-box-shadow: 0 0 2rem 0 rgba(0, 0, 0, '0.3'); + --dialog-background-color: #242424; + --text-color: #fff; + --text-link: #646cff; + --text-link-hover: #535bf2; + --dialog-border: solid 1px #2c2c2c; + --button-background: #1a1a1a; + --button-hover-background: #333333; +} + +@keyframes slide-in-up { + 0% { + -webkit-tranform: translateY(100%); + -moz-tranform: translateY(100%); + transform: translateY(100%); + } +} + +:host .app-icon { + fill: var(--icon-color); +} + +:host { + --animation-scale-down: scale-down 0.125s var(--ease); + --animation-slide-in-down: slide-in-down 0.125s ease-in-out; + --animation-slide-in-up: slide-in-up 0.125s var(--ease); + --ease: cubic-bezier(0.25, 0, 0.3, 1); + --ease-elastic-in-out: cubic-bezier(0.5, -0.5, 0.1, 1.5); + --ease-squish: var(--ease-elastic-in-out); + + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + color-scheme: light dark; + box-sizing: border-box; +} + +:host * { + box-sizing: border-box; +} + +:host dialog { + z-index: 9999; + overflow: hidden; + transition: all 0.125s; + box-shadow: var(--dialog-box-shadow); + display: block; + inset: 0; + background-color: var(--dialog-background-color); + color: var(--text-color); + position: fixed; + border: var(--dialog-border); + border-radius: 32px; + padding: 0px; + text-align: center; + width: 80vw; + max-width: 400px; + box-sizing: border-box; + cursor: default; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + transition: all 0.125s ease-in-out; +} + +:host dialog:not([open]) { + pointer-events: none; + opacity: 0; +} +:host dialog[open] { + opacity: 1; + /* animation: slide-in-up 0.225s ease-in-out forwards; */ +} + +:host dialog::backdrop { + background-color: rgba(0, 0, 0, 0.2); +} + +:host dialog form { + width: 100%; +} + +:host dialog #logo svg, +:host dialog #logo img { + margin: 2em auto 3rem; + display: block; + transform: scale(1.5); +} + +:host dialog #logo img { + width: 58px; +} + +a { + color: #646cff; + text-decoration: inherit; +} + +:host a:hover { + color: var(--text-link-hover); +} + +:host p { + font-size: 0.8rem; + font-weight: 400; + margin: 12px auto 0rem; + max-width: 300px; +} + +:host dialog p.title { + font-size: 0.6rem; + margin: 1rem auto; +} +:host dialog p.or { + font-size: 0.8rem; + opacity: 0.8; +} + +:host p.policy { + font-size: 0.6rem; + margin: 1.5rem auto 0rem; + border-top: solid 1px var(--button-hover-background); + padding-top: 1rem; + width: 100%; + max-width: 100%; +} +:host p.powered-by { + font-size: 0.5rem; + margin: 0.2rem auto 1rem; + opacity: 0.8; +} + +:host .buttonsList { + position: relative; + padding: 0 16px; +} + +:host *:focus-visible { + outline: none; + outline-offset: 2px; +} + +:host dialog button { + max-width: 300px; + margin-left: auto; + margin-right: auto; +} + +:host dialog button:not(#cancel) { + text-align: center; + background-color: var(--button-background); + color: var(--text-color); + border: var(--dialog-border); + border-radius: 24px; + cursor: pointer; + font-size: 16px; + font-weight: 600; + margin-top: 16px; + padding: 12px 16px; + display: flex; + justify-content: center; + width: 100%; + min-width: 280px; + min-height: 54px; + align-items: center; + font-family: 'Roboto', sans-serif; + font-weight: 400; + line-height: 20px; +} + +:host dialog button:not(#cancel):not([disabled]):hover { + background-color: var(--button-hover-background); +} + +:host dialog button[disabled] { + opacity: 0.6; + cursor: not-allowed !important; +} + +:host dialog button:not(#cancel) svg { + margin-right: 8px; +} + +:host dialog button#create-new-wallet { + border: none; + background: transparent; + padding: 0; + margin: 0 auto; + opacity: 0.6; +} +:host dialog button#create-new-wallet:hover { + background-color: transparent !important; +} + +:host #cancel { + background-color: transparent; + border: none; + color: var(--text-color); + cursor: pointer; + position: absolute; + right: 16px; + top: 16px; + padding-top: env(safe-area-inset-top); +} + +@media (max-width: 600px) { + :host dialog { + width: 100vw; + height: 100vh; + max-width: 100vw; + min-height: 100vh; + border-radius: 0; + border: none; + margin: 0; + display: flex; + align-items: start; + justify-content: center; + overflow-y: scroll; + } +} + +/* iOS Header padding on Standalone mode */ +@media (max-width: 600px) and (display-mode: standalone) { + :host dialog { + padding-top: env(safe-area-inset-top); + } +} diff --git a/src/lib/ui/dialog-element/dialogElement.html b/src/lib/ui/dialog-element/dialogElement.html new file mode 100644 index 00000000..50d82a49 --- /dev/null +++ b/src/lib/ui/dialog-element/dialogElement.html @@ -0,0 +1,104 @@ + +
+ +

Onboard using {{integrator}}

+ + +
+
+ + +

or

+ + + + + + + + +
+ + +
+

Privacy Policy - Terms

+

+ Powered by + HexaOne Labs +

+
+
diff --git a/src/lib/ui/dialog-element/dialogElement.ts b/src/lib/ui/dialog-element/dialogElement.ts new file mode 100644 index 00000000..9d1da501 --- /dev/null +++ b/src/lib/ui/dialog-element/dialogElement.ts @@ -0,0 +1,834 @@ +// import html from './dialogElement.html'; +// import css from './dialogElement.css'; +import { DEFAULT_SIGNIN_METHODS, KEYS, SigninMethod } from '../../constant'; +import { promptPasswordElement } from '../prompt-password-element/prompt-password-element'; +import { promptEmailPasswordElement } from '../prompt-email-password-element/prompt-email-password-element'; +import { promptToDownloadElement } from '../prompt-download-element/prompt-download-element'; +import { SpinnerElement } from '../spinner-element/spinner-element'; +import { promptWalletTypeElement } from '../prompt-wallet-type-element/prompt-wallet-type-element'; + +import { DialogUIOptions } from '../../interfaces/sdk.interface'; +import { FirebaseWeb3ConnectDialogElement } from '../../interfaces/dialog-element.interface'; +import { storageService } from '../../services/storage.service'; +import { promptSignoutElement } from '../prompt-signout-element/prompt-signout-element'; +import { Logger } from '../../utils'; + +const html = ` +
+ +

Onboard using {{integrator}}

+ + +
+
+ + +

or

+ + + + + + + + +
+ + +
+

Terms & Privacy Policy

+

+ Powered by + HexaOne Labs +

+
+
+`; +const css = `:host([theme='light']) { + --icon-color: #180d68; + --dialog-box-shadow: 0 0 2rem 0 rgba(0, 0, 0, '0.1'); + --dialog-background-color: #fff; + --text-color: #242424; + --text-link: #646cff; + --text-link-hover: #747bff; + --dialog-border: solid 1px #ccc; + --button-background: #fff; + --button-hover-background: #f5f5f5; +} + +:host([theme='dark']) { + --icon-color: #fff; + --dialog-box-shadow: 0 0 2rem 0 rgba(0, 0, 0, '0.3'); + --dialog-background-color: #242424; + --text-color: #fff; + --text-link: #646cff; + --text-link-hover: #535bf2; + --dialog-border: solid 1px #2c2c2c; + --button-background: #1a1a1a; + --button-hover-background: #333333; +} + +@keyframes slide-in-up { + 0% { + -webkit-tranform: translateY(100%); + -moz-tranform: translateY(100%); + transform: translateY(100%); + } +} + +:host .app-icon { + fill: var(--icon-color); +} + +:host { + --animation-scale-down: scale-down 0.125s var(--ease); + --animation-slide-in-down: slide-in-down 0.125s ease-in-out; + --animation-slide-in-up: slide-in-up 0.125s var(--ease); + --ease: cubic-bezier(0.25, 0, 0.3, 1); + --ease-elastic-in-out: cubic-bezier(0.5, -0.5, 0.1, 1.5); + --ease-squish: var(--ease-elastic-in-out); + + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + color-scheme: light dark; + box-sizing: border-box; +} + +:host * { + box-sizing: border-box; +} + +:host dialog { + z-index: 9999; + overflow: hidden; + transition: all 0.125s; + box-shadow: var(--dialog-box-shadow); + display: block; + inset: 0; + background-color: var(--dialog-background-color); + color: var(--text-color); + position: fixed; + border: var(--dialog-border); + border-radius: 32px; + padding: 0px; + text-align: center; + width: 80vw; + max-width: 400px; + box-sizing: border-box; + cursor: default; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + transition: all 0.125s ease-in-out; +} + +:host dialog:not([open]) { + pointer-events: none; + opacity: 0; +} +:host dialog[open] { + opacity: 1; + /* animation: slide-in-up 0.225s ease-in-out forwards; */ +} + +:host dialog::backdrop { + background-color: rgba(0, 0, 0, 0.2); +} + +:host dialog form { + width: 100%; +} + +:host dialog #logo svg, +:host dialog #logo img { + margin: 2em auto 3rem; + display: block; + transform: scale(1.5); +} + +:host dialog #logo img { + width: 58px; +} + +a { + color: #646cff; + text-decoration: inherit; +} + +:host a:hover { + color: var(--text-link-hover); +} + +:host p { + font-size: 0.8rem; + font-weight: 400; + margin: 12px auto 0rem; + max-width: 300px; +} + +:host dialog p.title { + font-size: 0.6rem; + margin: 1rem auto; +} +:host dialog p.or { + font-size: 0.8rem; + opacity: 0.8; +} + +:host p.policy { + font-size: 0.6rem; + margin: 1.5rem auto 0rem; + border-top: solid 1px var(--button-hover-background); + padding-top: 1rem; + width: 100%; + max-width: 100%; +} +:host p.powered-by { + font-size: 0.5rem; + margin: 0.2rem auto 1rem; + opacity: 0.8; +} + +:host .buttonsList { + position: relative; + padding: 0 16px; +} + +:host *:focus-visible { + outline: none; + outline-offset: 2px; +} + +:host dialog button { + max-width: 300px; + margin-left: auto; + margin-right: auto; +} + +:host dialog button:not(#cancel) { + text-align: center; + background-color: var(--button-background); + color: var(--text-color); + border: var(--dialog-border); + border-radius: 24px; + cursor: pointer; + font-size: 16px; + font-weight: 600; + margin-top: 16px; + padding: 12px 16px; + display: flex; + justify-content: center; + width: 100%; + min-width: 280px; + min-height: 54px; + align-items: center; + font-family: 'Roboto', sans-serif; + font-weight: 400; + line-height: 20px; +} + +:host dialog button:not(#cancel):not([disabled]):hover { + background-color: var(--button-hover-background); +} + +:host dialog button[disabled] { + opacity: 0.6; + cursor: not-allowed !important; +} + +:host dialog button:not(#cancel) svg { + margin-right: 8px; +} + +:host dialog button#create-new-wallet { + border: none; + background: transparent; + padding: 0; + margin: 1rem auto 0; + opacity: 0.6; +} +:host dialog button#create-new-wallet:hover { + background-color: transparent !important; +} + +:host #cancel { + background-color: transparent; + border: none; + color: var(--text-color); + cursor: pointer; + position: absolute; + right: 16px; + top: 16px; + padding-top: env(safe-area-inset-top); +} + +@media (max-width: 600px) { + :host dialog { + width: 100vw; + height: 100vh; + max-width: 100vw; + min-height: 100vh; + border-radius: 0; + border: none; + margin: 0; + display: flex; + align-items: start; + justify-content: center; + overflow-y: scroll; + } +} + +/* iOS Header padding on Standalone mode */ +@media (max-width: 600px) and (display-mode: standalone) { + :host dialog { + padding-top: env(safe-area-inset-top); + } +} +`; +// export webcomponent with shadowdom +export class HexaSigninDialogElement + extends HTMLElement + implements FirebaseWeb3ConnectDialogElement +{ + private _ops?: DialogUIOptions; + + get ops() { + return this._ops; + } + + set ops(_ops: DialogUIOptions | undefined) { + const enabledSigninMethods = + _ops?.enabledSigninMethods?.filter( + (method): method is (typeof DEFAULT_SIGNIN_METHODS)[number] => + method !== undefined + ) || DEFAULT_SIGNIN_METHODS; + const integrator = _ops?.integrator + ? _ops.integrator + : 'FirebaseWeb3Connect'; + const logoUrl = + (this.ops?.logoUrl?.length || 0) > 0 ? this.ops?.logoUrl : undefined; + const isLightMode = + _ops?.isLightMode === undefined + ? window.matchMedia('(prefers-color-scheme: light)').matches + : _ops.isLightMode; + // object validation + // TODO: validate object + this._ops = { + ..._ops, + logoUrl, + integrator, + enabledSigninMethods, + isLightMode + }; + Logger.log(`[INFO] ops: `, this.ops); + + // check if shadow dom is initialized and empty + if (this.shadowRoot?.innerHTML === '') { + this._render(); + } else { + throw new Error('ShadowDOM already initialized'); + } + } + + constructor() { + super(); + // build shadow dom + const shadow = this.attachShadow({ mode: 'open' }); + if (!shadow) { + throw new Error('ShadowDOM not supported'); + } + } + + private async _render() { + // create template element + const template = document.createElement('template'); + template.innerHTML = ` + + ${html} + `; + // add spinner element to template content + (template.content.querySelector('#spinner') as HTMLElement).innerHTML = + SpinnerElement(); + + // disable buttons that are not enabled + const buttons = template.content.querySelectorAll( + '.buttonsList button' + ) as NodeListOf; + buttons.forEach(button => { + if ( + !this.ops?.enabledSigninMethods?.includes( + button.id as unknown as SigninMethod + ) && + button.id.startsWith('connect') + ) { + button.remove(); + } + }); + // remove `or` tage if google is not enabled + if ( + !this.ops?.enabledSigninMethods?.includes(SigninMethod.Google) || + (this.ops.enabledSigninMethods.includes(SigninMethod.Google) && + this.ops.enabledSigninMethods.length === 1) + ) { + template.content.querySelector('.or')?.remove(); + } + if (this.ops?.logoUrl) { + Logger.log(`[INFO] Logo URL: `, this.ops.logoUrl); + (template.content.querySelector('#logo') as HTMLElement).innerHTML = ` + logo + `; + } + if (!this.shadowRoot) { + throw new Error('ShadowRoot not found. Webcomponent not initialized.'); + } + // add attribut to manage dark/light mode + this.setAttribute('theme', this.ops?.isLightMode ? 'light' : 'dark'); + // finaly add template to shadow dom + this.shadowRoot.appendChild(template.content.cloneNode(true)); + // replace tags from html with variables + const variables = [{ tag: 'integrator', value: `${this.ops?.integrator}` }]; + variables.forEach(variable => { + if (!this.shadowRoot) { + throw new Error('ShadowRoot not found while replacing variables'); + } + this.shadowRoot.innerHTML = this.shadowRoot.innerHTML.replace( + new RegExp(`{{${variable.tag}}}`, 'g'), + variable.value + ); + }); + } + + public showModal(): void { + this.shadowRoot?.querySelector('dialog')?.showModal(); + } + + public hideModal(): void { + this.shadowRoot?.querySelector('dialog')?.close(); + } + + // manage events from shadow dom + public connectedCallback() { + this.shadowRoot + ?.querySelector('dialog') + ?.addEventListener('click', async event => { + // filter event name `connect + const button = (event.target as HTMLElement).closest('button'); + if (!button) return; + // handle cancel + if (button.id === 'cancel') { + this.dispatchEvent( + new CustomEvent('connect', { + detail: button.id + }) + ); + // stop further execution of code + // as we don't want to show loading on cancel + // and we don't want to show connected on cancel. + // This will trigger the event and close the dialog + return; + } + // handle reset button + if (button.id === 'create-new-wallet') { + this.dispatchEvent(new CustomEvent('reset')); + return; + } + // only button from connection type request + if (!button.id.includes('connect')) { + return; + } + // hide all btns and display loader with animation + const btnsElement = this.shadowRoot?.querySelector( + 'dialog .buttonsList' + ) as HTMLElement; + const spinnerElement = this.shadowRoot?.querySelector( + 'dialog #spinner' + ) as HTMLElement; + btnsElement.style.display = 'none'; + spinnerElement.style.display = 'block'; + + // emiting custome event to SDK + switch (button.id) { + case 'connect-google': + this.dispatchEvent( + new CustomEvent('connect', { + detail: button.id + }) + ); + break; + case 'connect-email': + this.dispatchEvent( + new CustomEvent('connect', { + detail: button.id + }) + ); + break; + case 'connect-email-link': + this.dispatchEvent( + new CustomEvent('connect', { + detail: button.id + }) + ); + break; + case 'connect-wallet': + this.dispatchEvent( + new CustomEvent('connect', { + detail: button.id + }) + ); + break; + } + }); + } + + public async toggleSpinnerAsCheck(message?: string): Promise { + await new Promise(resolve => { + const t = setTimeout(() => { + clearTimeout(t); + resolve(true); + }, 1500); + }); + const element = this.shadowRoot?.querySelector( + 'dialog #spinner' + ) as HTMLElement; + element.innerHTML = ` + + + + + + + + + + + ${message ? `

${message}

` : ''} + `; + return new Promise(resolve => { + const t = setTimeout(() => { + clearTimeout(t); + resolve(true); + }, 1800); + }); + } + + public async toggleSpinnerAsCross( + message: string = 'An error occured. Please try again.' + ): Promise { + await new Promise(resolve => { + const t = setTimeout(() => { + clearTimeout(t); + resolve(true); + }, 1500); + }); + const element = this.shadowRoot?.querySelector( + 'dialog #spinner' + ) as HTMLElement; + element.innerHTML = ` + + + + + + + +

${message}

+ `; + return new Promise(resolve => { + const t = setTimeout(() => { + clearTimeout(t); + resolve(true); + }, 1800); + }); + } + + public async promptPassword() { + const value = await promptPasswordElement( + this.shadowRoot?.querySelector('dialog #spinner') as HTMLElement + ); + return value; + } + + public async promptEmailPassword(ops?: { + hideEmail?: boolean; + hidePassword?: boolean; + }) { + const value = await promptEmailPasswordElement( + this.shadowRoot?.querySelector('dialog #spinner') as HTMLElement, + ops + ); + return value; + } + + public async promptBackup() { + const value = await promptToDownloadElement( + this.shadowRoot?.querySelector('dialog #spinner') as HTMLElement + ); + return value; + } + + public async promptSignoutWithBackup() { + const value = await promptSignoutElement( + this.shadowRoot?.querySelector('dialog #spinner') as HTMLElement + ); + return value; + } + + public async promptWalletType() { + const value = await promptWalletTypeElement( + this.shadowRoot?.querySelector('dialog #spinner') as HTMLElement + ); + return value; + } + + public async promptAuthMethods() { + ( + this.shadowRoot?.querySelector('dialog #spinner') as HTMLElement + ).style.display = 'none'; + ( + this.shadowRoot?.querySelector('dialog .buttonsList') as HTMLElement + ).style.display = 'block'; + } + + public async reset() { + const confirm = window.confirm( + `You are about to clear all data to create new Wallet. This will remove all your existing data and we will not be able to recover it if you don't have backup. You are confirming that you want to clear all data and create new Wallet?` + ); + if (!confirm) { + return; + } + // reset html + if (this.shadowRoot?.innerHTML) this.shadowRoot.innerHTML = ''; + this._ops = { + ...this._ops, + enabledSigninMethods: DEFAULT_SIGNIN_METHODS + }; + await this._render(); + // add event listener + this.connectedCallback(); + // remove "Create new Wallet" button if no auth method is enabled + const authMethod = await storageService.getItem( + KEYS.STORAGE_AUTH_METHOD_KEY + ); + if (!authMethod) { + this.shadowRoot?.querySelector('#create-new-wallet')?.remove(); + } + this.showModal(); + } +} diff --git a/src/lib/ui/dialog-element/index.ts b/src/lib/ui/dialog-element/index.ts new file mode 100644 index 00000000..d974a5a4 --- /dev/null +++ b/src/lib/ui/dialog-element/index.ts @@ -0,0 +1,289 @@ +import { FirebaseWeb3ConnectDialogElement } from '../../interfaces/dialog-element.interface'; +import { DialogUIOptions } from '../../interfaces/sdk.interface'; +import { HexaSigninDialogElement } from './dialogElement'; +import { KEYS, SigninMethod } from '../../constant'; +import { + authByImportPrivateKey, + authWithGoogle, + authWithEmailPwd, + authByImportSeed, + authWithEmailLink +} from '../../services/auth.servcie'; +import { promptImportPrivatekeyElement } from '../prompt-import-privatekey-element/prompt-import-privatekey-element'; +import { storageService } from '../../services/storage.service'; +import { promptImportSeedElement } from '../prompt-import-seed-element/prompt-import-seed-element'; +import { Logger } from '../../utils'; +import authProvider from '../../providers/auth/firebase'; + +const setupSigninDialogElement = async ( + ref: HTMLElement = document.body, + ops: DialogUIOptions +) => { + // check if element already defined + if (!customElements.get('firebase-web3connect-dialog')) { + customElements.define( + 'firebase-web3connect-dialog', + HexaSigninDialogElement + ); + } + // create dialog element with options as props + const dialogElement = document.createElement( + 'firebase-web3connect-dialog' + ) as FirebaseWeb3ConnectDialogElement; + // add `ops` as property + dialogElement.ops = ops; + ref.appendChild(dialogElement); + // remove "Create new Wallet" button if no auth method is enabled + const authMethod = await storageService.getItem(KEYS.STORAGE_AUTH_METHOD_KEY); + if (!authMethod) { + dialogElement.shadowRoot?.querySelector('#create-new-wallet')?.remove(); + } + return dialogElement; +}; + +const addAndWaitUIEventsResult = ( + dialogElement: FirebaseWeb3ConnectDialogElement +): Promise< + | { + uid?: string; + isAnonymous?: boolean; + authMethod: SigninMethod; + } + | undefined +> => { + return new Promise( + ( + resolve: ( + value: + | { + uid?: string; + isAnonymous?: boolean; + authMethod: SigninMethod; + } + | undefined + ) => void, + reject: (err: Error) => void + ) => { + // listen to connect event + dialogElement.addEventListener('connect', async e => { + const detail = (e as CustomEvent).detail; + Logger.log(`[INFO] connect event: `, detail); + // exclude cancel event { + if (detail === 'cancel') { + dialogElement.hideModal(); + await new Promise(resolve => setTimeout(resolve, 225)); + dialogElement.remove(); + resolve(undefined); + return; + } + // handle type of connection request + if (detail === 'connect-google') { + try { + ( + dialogElement.shadowRoot?.querySelector( + 'dialog #spinner' + ) as HTMLElement + ).style.display = 'block'; + // use service to request connection with google + const { uid } = await authWithGoogle(); + // await dialogElement.toggleSpinnerAsCheck(); + resolve({ + uid, + authMethod: detail as SigninMethod + }); + } catch (error: unknown) { + const message = + (error as Error)?.message || + 'An error occured. Please try again.'; + reject(new Error(`${message}`)); + return; + } + } + if (detail === 'connect-email') { + try { + const { password, email } = + await dialogElement.promptEmailPassword(); + if (!password || !email) { + throw new Error('Email and password are required to connect'); + } + // prompt to download private key if not already stored + const privateKey = await storageService.getItem( + KEYS.STORAGE_PRIVATEKEY_KEY + ); + const { withEncryption, skip } = !privateKey + ? await dialogElement.promptBackup() + : { withEncryption: false, skip: true }; + // use service to request connection with google + const { uid } = await authWithEmailPwd({ + email, + password, + skip, + withEncryption + }); + // await dialogElement.toggleSpinnerAsCheck(); + + resolve({ + uid, + authMethod: detail as SigninMethod + }); + } catch (error: unknown) { + const message = + (error as Error)?.message || + 'An error occured. Please try again.'; + reject(new Error(`${message}`)); + return; + } + } + if (detail === 'connect-email-link') { + // check if request coming from `standalone` browser app + const isStandaloneBrowserApp = window.matchMedia( + '(display-mode: standalone)' + ).matches; + // Standalone mode is not supported close the dialog as Cancel mode + if (isStandaloneBrowserApp) { + await new Promise(resolve => setTimeout(resolve, 225)); + alert(`Sorry this feature is not yet available in standalone mode. Please use "Connect with Google" or use this signin method from native browser instead.`); + dialogElement.hideModal(); + await new Promise(resolve => setTimeout(resolve, 225)); + dialogElement.remove(); + resolve(undefined); + return; + } + const { email } = await dialogElement.promptEmailPassword({ + hidePassword: true + }); + if (!email) { + reject(new Error('Email is required to connect')); + return; + } + try { + await authWithEmailLink({ + email, + url: dialogElement?.ops?.ops?.authProvider?.authEmailUrl + }); + // display message into DOM conatainer + // add HTML to explain the user to click on the link that will authenticate him + const finalStepElement = document.createElement('div'); + finalStepElement.innerHTML = ` +

+ Please check your email & click on the link to authenticate. +

+

+ Once authenticated, you will be prompted to provide a password + to lock your Wallet account from unauthorized access +

+ `; + dialogElement.shadowRoot + ?.querySelector('dialog #spinner') + ?.after(finalStepElement); + // listen to auth state change to manage dialog content + const unsubscribe = authProvider.getOnAuthStateChanged( + async user => { + if (user) { + finalStepElement.remove(); + unsubscribe(); + resolve({ + uid: user.uid, + isAnonymous: user.isAnonymous, + authMethod: detail as SigninMethod + }); + } + } + ); + } catch (error: unknown) { + dialogElement.hideModal(); + const message = + (error as Error)?.message || + 'An error occured. Please try again.'; + reject( + new Error(`Error while connecting with ${detail}: ${message}`) + ); + } + return; + } + if (detail === 'connect-wallet') { + try { + const walletType = await dialogElement.promptWalletType(); + Logger.log(`[INFO] Wallet type: `, walletType); + switch (walletType) { + case 'browser-extension': { + // const { uid } = await authWithExternalWallet(); + // await dialogElement.toggleSpinnerAsCheck(); + resolve({ + uid: undefined, + isAnonymous: true, + authMethod: detail as SigninMethod + }); + break; + } + case 'import-seed': { + // import seed + const { seed } = await promptImportSeedElement( + dialogElement?.shadowRoot?.querySelector( + '#spinner' + ) as HTMLElement + ); + Logger.log(`[INFO] Import seed: `, { + seed + }); + if (!seed) { + throw new Error('Seed is required to connect'); + } + const { uid } = await authByImportSeed({ + seed + }); + resolve({ + uid, + authMethod: detail as SigninMethod + }); + break; + } + case 'import-privatekey': { + // import private key and request password + const { privateKey, isEncrypted } = + await promptImportPrivatekeyElement( + dialogElement?.shadowRoot?.querySelector( + '#spinner' + ) as HTMLElement + ); + Logger.log(`[INFO] Import private key: `, { + privateKey, + isEncrypted + }); + if (!privateKey) { + throw new Error('Private key is required to connect'); + } + const { uid } = await authByImportPrivateKey({ + privateKey, + isEncrypted + }); + resolve({ + uid, + authMethod: detail as SigninMethod + }); + break; + } + default: + throw new Error('Invalid wallet type'); + } + } catch (error: unknown) { + const message = + (error as Error)?.message || + 'An error occured. Please try again.'; + reject(new Error(`Error while connecting: ${message}`)); + } + } + }); + dialogElement.addEventListener('reset', async () => { + await storageService.clear(); + dialogElement.reset(); + }); + } + ); +}; + +export { + HexaSigninDialogElement, + setupSigninDialogElement, + addAndWaitUIEventsResult +}; diff --git a/src/lib/ui/prompt-download-element/prompt-download-element.css b/src/lib/ui/prompt-download-element/prompt-download-element.css new file mode 100644 index 00000000..17c2e978 --- /dev/null +++ b/src/lib/ui/prompt-download-element/prompt-download-element.css @@ -0,0 +1,3 @@ +.button__skip { + cursor: pointer; +} diff --git a/src/lib/ui/prompt-download-element/prompt-download-element.ts b/src/lib/ui/prompt-download-element/prompt-download-element.ts new file mode 100644 index 00000000..e1ce91bc --- /dev/null +++ b/src/lib/ui/prompt-download-element/prompt-download-element.ts @@ -0,0 +1,81 @@ +import { CheckboxElement } from '../checkbox-element/checkbox-element'; +// import css from './prompt-download-element.css'; + +const css = `.button__skip { + cursor: pointer; +} +`; + +export const promptToDownloadElement = async ( + ref: HTMLElement +): Promise<{ + withEncryption?: boolean; + skip?: boolean; +}> => { + const container = document.createElement('div'); + container.classList.add('prompt-container'); + ref.after(container); + ref.style.display = 'none'; + + return new Promise(resolve => { + container.innerHTML = ` + +

+ + Backup your wallet PrivateKey + +

+

+ Download your backup file. We don't keep any copies of your private key, so make sure to keep it safe! + It's the only way to recover your wallet. +

+ + ${CheckboxElement({ + label: 'Encrypt backup file', + id: 'toggle__encription', + checked: true + })} + + + +

skip

+ `; + + const toggleEncription = container.querySelector( + '#toggle__encription' + ) as HTMLInputElement; + const buttonSkip = container.querySelector( + '.button__skip' + ) as HTMLButtonElement; + buttonSkip.addEventListener('click', e => { + e.preventDefault(); + resolve({ + skip: true + }); + container.remove(); + ref.style.display = 'block'; + }); + + const buttonDownload = container.querySelector( + '#button__download' + ) as HTMLButtonElement; + buttonDownload.addEventListener('click', async () => { + resolve({ + withEncryption: toggleEncription.checked + }); + container.remove(); + ref.style.display = 'block'; + }); + + // manage dialog close btn + const mainCloseBtn = ref.closest('dialog')?.querySelector('#cancel'); + if (mainCloseBtn) { + mainCloseBtn.addEventListener('click', e => { + e.preventDefault(); + resolve({ skip: true }); + container.remove(); + ref.style.display = 'block'; + }); + } + }); +}; diff --git a/src/lib/ui/prompt-email-password-element/prompt-email-password-element.ts b/src/lib/ui/prompt-email-password-element/prompt-email-password-element.ts new file mode 100644 index 00000000..a16dc10f --- /dev/null +++ b/src/lib/ui/prompt-email-password-element/prompt-email-password-element.ts @@ -0,0 +1,157 @@ +import { storageService } from '../../services/storage.service'; + +const isValideInputs = ( + inputs: { + inputPassword: HTMLInputElement; + inputEmail?: HTMLInputElement; + }, + ops?: { + hideEmail?: boolean; + hidePassword?: boolean; + } +) => { + const { inputPassword, inputEmail } = inputs; + const { hideEmail, hidePassword } = ops || {}; + const minPasswordLength = 6; + const maxPasswordLength = 32; + const isValidEmail = hideEmail ? true : inputEmail?.checkValidity(); + const isValidPassword = hidePassword + ? true + : !hidePassword && + inputPassword?.value.length >= minPasswordLength && + inputPassword?.value.length <= maxPasswordLength; + return isValidEmail && isValidPassword; +}; + +export const promptEmailPasswordElement = async ( + ref: HTMLElement, + ops?: { + hideEmail?: boolean; + hidePassword?: boolean; + } +): Promise<{ + password?: string; + email?: string; +}> => { + const { hideEmail, hidePassword } = ops || {}; + console.log({ hideEmail, hidePassword }); + const minPasswordLength = 4; + const maxPasswordLength = 32; + const isCreating = !(await storageService.isExistingPrivateKeyStored()); + + return new Promise(resolve => { + const container = document.createElement('div'); + container.classList.add('prompt-container'); + const html = ` + +
+ ${isCreating ? '

Create a new Wallet

' : '

Connect to your Wallet

'} +

+ ${ + isCreating + ? `Enter your ${hideEmail ? '' : 'email '}${hidePassword ? '' : '& password'} to create a new wallet. ${hidePassword ? '' : `The password you enter will only be used to authenticate you.`}` + : `Enter your ${hideEmail ? '' : 'email '}${hidePassword ? '' : '& password'}` + } +

+
+ ${ + hideEmail + ? '' + : `` + } + ${ + hidePassword + ? '' + : `` + } + + + `; + container.innerHTML = html; + ref.after(container); + ref.style.display = 'none'; + + const inputPassword = container.querySelector( + '.prompt__input.password' + ) as HTMLInputElement; + const inputEmail = container.querySelector( + '.prompt__input.email' + ) as HTMLInputElement; + const button = container.querySelector( + '.prompt__button' + ) as HTMLButtonElement; + + // manage validation of input to enable button + inputPassword?.addEventListener('input', () => { + const isValid = isValideInputs({ inputPassword, inputEmail }, ops); + button.disabled = !isValid; + }); + inputEmail?.addEventListener('input', () => { + const isValid = isValideInputs({ inputPassword, inputEmail }, ops); + button.disabled = !isValid; + }); + + button.addEventListener('click', () => { + resolve({ + password: inputPassword?.value, + email: inputEmail?.value + }); + container.remove(); + // prevent flash ui. ref will be hiden to display backup step + // if is creating wallet. This is why we dont switch to display block + // if (!isCreating) { + ref.style.display = 'block'; + // } + }); + }); +}; diff --git a/src/lib/ui/prompt-import-privatekey-element/prompt-import-privatekey-element.ts b/src/lib/ui/prompt-import-privatekey-element/prompt-import-privatekey-element.ts new file mode 100644 index 00000000..c724f3bd --- /dev/null +++ b/src/lib/ui/prompt-import-privatekey-element/prompt-import-privatekey-element.ts @@ -0,0 +1,71 @@ +import { CheckboxElement } from '../checkbox-element/checkbox-element'; + +export const promptImportPrivatekeyElement = async ( + ref: HTMLElement +): Promise<{ + privateKey: string; + isEncrypted: boolean; +}> => { + const container = document.createElement('div'); + container.classList.add('prompt-container'); + ref.after(container); + ref.style.display = 'none'; + container.innerHTML = ` +
+

+ Import Privatekey backup file
+ & Authenticate with Google to continue +

+
+ ${CheckboxElement({ + label: 'Encrypted backup file', + id: 'toggle__encription' + })} + + +
+ `; + + const buttonImportPrivatekey = container.querySelector( + '#button__import_privatekey' + ) as HTMLButtonElement; + const inputImportFile = container.querySelector( + '#input__import_file' + ) as HTMLInputElement; + const toggleEncription = container.querySelector( + '#toggle__encription' + ) as HTMLInputElement; + + const resutl = await new Promise<{ + privateKey: string; + isEncrypted: boolean; + }>((resolve, reject) => { + buttonImportPrivatekey.addEventListener('click', e => { + e.preventDefault(); + inputImportFile.click(); + }); + + inputImportFile.addEventListener('change', async () => { + const file = inputImportFile.files?.[0]; + if (!file) return; + try { + const content = await file.text(); + const isEncrypted = toggleEncription.checked; + resolve({ + privateKey: content, + isEncrypted + }); + container.remove(); + ref.style.display = 'block'; + } catch (error) { + reject(error); + container.remove(); + ref.style.display = 'block'; + } + }); + }); + + return resutl; +}; diff --git a/src/lib/ui/prompt-import-seed-element/prompt-import-seed-element.css b/src/lib/ui/prompt-import-seed-element/prompt-import-seed-element.css new file mode 100644 index 00000000..948b7de0 --- /dev/null +++ b/src/lib/ui/prompt-import-seed-element/prompt-import-seed-element.css @@ -0,0 +1,31 @@ +.prompt__message { + margin-bottom: 1.5rem; +} +.prompt__message h4 { + margin: 0 auto -0.7rem; + font-size: 1.3em; +} +#input__seed, +#input__password { + display: block; + min-height: 50px; + width: 100%; + max-width: 300px; + margin: 0rem auto 0.5rem; + text-align: center; + color: var(--text-color); + background: var(--button-background); + border: var(--dialog-border); + border-radius: 12px; + padding: 12px 16px; + font-size: 1em; + font-family: inherit; +} + +#input__seed { + min-height: 110px; +} +#input__seed::placeholder { + text-align: center; + transform: translateY(50%); +} diff --git a/src/lib/ui/prompt-import-seed-element/prompt-import-seed-element.ts b/src/lib/ui/prompt-import-seed-element/prompt-import-seed-element.ts new file mode 100644 index 00000000..7cb6b54d --- /dev/null +++ b/src/lib/ui/prompt-import-seed-element/prompt-import-seed-element.ts @@ -0,0 +1,79 @@ +// import css from './prompt-import-seed-element.css'; + +const css = `.prompt__message { + margin-bottom: 1.5rem; +} +.prompt__message h4 { + margin: 0 auto -0.7rem; + font-size: 1.3em; +} +#input__seed, +#input__password { + display: block; + min-height: 50px; + width: 100%; + max-width: 300px; + margin: 0rem auto 0.5rem; + text-align: center; + color: var(--text-color); + background: var(--button-background); + border: var(--dialog-border); + border-radius: 12px; + padding: 12px 16px; + font-size: 1em; + font-family: inherit; +} + +#input__seed { + min-height: 110px; +} +#input__seed::placeholder { + text-align: center; + transform: translateY(50%); +} +`; + +export const promptImportSeedElement = async ( + ref: HTMLElement +): Promise<{ + seed: string; +}> => { + const container = document.createElement('div'); + container.classList.add('prompt-container'); + ref.after(container); + ref.style.display = 'none'; + container.innerHTML = ` + +
+

Import Secret Seed

+

Access your Wallet with secret seed & authenticate with Google. +

+

+ The password you enter will encrypts your seed & gives access to your funds. Please store your password in a safe place. We don’t keep your information & can’t restore it. +

+
+
+
+ +
+ +
+ `; + + const inputSeed = container.querySelector('#input__seed') as HTMLInputElement; + const buttonImportSeed = container.querySelector( + '#button__import_seed' + ) as HTMLButtonElement; + + return new Promise(resolve => { + buttonImportSeed.addEventListener('click', () => { + resolve({ + seed: inputSeed.value, + }); + container.remove(); + ref.style.display = 'block'; + }); + }); +}; diff --git a/src/lib/ui/prompt-password-element/prompt-password-element.ts b/src/lib/ui/prompt-password-element/prompt-password-element.ts new file mode 100644 index 00000000..a2ea7ac9 --- /dev/null +++ b/src/lib/ui/prompt-password-element/prompt-password-element.ts @@ -0,0 +1,165 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { storageService } from '../../services/storage.service'; + +export const promptPasswordElement = async ( + ref: HTMLElement +): Promise => { + const minPasswordLength = 6; + const maxPasswordLength = 32; + + const isCreating = !(await storageService.isExistingPrivateKeyStored()); + console.log('isCreating', isCreating); + const isValideInputs = (value: string, confirmeValue?: string) => { + if (!confirmeValue) { + return ( + value.length > minPasswordLength - 1 && + value.length < maxPasswordLength - 1 + ); + } + return ( + value.length >= minPasswordLength - 1 && + confirmeValue?.length > minPasswordLength - 1 && + value === confirmeValue && + value.length < maxPasswordLength - 1 + ); + }; + + const focusNextInput = (input: HTMLInputElement) => { + // focus next input + const next = input.nextElementSibling as HTMLInputElement | null; + if (next) { + next.focus(); + } else { + input.blur(); + } + }; + + return new Promise(resolve => { + const container = document.createElement('div'); + container.classList.add('prompt-container'); + const html = ` + +
+ ${isCreating ? '

Create a new Wallet

' : '

Connect to your Wallet

'} +

${ + isCreating ? 'Protect your Wallet with a password' : 'Welcome back!' + }

+

+ ${ + isCreating + ? `The password you enter encrypts your private key & gives access to your funds. Please store your password in a safe place. We don’t keep your information & can’t restore it.` + : `Unlock with your password.` + } +

+
+
+ + + + + + +
+ + ${ + !isCreating + ? `` + : '' + } + + `; + container.innerHTML = html; + ref.after(container); + ref.style.display = 'none'; + + const inputs = Array.from( + container.querySelectorAll('.prompt__input.single') + ) as HTMLInputElement[]; + const button = container.querySelector( + '.prompt__button' + ) as HTMLButtonElement; + button.addEventListener('click', () => { + resolve(inputs.map(i => i.value).join('')); + container.remove(); + // prevent flash ui. ref will be hiden to display backup step + // if is creating wallet. This is why we dont switch to display block + // if (!isCreating) { + // ref.style.display = 'block'; + // } + ref.style.display = 'block'; + }); + + // manage validation of input to enable button + for (let index = 0; index < inputs.length; index++) { + const input = inputs[index]; + input.addEventListener('focus', e => { + // clear input value on focus and prevent autofill & preventDefault + e.preventDefault(); + input.value = ''; + const isValid = isValideInputs(inputs.map(i => i.value).join('')); + button.disabled = !isValid; + }); + input.addEventListener('input', () => { + if (input.value !== '' && input.value.length === 1) { + focusNextInput(input); + } + const isValid = isValideInputs(inputs.map(i => i.value).join('')); + button.disabled = !isValid; + }); + } + + // manage reset & create new wallet + const createBtn = container.querySelector( + '#create-new-wallet' + ) as HTMLButtonElement; + createBtn?.addEventListener('click', () => { + resolve(null); + container.remove(); + ref.style.display = 'block'; + }); + }); +}; diff --git a/src/lib/ui/prompt-signout-element/prompt-signout-element.css b/src/lib/ui/prompt-signout-element/prompt-signout-element.css new file mode 100644 index 00000000..21c0ff57 --- /dev/null +++ b/src/lib/ui/prompt-signout-element/prompt-signout-element.css @@ -0,0 +1,10 @@ +.button__skip { + cursor: pointer; +} +p.information { + margin: 12px auto 16px; + border: solid 1px rgb(255, 217, 0); + background: rgb(255 215 0 / 25%); + padding: 0.5rem 0.25rem; + border-radius: 3px; +} diff --git a/src/lib/ui/prompt-signout-element/prompt-signout-element.ts b/src/lib/ui/prompt-signout-element/prompt-signout-element.ts new file mode 100644 index 00000000..aa8ec5f6 --- /dev/null +++ b/src/lib/ui/prompt-signout-element/prompt-signout-element.ts @@ -0,0 +1,103 @@ +import { CheckboxElement } from '../checkbox-element/checkbox-element'; +// import css from './prompt-signout-element.css'; + +const css = `.button__skip { + cursor: pointer; +} +p.information { + margin: 12px auto 16px; + border: solid 1px rgb(255, 217, 0); + background: rgb(255 215 0 / 25%); + padding: 0.5rem 0.25rem; + border-radius: 3px; +} +`; + +export const promptSignoutElement = async ( + ref: HTMLElement, + ops?: { + html?: string; + } +): Promise<{ + withEncryption?: boolean; + skip?: boolean; + clearStorage?: boolean; + cancel?: boolean; +}> => { + const { html } = ops || {}; + const container = document.createElement('div'); + container.classList.add('prompt-container'); + ref.after(container); + ref.style.display = 'none'; + + return new Promise(resolve => { + container.innerHTML = ` + + ${ + html || + ` +

+ Signout +

+

+ You are about to signout from your Wallet and your Private Key still remains encrypted on this device unless you remove it. +

+ ${CheckboxElement({ + label: 'Download encrypted backup file', + id: 'toggle__download', + checked: true + })} + ${CheckboxElement({ + label: 'Remove data from device', + id: 'toggle__clear_data' + })} + + + +

cancel

+ ` + } + + `; + + const toggleDownload = container.querySelector( + '#toggle__download' + ) as HTMLInputElement; + const toggleClear = container.querySelector( + '#toggle__clear_data' + ) as HTMLInputElement; + const buttonCancel = container.querySelector( + '.button__cancel' + ) as HTMLButtonElement; + buttonCancel.addEventListener('click', e => { + e.preventDefault(); + resolve({ cancel: true }); + container.remove(); + ref.style.display = 'block'; + }); + + const buttonDownload = container.querySelector( + '#button__signout' + ) as HTMLButtonElement; + buttonDownload.addEventListener('click', async () => { + resolve({ + withEncryption: toggleDownload.checked, + skip: !toggleDownload.checked ? true : false, + clearStorage: toggleClear.checked + }); + container.remove(); + ref.style.display = 'block'; + }); + + // manage dialog close btn + const mainCloseBtn = ref.closest('dialog')?.querySelector('#cancel'); + if (mainCloseBtn) { + mainCloseBtn.addEventListener('click', e => { + e.preventDefault(); + resolve({ cancel: true }); + container.remove(); + ref.style.display = 'block'; + }); + } + }); +}; diff --git a/src/lib/ui/prompt-wallet-type-element/prompt-wallet-type-element.css b/src/lib/ui/prompt-wallet-type-element/prompt-wallet-type-element.css new file mode 100644 index 00000000..a95f0e19 --- /dev/null +++ b/src/lib/ui/prompt-wallet-type-element/prompt-wallet-type-element.css @@ -0,0 +1,14 @@ + +.prompt__wallet_type button { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; +} + +.prompt__wallet_type button svg { + width: 28px; + height: 28px; + color: var(--text-color); +} diff --git a/src/lib/ui/prompt-wallet-type-element/prompt-wallet-type-element.ts b/src/lib/ui/prompt-wallet-type-element/prompt-wallet-type-element.ts new file mode 100644 index 00000000..3761aace --- /dev/null +++ b/src/lib/ui/prompt-wallet-type-element/prompt-wallet-type-element.ts @@ -0,0 +1,85 @@ +// import extensionIcon from '../../assets/svg/extension-puzzle-outline.svg'; +// import downloadIcon from '../../assets/svg/download-outline.svg'; +// import keyOutlineIcon from '../../assets/svg/key-outline.svg'; +// import css from './prompt-wallet-type-element.css'; + +const extensionIcon = ``; +const downloadIcon = ``; +const keyOutlineIcon = ``; + +const css = ` +.prompt__wallet_type button { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; +} + +.prompt__wallet_type button svg { + width: 28px; + height: 28px; + color: var(--text-color); +} +`; + +export const promptWalletTypeElement = async ( + ref: HTMLElement +): Promise<'browser-extension' | 'import-privatekey' | 'import-seed'> => { + const container = document.createElement('div'); + container.classList.add('prompt-container'); + ref.after(container); + ref.style.display = 'none'; + container.innerHTML = ` + +
+ + + +
+ `; + + const buttonExternalWallet = container.querySelector( + '#button__external_wallet' + ) as HTMLButtonElement; + const buttonImportWallet = container.querySelector( + '#button__import_wallet' + ) as HTMLButtonElement; + const buttonImportSeed = container.querySelector( + '#button__import_seed' + ) as HTMLButtonElement; + + return new Promise(resolve => { + buttonExternalWallet.addEventListener('click', () => { + resolve('browser-extension'); + container.remove(); + ref.style.display = 'block'; + }); + + buttonImportWallet.addEventListener('click', () => { + // request `import-seed` or `import-privatekey` + // based on user selection + // this will be handled in the next step + resolve('import-privatekey'); + container.remove(); + // ref.style.display = 'block'; + }); + + buttonImportSeed.addEventListener('click', () => { + resolve('import-seed'); + container.remove(); + ref.style.display = 'block'; + }); + }); +}; diff --git a/src/lib/ui/spinner-element/spinner-element.ts b/src/lib/ui/spinner-element/spinner-element.ts new file mode 100644 index 00000000..02cabbe4 --- /dev/null +++ b/src/lib/ui/spinner-element/spinner-element.ts @@ -0,0 +1,103 @@ +export const SpinnerElement = () => { + return ` + + + + + `; +}; diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 00000000..f97b48db --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,50 @@ +export const parseApiKey = (hex: string) => { + // converte hex string to utf-8 string + if (!hex || hex.length <= 0) { + throw new Error('Unexisting API key'); + } + const json = Buffer.from(hex, 'hex').toString('utf-8'); + const apiKey = JSON.parse(json); + return apiKey as any; +}; + +/** + * Logger function + */ +export const Logger = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + log: (...args: any[]) => { + if (process.env.NEXT_PUBLIC_APP_IS_PROD === 'true') { + return; + } + console.log(...args); + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + error: (...args: any[]) => { + if (process.env.NEXT_PUBLIC_APP_IS_PROD === 'true') { + return; + } + console.error(...args); + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + warn: (...args: any[]) => { + if (process.env.NEXT_PUBLIC_APP_IS_PROD === 'true') { + return; + } + console.warn(...args); + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + info: (...args: any[]) => { + if (process.env.NEXT_PUBLIC_APP_IS_PROD === 'true') { + return; + } + console.info(...args); + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + debug: (...args: any[]) => { + if (process.env.NEXT_PUBLIC_APP_IS_PROD === 'true') { + return; + } + console.debug(...args); + } +}; diff --git a/src/lib/vite-env.d.ts b/src/lib/vite-env.d.ts new file mode 100755 index 00000000..55f00d62 --- /dev/null +++ b/src/lib/vite-env.d.ts @@ -0,0 +1,11 @@ +// /// + +// // https://medium.com/@sampsonjoliver/importing-html-files-from-typescript-bd1c50909992 +// declare module '*.html' { +// const value: string; +// export default value +// } +// declare module '*.css' { +// const value: string; +// export default value +// } \ No newline at end of file diff --git a/src/network/Avalanche.ts b/src/network/Avalanche.ts deleted file mode 100644 index d77c7dbd..00000000 --- a/src/network/Avalanche.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Magic } from 'magic-sdk'; -import { AvalancheExtension } from '@magic-ext/avalanche'; -import { Avalanche, BinTools, Buffer, BN } from '@avalabs/avalanchejs'; - -import { MagicWalletUtils } from "./MagicWallet"; -import { CHAIN_DEFAULT, NETWORK } from "../constants/chains"; -import { RPC_NODE_OPTIONS } from "../servcies/magic"; - -// // The EVM (Ethereum Virtual Machine) class extends the abstract MagicWallet class -// export class EVM extends MagicWallet { -// // Web3 instance to interact with the Ethereum blockchain -// web3Provider: Avalanche | null = null; - -// // The network for this class instance -// public network: NETWORK; - -// constructor(network: NETWORK) { -// super(); -// // Setting the network type -// this.network = network; -// // Calling the initialize method from MagicWallet -// this.initialize(); -// } - -// // Asynchronous method to initialize the Web3 instance -// async initializeWeb3(): Promise { -// const RPC_NODE = RPC_NODE_OPTIONS.find((n) => n.chainId === this.network); -// // const provider = await this.magic?.wallet.getProvider(); // Get the provider from the magic -// this.web3Provider = new Avalanche(RPC_NODE?.rpcUrl, 443, 'https', 4, 'X'); // Initializing the Web3 instance -// } - -// } diff --git a/src/network/Bitcoin.ts b/src/network/Bitcoin.ts deleted file mode 100644 index 376ad220..00000000 --- a/src/network/Bitcoin.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { BitcoinExtension } from "@magic-ext/bitcoin"; -import { MagicWalletUtils } from "./MagicWallet"; -import { NETWORK } from "@/constants/chains"; -import { RPC_NODE_OPTIONS, getMagic } from "@/servcies/magic"; - - -export class BitcoinWalletUtils extends MagicWalletUtils { - - public web3Provider: null = null; - public isMagicWallet = true; - - constructor(network: NETWORK) { - super(); - this.network = network; - } - - async _initializeWeb3() { - console.log(`[INFO] Bitcoin: initializeWeb3...`); - const magic = await getMagic({chainId: this.network}); - const RPC_NODE = RPC_NODE_OPTIONS.find((n) => n.chainId === this.network); - if (!RPC_NODE) { - throw new Error("RPC Node config fail. Incorect params, "); - } - // get account address and wallet type - try { - const info = await magic.user.getInfo() || undefined; - this.walletAddress = info?.publicAddress|| undefined; - } catch (error) { - console.log('error', error); - } - } - - async loadBalances() { - throw new Error("loadBalances() - Method not implemented."); - } - - async sendToken(destination: string, decimalAmount: number, contactAddress: string) { - throw new Error("sendToken() - Method not implemented."); - } -} \ No newline at end of file diff --git a/src/network/Cosmos.ts b/src/network/Cosmos.ts deleted file mode 100644 index ada8de3e..00000000 --- a/src/network/Cosmos.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { SDKBase } from "@magic-sdk/provider" -import { CosmosExtension } from '@magic-ext/cosmos'; -import { StargateClient } from '@cosmjs/stargate'; - -import { MagicWalletUtils } from "./MagicWallet"; -import { CHAIN_DEFAULT, NETWORK } from "../constants/chains"; -import { RPC_NODE_OPTIONS, getMagic } from "../servcies/magic"; -import { IAsset } from "../interfaces/asset.interface"; - -// // The EVM (Ethereum Virtual Machine) class extends the abstract MagicWallet class -// export class Cosmos extends MagicWallet { -// // Web3 instance to interact with the Ethereum blockchain -// web3Provider: StargateClient|null = null; - -// // The network for this class instance -// public network: NETWORK; - -// public assets: IAsset[] = []; - -// constructor(network: NETWORK) { -// super(); -// // Setting the network type -// this.network = network; -// // Calling the initialize method from MagicWallet -// this.initialize(); -// } - -// // Asynchronous method to initialize the Web3 instance -// async initializeWeb3(): Promise { -// const RPC_NODE = RPC_NODE_OPTIONS.find((n) => n.chainId === this.network); -// if (!RPC_NODE) { -// throw new Error("RPC Node config fail. Incorect params, "); -// } -// this.web3Provider = await StargateClient.connect(RPC_NODE?.rpcUrl); -// } - -// public override async connect() { -// // prompt to get email -// const email = prompt('Enter your email'); -// if (!email) { -// throw new Error("User not logged in"); -// } -// try { -// await this.loginWithOTP(email); -// const infos = await this.getInfo(); -// console.log("connect infos", infos); -// this.walletAddress = infos?.publicAddress; -// // this.assets = await this._fetchUserAssets(); -// } catch (error) { -// console.log("connect error", error); -// } -// } - -// protected async _fetchUserAssets(): Promise { -// return []; -// // const { publicAddress } = (await this.getInfo()) || {}; -// // if (!publicAddress) return []; -// // const assets = await fetchUserAssets(publicAddress); -// // if (!assets) return []; -// // return assets; -// } - - -// public async sendTx(ops: { -// toAddress: string; -// amount: number; -// }): Promise { -// if (!this.walletAddress) { -// throw new Error("User not logged in"); -// } -// const {toAddress, amount } = ops; -// const message = [ -// { -// typeUrl: '/cosmos.bank.v1beta1.MsgSend', -// value: { -// fromAddress: this.walletAddress, -// toAddress, -// amount: [ -// { -// amount: String(amount), -// denom: 'atom', -// }, -// ], -// }, -// }, -// ]; -// const fee = { -// amount: [{ denom: 'uatom', amount: '500' }], -// gas: '200000', -// }; -// if (!this._magicExtention) { -// throw new Error("Magic extention not found"); -// } -// const signTransactionResult = await this._magicExtention.sign(message, fee); -// console.log('signTransactionResult', signTransactionResult); -// return signTransactionResult; -// } -// } - -/** - * Cosmos Wallet Utils - * Support for Cosmos Wallet - * StargateClient docs: https://cosmos.github.io/cosmjs/latest/stargate/classes/StargateClient.html - */ -export class CosmosWalletUtils extends MagicWalletUtils { - - public web3Provider: StargateClient | null = null; - public isMagicWallet = true; - constructor(network: NETWORK) { - super(); - this.network = network; - } - - async _initializeWeb3() { - const magic = await getMagic({chainId: this.network}); - const RPC_NODE = RPC_NODE_OPTIONS.find((n) => n.chainId === this.network); - if (!RPC_NODE) { - throw new Error("RPC Node config fail. Incorect params, "); - } - const web3Provider = await StargateClient.connect(RPC_NODE?.rpcUrl); - // this.web3Provider = web3Provider; - // get account address and wallet type - try { - const info = await magic.user.getInfo() || undefined; - this.walletAddress = info?.publicAddress|| undefined; - } catch (error) { - console.log('error', error); - } - } - - async loadBalances() { - throw new Error("loadBalances() - Method not implemented."); - } - - async sendToken(destination: string, decimalAmount: number, contactAddress: string) { - throw new Error("sendToken() - Method not implemented."); - } -} \ No newline at end of file diff --git a/src/network/EVM.ts b/src/network/EVM.ts deleted file mode 100644 index dabb8b1b..00000000 --- a/src/network/EVM.ts +++ /dev/null @@ -1,159 +0,0 @@ -import { ethers } from "ethers"; -import { NETWORK } from "../constants/chains"; -import { getTokensBalances } from "../servcies/ankr.service"; -import { MagicWalletUtils } from "./MagicWallet"; -import { getMagic } from "@/servcies/magic"; -import { getTokensPrice } from "@/servcies/lifi.service"; - -/** - * Function tha takes wallet address and fetches all assets for that wallet - * using Ankr API. It also fetches token price from LiFi API if Ankr response contains - * token with balance > 0 && balanceUsd === 0 && priceUsd === 0 - * This ensures that all tokens have price in USD and the total balance is calculated correctly - * for each token that user has in the wallet. - */ -const fetchUserAssets = async (walletAddress: string, force?: boolean) => { - console.log(`[INFO] fetchUserAssets()`, walletAddress); - if (!walletAddress) return null; - const assets = await getTokensBalances([], walletAddress, force); - // remove elements with 0 balance and add to new arrany using extracting - const assetWithBalanceUsd = [], - assetsWithoutBalanceUsd = []; - for (let i = 0; i < assets.length; i++) { - const asset = assets[i]; - (asset.balanceUsd === 0 && asset.balance > 0) - ? assetsWithoutBalanceUsd.push(asset) - : assetWithBalanceUsd.push(asset); - } - // get token price for tokens without balanceUsd - const tokenWithbalanceUsd = await getTokensPrice(assetsWithoutBalanceUsd); - return [ - ...assetWithBalanceUsd, - ...tokenWithbalanceUsd - ]; -}; - -export class EVMWalletUtils extends MagicWalletUtils { - public web3Provider: ethers.providers.Web3Provider | null = null; - public isMagicWallet: boolean = true; - - constructor(network: NETWORK) { - super(); - this.network = network; - } - - async _initializeWeb3() { - const magic = await getMagic({ chainId: this.network }); - const provider = await magic.wallet.getProvider(); - const web3Provider = new ethers.providers.Web3Provider(provider, "any"); - this.web3Provider = web3Provider; - // detect if is metamask and set correct network - if ( - web3Provider?.connection?.url === "metamask" || - web3Provider.provider.isMetaMask - ) { - this.isMagicWallet = false; - await this._setMetamaskNetwork(); - } else { - this.isMagicWallet = true; - } - // get account address and wallet type - try { - const signer = web3Provider?.getSigner(); - this.walletAddress = (await signer?.getAddress()) || undefined; - } catch (error) { - console.error( - "[ERROR] User is not connected. Unable to get wallet address.", - error - ); - // return; - } - } - - async loadBalances(force?: boolean) { - if (!this.walletAddress) return; - const assets = await fetchUserAssets(this.walletAddress, force); - if (!assets) return; - this.assets = assets; - } - - async sendToken(destination: string, decimalAmount: number, contactAddress: string) { - if(!this.web3Provider) { - throw new Error("Web3Provider is not initialized"); - } - try { - console.log({ - destination, decimalAmount, contactAddress - }) - const signer = this.web3Provider.getSigner(); - const from = await signer.getAddress(); - const amount = ethers.utils.parseUnits(decimalAmount.toString(), 18); // Convert 1 ether to wei - const contract = new ethers.Contract(contactAddress, ["function transfer(address, uint256)"], signer); - - const data = contract.interface.encodeFunctionData("transfer", [destination, amount] ); - - const tx = await signer.sendTransaction({ - to: destination, - value: amount, - // data - }); - const receipt = await tx.wait(); - // // Load token contract - // const tokenContract = new ethers.Contract(contactAddress, ['function transfer(address, uint256)'], signer); - - // // Send tokens to recipient - // const transaction = await tokenContract.transfer(destination, amount); - // const receipt = await transaction.wait(); - // console.log(receipt); - - - - //Define the data parameter - // const data = contract.interface.encodeFunctionData("transfer", [destination, amount] ) - // const tx = await signer.sendTransaction({ - // to: contactAddress, - // from, - // value: ethers.utils.parseUnits("0.000", "ether"), - // data: data - // }); - // // const tx = await contract.transfer(destination, amount); - // // Wait for transaction to be mined - // const receipt = await tx.wait(); - return receipt; - } catch (err: any) { - console.error(err); - throw new Error("Error during sending token"); - } - } - - private async _setMetamaskNetwork() { - if (!this.web3Provider) { - throw new Error("Web3Provider is not initialized"); - } - // check current network is same as selected network - const network = await this.web3Provider.getNetwork(); - if (network.chainId === this.network) { - return; - } - // switch network with ether - try { - await this.web3Provider.send("wallet_switchEthereumChain", [ - { chainId: ethers.utils.hexValue(this.network) }, - ]); - } catch (error) { - throw new Error( - `Error during network setting. Please switch to ${this.network} network and try again.` - ); - } - } - - async estimateGas() { - // const limit = await provider.estimateGas({ - // from: signer.address, - // to: tokenContract, - // value: ethers.utils.parseUnits("0.000", "ether"), - // data: data - - // }); - } -} diff --git a/src/network/MagicWallet.ts b/src/network/MagicWallet.ts deleted file mode 100644 index c8384dd1..00000000 --- a/src/network/MagicWallet.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { CHAIN_DEFAULT, NETWORK } from "../constants/chains"; -import { connect, disconnect } from "../servcies/magic"; -import { IAsset } from "../interfaces/asset.interface"; -import { Web3ProviderType } from "@/interfaces/web3.interface"; - - -// Abstract class to handle magic network-specific operations -export abstract class MagicWalletUtils { - - public get walletAddress():string|undefined { - return this._walletAddress; - }; - public set walletAddress(walletAddress: string | undefined) { - this._walletAddress = walletAddress; - } - public get network(): NETWORK { - return this._network; - }; - public set network(network: NETWORK) { - this._network = network; - } - public get assets(): IAsset[] { - return this._assets; - }; - public set assets(assets: IAsset[]) { - this._assets = assets; - } - private _walletAddress: string | undefined; - private _network!: NETWORK; - private _assets: IAsset[] = []; - - public abstract web3Provider: Web3ProviderType | null; - public abstract isMagicWallet: boolean; - public abstract loadBalances(force?: boolean): Promise; - public abstract sendToken(destination: string, decimalAmount: number, contactAddress: string): Promise; - protected abstract _initializeWeb3(): Promise; - - /** - * Static method to create MagicWallet instance based on network type - * @param network Chain ID as number - * @returns - */ - public static async create(network: NETWORK = CHAIN_DEFAULT.id): Promise { - let walletUtil: MagicWalletUtils; - switch (network) { - // case NETWORK.avalanche: { - // const { Avalanche } = require("./Avalanche"); - // return new Avalanche(network); - // break; - // } - case NETWORK.bitcoin: { - const { BitcoinWalletUtils } = require("./Bitcoin"); - walletUtil = new BitcoinWalletUtils(network); - break; - } - case NETWORK.cosmos: { - const { CosmosWalletUtils } = require("./Cosmos"); - walletUtil = new CosmosWalletUtils(network); - break; - } - case NETWORK.solana: { - const { SolanaWalletUtils } = require("./Solana"); - walletUtil = new SolanaWalletUtils(network); - break; - } - default: { - const { EVMWalletUtils } = require("./EVM"); - walletUtil = new EVMWalletUtils(network); - break; - } - } - await walletUtil._initializeWeb3(); - return walletUtil; - } - - async connect(ops?: { - email: string; - }) { - const address = await connect(ops); - if (!address) { - throw new Error("Connect wallet fail"); - } - await this._initializeWeb3(); - this.walletAddress = address; - return this.walletAddress; - } - - async disconnect() { - this.walletAddress = undefined; - this.assets = []; - return disconnect(); - } - -} \ No newline at end of file diff --git a/src/network/Solana.ts b/src/network/Solana.ts deleted file mode 100644 index 300f9f54..00000000 --- a/src/network/Solana.ts +++ /dev/null @@ -1,49 +0,0 @@ - - -import { Connection, Transaction} from '@solana/web3.js'; -import { MagicWalletUtils } from "./MagicWallet"; -import { RPC_NODE_OPTIONS, getMagic } from "../servcies/magic"; -import { IAsset } from "../interfaces/asset.interface"; -import { NETWORK } from '@/constants/chains'; - -/** - * Solana Wallet Utils - * Support for Solana Wallet - */ -export class SolanaWalletUtils extends MagicWalletUtils { - - public web3Provider: Connection | null = null; - public isMagicWallet: boolean = true; - constructor(network: NETWORK) { - super(); - this.network = network; - } - - async _initializeWeb3() { - console.log(`[INFO] Solana: initializeWeb3...`); - const magic = await getMagic({chainId: this.network}); - const RPC_NODE = RPC_NODE_OPTIONS.find((n) => n.chainId === this.network); - if (!RPC_NODE) { - throw new Error("RPC Node config fail. Incorect params, "); - } - const web3Provider = new Connection(RPC_NODE?.rpcUrl); - this.web3Provider = web3Provider; - // get account address and wallet type - try { - const info = await magic.user.getInfo() || undefined; - console.log('[INFO] Solana: user info', info); - - this.walletAddress = info?.publicAddress|| undefined; - } catch (error) { - console.log('error', error); - } - } - - async loadBalances() { - throw new Error("loadBalances() - Method not implemented."); - } - - async sendToken(destination: string, decimalAmount: number, contactAddress: string) { - throw new Error("sendToken() - Method not implemented."); - } -} \ No newline at end of file diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 915204f0..e8c98c22 100755 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -41,7 +41,7 @@ function MyApp({ Component, pageProps }: AppProps) { - + @@ -130,7 +130,23 @@ function MyApp({ Component, pageProps }: AppProps) { - + {/* */} + {process.env.NEXT_PUBLIC_APP_IS_PROD !== 'true' && (<> +
+ {process.env.NEXT_PUBLIC_APP_IS_LOCAL === 'true' && (<>[ENV] LOCAL: Using fake data.)} + {process.env.NEXT_PUBLIC_APP_IS_LOCAL === 'false' && + process.env.NEXT_PUBLIC_APP_IS_PROD === 'false' && (<>[ENV] DEV: Using you own API Keys)} +
+ )} ); } diff --git a/src/pool/Aave.pool.ts b/src/pool/Aave.pool.ts index 999840c2..18fd7ae9 100644 --- a/src/pool/Aave.pool.ts +++ b/src/pool/Aave.pool.ts @@ -8,7 +8,7 @@ import { supplyWithPermit, withdraw, } from "@/servcies/aave.service"; -import { Web3ProviderType } from "@/interfaces/web3.interface"; +import { Web3SignerType } from "@/interfaces/web3.interface"; export interface IAavePool extends IMarketPool { readonly unborrowedLiquidity: string; @@ -87,20 +87,20 @@ export class AavePool extends MarketPool implements IAavePool { public async deposit( amount: number, - provider: Web3ProviderType + signer: Web3SignerType ): Promise { // handle invalid amount if (isNaN(amount) || amount <= 0) { throw new Error("Invalid amount. Value must be greater than 0."); } - if (!(provider instanceof ethers.providers.Web3Provider)) { - throw new Error("No EVM web3Provider"); + if (!signer) { + throw new Error("No EVM signer"); } const markets = getMarkets(this.chainId); // call method const { chainId, aTokenAddress, underlyingAsset } = this; const params = { - provider: provider as ethers.providers.Web3Provider, + signer, reserve: { chainId, aTokenAddress, underlyingAsset }, amount: amount.toString(), onBehalfOf: undefined, @@ -118,7 +118,7 @@ export class AavePool extends MarketPool implements IAavePool { public async withdraw( amount: number, - provider: Web3ProviderType + signer: Web3SignerType ): Promise { // handle invalid amount if (isNaN(amount) || amount <= 0) { @@ -126,14 +126,14 @@ export class AavePool extends MarketPool implements IAavePool { "[INFO] AavePool.withdraw() Invalid amount. Value must be greater than 0." ); } - if (!(provider instanceof ethers.providers.Web3Provider)) { - throw new Error("[INFO] AavePool.withdraw() No EVM web3Provider"); + if (!signer) { + throw new Error("[INFO] AavePool.withdraw() No EVM signer"); } const markets = getMarkets(this.chainId); const { underlyingAsset, aTokenAddress } = this; // call method const params = { - provider: provider as ethers.providers.Web3Provider, + signer, reserve: { underlyingAsset, aTokenAddress }, amount: amount.toString(), onBehalfOf: undefined, @@ -151,7 +151,7 @@ export class AavePool extends MarketPool implements IAavePool { public async borrow( amount: number, - provider: Web3ProviderType + signer: Web3SignerType ): Promise { // handle invalid amount if (isNaN(amount) || amount <= 0) { @@ -159,15 +159,15 @@ export class AavePool extends MarketPool implements IAavePool { "[INFO] AavePool.borrow() Invalid amount. Value must be greater than 0." ); } - if (!(provider instanceof ethers.providers.Web3Provider)) { - throw new Error("[INFO] AavePool.borrow() No EVM web3Provider"); + if (!signer) { + throw new Error("[INFO] AavePool.borrow() No EVM signer"); } const markets = getMarkets(this.chainId); // call method const { underlyingAsset } = this; // call method const params = { - provider, + signer, reserve: { underlyingAsset }, amount: amount.toString(), onBehalfOf: undefined, @@ -185,21 +185,21 @@ export class AavePool extends MarketPool implements IAavePool { public async repay( amount: number, - provider: Web3ProviderType + signer: Web3SignerType ): Promise { // handle invalid amount if (isNaN(amount) || amount <= 0) { throw new Error("Invalid amount. Value must be greater than 0."); } - if (!(provider instanceof ethers.providers.Web3Provider)) { - throw new Error("[INFO] AavePool.borrow() No EVM web3Provider"); + if (!signer) { + throw new Error("[INFO] AavePool.borrow() No EVM signer"); } const markets = getMarkets(this.chainId); // call method const { underlyingAsset } = this; // call method const params = { - provider: provider as ethers.providers.Web3Provider, + signer, reserve: { underlyingAsset }, amount: amount.toString(), onBehalfOf: undefined, diff --git a/src/pool/Market.pool.ts b/src/pool/Market.pool.ts index 085f84e6..1a851d20 100644 --- a/src/pool/Market.pool.ts +++ b/src/pool/Market.pool.ts @@ -1,6 +1,7 @@ import { IMarketPool } from "@/interfaces/reserve.interface"; import { IAavePool } from "./Aave.pool"; -import { Web3ProviderType } from "@/interfaces/web3.interface"; +import { Web3SignerType } from "@/interfaces/web3.interface"; +import { ethers } from "ethers"; export abstract class MarketPool implements IMarketPool { readonly id: string; @@ -40,10 +41,10 @@ export abstract class MarketPool implements IMarketPool { public borrowBalance: number; - public abstract deposit(amount: number, provider: Web3ProviderType): Promise; - public abstract withdraw(amount: number, provider: Web3ProviderType): Promise; - public abstract borrow(amount: number, provider: Web3ProviderType): Promise; - public abstract repay(amount: number, provider: Web3ProviderType): Promise; + public abstract deposit(amount: number, signer: ethers.Signer): Promise; + public abstract withdraw(amount: number, signer: ethers.Signer): Promise; + public abstract borrow(amount: number, signer: ethers.Signer): Promise; + public abstract repay(amount: number, signer: ethers.Signer): Promise; constructor(pool: IMarketPool) { this.id = pool.id; diff --git a/src/servcies/aave.service.ts b/src/servcies/aave.service.ts index dda6ee4e..0adff11d 100644 --- a/src/servcies/aave.service.ts +++ b/src/servcies/aave.service.ts @@ -7,7 +7,7 @@ import { UiPoolDataProvider, WalletBalanceProvider, } from "@aave/contract-helpers"; -import { ethers } from "ethers"; +import { Signer, Wallet, ethers, providers } from "ethers"; import * as MARKETS from "@bgd-labs/aave-address-book"; import { FormatReserveUSDResponse, @@ -19,15 +19,15 @@ import { ChainId } from "@aave/contract-helpers"; import { CHAIN_AVAILABLES } from "../constants/chains"; import { IUserSummary } from "../interfaces/reserve.interface"; import { IAavePool } from "@/pool/Aave.pool"; +import web3Connector from "./firebase-web3-connect"; const submitTransaction = async (ops: { - provider: ethers.providers.Web3Provider; // Signing transactions requires a wallet provider + signer: Signer; // Signing transactions requires a wallet provider tx: EthereumTransactionTypeExtended; }) => { - const { provider, tx } = ops; + const { signer, tx } = ops; const extendedTxData = await tx.tx(); const { from, ...txData } = extendedTxData; - const signer = provider.getSigner(from); const txResponse = await signer.sendTransaction({ ...txData, value: txData.value || undefined, @@ -42,16 +42,16 @@ const submitTransaction = async (ops: { * @returns */ const submitMultiplesTransaction = async (ops: { - provider: ethers.providers.Web3Provider; // Signing transactions requires a wallet provider + signer: Signer; // Signing transactions requires a wallet provider txs: EthereumTransactionTypeExtended[]; }) => { - const { provider, txs } = ops; + const { signer, txs } = ops; let txResponses: ethers.providers.TransactionResponse[] = []; for (let i = 0; i < txs.length; i++) { const tx = txs[i]; console.log("submit tx: ", i, tx); const txResponse = await submitTransaction({ - provider, + signer, tx, }); txResponses.push(txResponse); @@ -69,20 +69,22 @@ export const fetchTVL = async (reserves: {totalLiquidityUSD: string;}[]): Promis }; export const supply = async (ops: { - provider: ethers.providers.Web3Provider; + signer: Signer; // Signing transactions requires a wallet provider reserve: Pick; amount: string; onBehalfOf?: string; poolAddress: string; gatewayAddress: string; }) => { - const { provider, reserve: {underlyingAsset}, amount, onBehalfOf, poolAddress, gatewayAddress } = + const { signer, reserve: {underlyingAsset}, amount, onBehalfOf, poolAddress, gatewayAddress } = ops; - const pool = new Pool(provider, { + if(!signer.provider) { + throw new Error('Provider not available'); + } + const pool = new Pool(signer.provider, { POOL: poolAddress, WETH_GATEWAY: gatewayAddress, }); - const signer = provider.getSigner(); const user = await signer?.getAddress(); let txs: EthereumTransactionTypeExtended[]; try { @@ -98,7 +100,7 @@ export const supply = async (ops: { } console.log("txs: ", txs); const txResponses: ethers.providers.TransactionResponse[] = await submitMultiplesTransaction({ - provider, + signer, txs, }); console.log("result: ", txResponses); @@ -108,21 +110,24 @@ export const supply = async (ops: { }; export const supplyWithPermit = async (ops: { - provider: ethers.providers.Web3Provider; + signer: Signer; reserve: Pick; amount: string; onBehalfOf?: string; poolAddress: string; gatewayAddress: string; }) => { - const { provider, reserve, amount, onBehalfOf, poolAddress, gatewayAddress } = + const { signer, reserve, amount, onBehalfOf, poolAddress, gatewayAddress } = ops; - const pool = new Pool(provider, { + if(!signer.provider) { + throw new Error('Provider not available'); + } + const pool = new Pool(signer.provider, { POOL: poolAddress, WETH_GATEWAY: gatewayAddress, }); // handle incorrect network - const network = await provider.getNetwork(); + const network = await signer.provider.getNetwork(); if (network.chainId !== reserve.chainId) { throw new Error( `Incorrect network, please switch to ${CHAIN_AVAILABLES.find( @@ -130,13 +135,11 @@ export const supplyWithPermit = async (ops: { )?.name}` ); } - const signer = provider.getSigner(); const user = await signer?.getAddress(); const tokenAdress = reserve.underlyingAsset; // create timestamp of 10 minutes from now const deadline = `${new Date().setMinutes(new Date().getMinutes() + 10)}`; - - const isTestnet = provider.network?.chainId === 5 || provider.network?.chainId === 80001 || false; + const isTestnet = network?.chainId === 5 || network?.chainId === 80001 || false; const havePermitConfig = permitByChainAndToken[network.chainId]?.[tokenAdress] || false; if (!havePermitConfig || isTestnet) { @@ -150,9 +153,9 @@ export const supplyWithPermit = async (ops: { amount, deadline, }); - console.log("dataToSign: ", dataToSign); - - const signature = await provider.send("eth_signTypedData_v4", [ + console.log("dataToSign: ", dataToSign, web3Connector.currentWallet()); + + const signature = await web3Connector.currentWallet()?.provider?.send("eth_signTypedData_v4", [ user, dataToSign, ]); @@ -169,7 +172,7 @@ export const supplyWithPermit = async (ops: { console.log("txs: ", txs); const txResponses: ethers.providers.TransactionResponse[] = await submitMultiplesTransaction({ - provider, + signer, txs, }); console.log("result: ", txResponses); @@ -178,22 +181,23 @@ export const supplyWithPermit = async (ops: { }; export const withdraw = async (ops: { - provider: ethers.providers.Web3Provider; + signer: Signer; reserve: Pick; amount: string; onBehalfOf?: string; poolAddress: string; gatewayAddress: string; }) => { - const { provider, reserve, amount, onBehalfOf, poolAddress, gatewayAddress } = + const { signer, reserve, amount, onBehalfOf, poolAddress, gatewayAddress } = ops; - - const pool = new Pool(provider, { + if(!signer.provider) { + throw new Error('Provider not available'); + } + const pool = new Pool(signer.provider, { POOL: poolAddress, WETH_GATEWAY: gatewayAddress, }); - const signer = provider.getSigner(); const user = await signer?.getAddress(); /* @@ -212,7 +216,7 @@ export const withdraw = async (ops: { }); const txResponses: ethers.providers.TransactionResponse[] = await submitMultiplesTransaction({ - provider, + signer, txs, }); console.log("result: ", txResponses); @@ -220,24 +224,25 @@ export const withdraw = async (ops: { }; export const borrow = async (ops: { - provider: ethers.providers.Web3Provider; + signer: Signer; reserve:Pick; amount: string; onBehalfOf?: string; poolAddress: string; gatewayAddress: string; }) => { - const { provider, reserve, amount, onBehalfOf, poolAddress, gatewayAddress } = + const { signer, reserve, amount, onBehalfOf, poolAddress, gatewayAddress } = ops; - - const pool = new Pool(provider, { + if(!signer.provider) { + throw new Error('Provider not available'); + } + const pool = new Pool(signer.provider, { POOL: poolAddress, WETH_GATEWAY: gatewayAddress, }); console.log("pool: ", pool); - const signer = provider.getSigner(); const currentAccount = await signer?.getAddress(); const txs = await pool.borrow({ @@ -250,7 +255,7 @@ export const borrow = async (ops: { console.log("txs: ", txs); const txResponses: ethers.providers.TransactionResponse[] = await submitMultiplesTransaction({ - provider, + signer, txs, }); console.log("result: ", txResponses); @@ -260,24 +265,25 @@ export const borrow = async (ops: { }; export const repay = async (ops: { - provider: ethers.providers.Web3Provider; + signer: Signer; reserve: Pick; amount: string; onBehalfOf?: string; poolAddress: string; gatewayAddress: string; }) => { - const { provider, reserve, amount, onBehalfOf, poolAddress, gatewayAddress } = + const { signer, reserve, amount, onBehalfOf, poolAddress, gatewayAddress } = ops; - - const pool = new Pool(provider, { + if(!signer.provider) { + throw new Error('Provider not available'); + } + const pool = new Pool(signer.provider, { POOL: poolAddress, WETH_GATEWAY: gatewayAddress, }); console.log("pool: ", pool); - const signer = provider.getSigner(); const currentAccount = await signer?.getAddress(); const txs = await pool.repay({ @@ -290,7 +296,7 @@ export const repay = async (ops: { console.log("txs: ", txs); const txResponses: ethers.providers.TransactionResponse[] = await submitMultiplesTransaction({ - provider, + signer, txs, }); console.log("result: ", txResponses); @@ -305,14 +311,8 @@ export const getMarkets = (chainId: number) => { return MARKETS.AaveV3Ethereum; case chainId === MARKETS.AaveV3Polygon.CHAIN_ID: return MARKETS.AaveV3Polygon; - case chainId === MARKETS.AaveV3Mumbai.CHAIN_ID: - return MARKETS.AaveV3Mumbai; - case chainId === MARKETS.AaveV3Fuji.CHAIN_ID: - return MARKETS.AaveV3Fuji; case chainId === MARKETS.AaveV3Arbitrum.CHAIN_ID: return MARKETS.AaveV3Arbitrum; - case chainId === MARKETS.AaveV3ArbitrumGoerli.CHAIN_ID: - return MARKETS.AaveV3ArbitrumGoerli; case chainId === MARKETS.AaveV3Optimism.CHAIN_ID: return MARKETS.AaveV3Optimism; case chainId === MARKETS.AaveV3Avalanche.CHAIN_ID: @@ -325,13 +325,23 @@ export const getMarkets = (chainId: number) => { return MARKETS.AaveV3Base; case chainId === MARKETS.AaveV3Scroll.CHAIN_ID: return MARKETS.AaveV3Scroll; + /** + * HERE TESTNETS + */ + case chainId === MARKETS.AaveV3ArbitrumGoerli.CHAIN_ID: + return MARKETS.AaveV3ArbitrumGoerli; + case chainId === MARKETS.AaveV3Sepolia.CHAIN_ID: + return MARKETS.AaveV3Sepolia; + case chainId === MARKETS.AaveV3Mumbai.CHAIN_ID: + return MARKETS.AaveV3Mumbai; + case chainId === MARKETS.AaveV3Fuji.CHAIN_ID: + return MARKETS.AaveV3Fuji; default: throw new Error(`ChainId ${chainId} not supported`); } }; export const getPools = async (ops: { - // provider: ethers.providers.Web3Provider | ethers.providers.JsonRpcProvider; market: MARKETTYPE; currentTimestamp: number; }) => { @@ -479,7 +489,7 @@ export const getContractData = async (ops: { }; const getWalletBalance = async (ops: { - provider: ethers.providers.Web3Provider | ethers.providers.JsonRpcProvider; + provider: ethers.providers.JsonRpcProvider; market: MARKETTYPE; user: string | null; currentTimestamp: number; @@ -604,16 +614,20 @@ export const getUserSummaryAndIncentives = async (ops: { export type MARKETTYPE = | typeof MARKETS.AaveV3Ethereum | typeof MARKETS.AaveV3Polygon - | typeof MARKETS.AaveV3Mumbai | typeof MARKETS.AaveV3Avalanche - | typeof MARKETS.AaveV3Fuji | typeof MARKETS.AaveV3Arbitrum | typeof MARKETS.AaveV3ArbitrumGoerli | typeof MARKETS.AaveV3Optimism | typeof MARKETS.AaveV3BNB | typeof MARKETS.AaveV3PolygonZkEvm | typeof MARKETS.AaveV3Base - | typeof MARKETS.AaveV3Scroll; + | typeof MARKETS.AaveV3Scroll + /** + * HERE TESTNETS + */ + | typeof MARKETS.AaveV3Mumbai + | typeof MARKETS.AaveV3Fuji + | typeof MARKETS.AaveV3Sepolia; export const permitByChainAndToken: { [chainId: number]: Record; diff --git a/src/servcies/ankr.service.ts b/src/servcies/ankr.service.ts index 955ef635..0962f14f 100644 --- a/src/servcies/ankr.service.ts +++ b/src/servcies/ankr.service.ts @@ -1,5 +1,6 @@ import { IAsset } from "@/interfaces/asset.interface"; import { IChain, CHAIN_AVAILABLES } from "../constants/chains"; +import { TxInterface } from "@/interfaces/tx.interface"; interface IAnkrTokenReponse { blockchain: string; @@ -16,7 +17,57 @@ interface IAnkrTokenReponse { contractAddress?: string; } +interface AnkrTransactionResponseInterface { + v: string; + r: string; + s: string; + nonce: string; + blockNumber: string; + from: string; + to: string; + gas: string; + gasPrice: string; + input: string; + transactionIndex: string; + blockHash: string; + value: string; + type: string; + cumulativeGasUsed: string; + gasUsed: string; + hash: string; + status: string; + blockchain: string; + timestamp: string; +} +// Generated by https://quicktype.io + +export interface IAnkrNTFResponse { + blockchain: string; + name: string; + tokenId: string; + tokenUrl: string; + imageUrl: string; + collectionName: string; + symbol: string; + contractType: string; + contractAddress: string; +} + const fake_data = [ + { + blockchain: "sepolia", + tokenName: "Link", + tokenSymbol: "LINK", + tokenDecimals: 18, + tokenType: "ERC20", + holderAddress: "0x475ef9fb4f8d43b63ac9b22fa41fd4db8a103550", + contractAddress: "0xf8fb3713d459d7c1018bd0a49d19b4c44290ebe5", + balance: "100", + balanceRawInteger: "100000000000000000000", + balanceUsd: "2000", + tokenPrice: "20", + thumbnail: "", + }, { blockchain: "optimism", tokenName: "Ether", @@ -45,6 +96,82 @@ const fake_data = [ thumbnail: "", }, ]; +const fake_nft_data = [ + { + "blockchain": "sepolia", + "name": "", + "tokenId": "12", + "tokenUrl": "https://treatdao.com/api/nft/12", + "imageUrl": "", + "collectionName": "Treat NFT Minter", + "symbol": "TreatNFTMinter", + "contractType": "ERC1155", + "contractAddress": "0x36f8f51f65fe200311f709b797baf4e193dd0b0d", + "quantity": "1" + }, + { + "blockchain": "sepolia", + "name": "India", + "tokenId": "531", + "tokenUrl": "https://airxnft.herokuapp.com/api/token/531", + "imageUrl": "https://ipfs.io/ipfs/QmXxSCFNTNLLrJfBJyi9uT5PFTbx1HDbd6qZxrrSchi4aG", + "collectionName": "Aircoins Metaverse", + "symbol": "AIRx", + "contractType": "ERC721", + "contractAddress": "0x025983cd3530f78b71b4874eb5272c189b357e61", + "traits": [ + { + "trait_type": "Property TYPE", + "value": "Command Center" + } + ] + }, + { + "blockchain": "sepolia", + "name": "vitalik.cloud", + "tokenId": "73906452355594127029039375271145516945927406532858726769026903911185640775143", + "tokenUrl": "https://md.namefi.io/vitalik.cloud", + "imageUrl": "https://md.namefi.io/svg/vitalik.cloud/image.svg", + "collectionName": "NamefiNFT", + "symbol": "NFNFT", + "contractType": "ERC721", + "contractAddress": "0x0000000000cf80e7cf8fa4480907f692177f8e06", + "traits": [ + { + "trait_type": "Is Locked", + "value": "🔓 Unlocked" + }, + { + "trait_type": "Is Frozen", + "value": "false" + }, + { + "trait_type": "Top Level Domain (TLD)", + "value": "cloud" + }, + { + "trait_type": "TLD Length", + "value": "5" + }, + { + "trait_type": "Second Level Domain (TLD)", + "value": "vitalik" + }, + { + "trait_type": "SLD Length", + "value": "7" + }, + { + "trait_type": "Is IDN", + "value": "false" + }, + { + "trait_type": "Expiration Date", + "value": "2024-10-11" + } + ] + } +]; const formatingTokensBalances = ( assets: IAnkrTokenReponse[], @@ -72,6 +199,21 @@ const formatingTokensBalances = ( }); }; +const formatingNFTsBalances = ( + assets: IAnkrNTFResponse[], + chainsList: IChain[] +): (IAnkrNTFResponse & {chain: IChain})[] => { + const result = assets.map((asset) => { + return { + ...asset, + chain: chainsList.find((c) => c.value === asset.blockchain) + }; + }) + //.filter((asset) => asset.chain !== undefined); + + return result as (IAnkrNTFResponse & {chain: IChain})[]; +} + const getCachedData = async (key: string, force?: boolean) => { const data = localStorage.getItem(key); if (!data) { @@ -113,9 +255,9 @@ export const getTokensBalances = async ( : CHAIN_AVAILABLES.filter((availableChain) => chainIds.find((c) => c === availableChain.id) ); - // return fake_data for DEV mode - if (process.env.NEXT_PUBLIC_APP_IS_PROD === "false") { - console.log("[INFO] DEV mode return fake data"); + // return fake_data for LOCAL mode + if (process.env.NEXT_PUBLIC_APP_IS_LOCAL === 'true') { + console.log("[INFO] LOCAL mode return fake data"); const balances = formatingTokensBalances(fake_data, chainsList); return balances; } @@ -154,3 +296,123 @@ export const getTokensBalances = async ( await setCachedData(KEY, balances); return balances; }; + +/** + * Doc url: https://api-docs.ankr.com/reference/post_ankr-getnftsbyowner + * @param chainIds array of chain ids + * @param address wallet address to get balances + * @param force to get data from API + * @returns object with balances property that contains an array of TokenInterface + */ +export const getNFTsBalances = async ( + chainIds: number[], + address: string, + force?: boolean // force to get data from API +): Promise<(IAnkrNTFResponse & { + chain: IChain; +})[]> => { + const chainsList = + chainIds.length <= 0 + ? CHAIN_AVAILABLES + : CHAIN_AVAILABLES.filter((availableChain) => + chainIds.find((c) => c === availableChain.id) + ); + // return fake_data for LOCAL mode + if (process.env.NEXT_PUBLIC_APP_IS_LOCAL === 'true') { + console.log("[INFO] LOCAL mode return fake data"); + const nfts: any[] = fake_nft_data; + return formatingNFTsBalances(nfts, chainsList); + } + const KEY = `hexa-ankr-nft-service-${address}`; + const cachedData = await getCachedData(KEY, force); + console.log("cachedData:", cachedData); + if (cachedData) { + return cachedData; + } + const APP_ANKR_APIKEY = process.env.NEXT_PUBLIC_APP_ANKR_APIKEY; + const blockchain = chainsList + .filter(({ type }) => type === "evm") + .map(({ value }) => value); + const url = `https://rpc.ankr.com/multichain/${APP_ANKR_APIKEY}/?ankr_getNFTsByOwner=`; + const options: RequestInit = { + method: "POST", + headers: { + accept: "application/json", + "content-type": "application/json", + }, + body: JSON.stringify({ + jsonrpc: "2.0", + method: "ankr_getNFTsByOwner", + params: { + blockchain, + walletAddress: address, + }, + id: 1, + }), + }; + const res = await fetch(url, options); + const assets = (await res.json())?.result?.assets||[]; + const balances = formatingNFTsBalances(assets, chainsList); + console.log("[INFO] {ankrFactory} getNFTsBalances(): ", balances); + await setCachedData(KEY, balances); + return balances; +} + +// export const getTransactionsHistory = async ( +// chainIds: number[], +// address: string +// ) => { +// const KEY = `hexa-ankr-service-txs-${address}`; +// const cachedData = await getCachedData(KEY); +// console.log("cachedData:", cachedData); +// if (cachedData) { +// return cachedData; +// } +// const url = `https://rpc.ankr.com/multichain/${process.env.NEXT_PUBLIC_APP_ANKR_APIKEY}/?ankr_getTransactionsByAddress=`; +// const blockchain = CHAIN_AVAILABLES +// .filter(({testnet}) => !testnet) +// .filter(({ type }) => type === "evm") +// .map(({ value }) => value); +// // fromTimestamp = Beginning of a time period starting 30 days ago. UNIX timestamp. +// const fromTimestamp = Math.floor(Date.now() / 10000) - 30 * 24 * 60 * 60; +// const toTimestamp = Math.floor(Date.now() / 1000); +// const options: RequestInit = { +// method: "POST", +// headers: { +// accept: "application/json", +// "content-type": "application/json", +// }, +// body: JSON.stringify({ +// jsonrpc: "2.0", +// method: "ankr_getTransactionsByAddress", +// params: { +// blockchain, +// address: [address], +// fromTimestamp, +// toTimestamp, +// descOrder: true, +// }, +// id: 1, +// }), +// }; +// const res = await fetch(url, options); +// const transactions: AnkrTransactionResponseInterface[] = +// (await res.json())?.result?.transactions || []; +// // convert transaction.timestamp to Date +// const txs: TxInterface[] = transactions.map((tx) => { +// return { +// ...tx, +// blockNumber: parseInt(tx.blockNumber), +// cumulativeGasUsed: parseInt(tx.cumulativeGasUsed), +// gas: parseInt(tx.gas), +// gasPrice: parseInt(tx.gasPrice), +// gasUsed: parseInt(tx.gasUsed), +// nonce: parseInt(tx.nonce), +// status: parseInt(tx.status), +// timestamp: new Date(parseInt(tx.timestamp) * 1000) +// }; +// }); +// await setCachedData(KEY, txs); +// console.log("[INFO] {ankrFactory} getTransactionsHistory(): ", txs); +// return txs; +// }; diff --git a/src/servcies/coingecko.service.ts b/src/servcies/coingecko.service.ts new file mode 100644 index 00000000..49dcebef --- /dev/null +++ b/src/servcies/coingecko.service.ts @@ -0,0 +1,176 @@ +import { SeriesData } from "@/components/ui/LightChart"; + +export type TokenInfo = { + description: {en: string}; + categories: string[]; + image: { + thumb: string; + small: string; + large: string; + }; + market_data: { + ath: {usd: number}; + ath_change_percentage: {usd: number}; + ath_date: { usd: string }; + atl: {usd: number}; + atl_change_percentage: {usd: number}; + atl_date: { usd: string }; + circulating_supply: number; + current_price: { usd: number }; + fully_diluted_valuation: { usd: number }; + high_24h: { usd: number }; + last_updated: string; + low_24h: { usd: number }; + market_cap: { usd: number }; + market_cap_change_24h: number; + market_cap_change_24h_in_currency: { usd: number }; + market_cap_change_percentage_24h: number; + market_cap_change_percentage_24h_in_currency: { usd: number }; + market_cap_fdv_ratio: number; + market_cap_rank: number; + max_supply: number; + price_change_24h: number; + price_change_24h_in_currency: { usd: number }; + price_change_percentage_1h_in_currency: { usd: number }; + price_change_percentage_1y_in_currency: { usd: number }; + price_change_percentage_7d_in_currency: { usd: number }; + price_change_percentage_14d_in_currency: { usd: number }; + price_change_percentage_24h_in_currency: { usd: number }; + price_change_percentage_30d_in_currency: { usd: number }; + price_change_percentage_60d_in_currency: { usd: number }; + price_change_percentage_200d_in_currency: { usd: number }; + total_supply: number; + total_value_locked: number|null; + total_volume: { usd: number }; + }; + sentiment_votes_down_percentage: number; + sentiment_votes_up_percentage: number; + +}; + +export class CoingeckoAPI { + + static options?:RequestInit = process.env.NEXT_PUBLIC_APP_IS_PROD === 'true' + ? { + headers: new Headers({ + 'x-cg-demo-api-key': process.env.NEXT_PUBLIC_APP_COINGECKO_APIKEY + }) + } + : undefined; + + /** + * Method to get Coingecko token id from symbol + * @param symbol + * @returns + */ + static async getTokenId(symbol: string) { + // convert symbol to coingeeko id + const responseList = localStorage.getItem('hexa-lite-coingeeko/coinList'); + let data; + if (responseList) { + data = JSON.parse(responseList); + } else { + const fetchResponse = await fetch(`https://api.coingecko.com/api/v3/coins/list`, this.options); + data = await fetchResponse.json(); + localStorage.setItem('hexa-lite-coingeeko/coinList', JSON.stringify(data)); + } + const coin: {id?: string} = data.find( + (c: any) => + c.symbol.toLowerCase() === symbol.toLowerCase() + && !c.name.toLowerCase().includes('bridged') + ); + return coin?.id; + } + + /** + * Method to get coin market chart data + * @param id + * @param interval + */ + static async getTokenHistoryPrice( + symbol: string, + intervals: ('1D' | '1W' | '1M' | '1Y')[] = ['1D','1W','1M', '1Y'] + ): Promise{ + // convert symbol to coingeeko id + const coinId = await CoingeckoAPI.getTokenId(symbol); + if (!coinId) return new Map() as SeriesData; + + const seriesData: SeriesData = new Map(); + for (let index = 0; index < intervals.length; index++) { + const interval = intervals[index]; + + const responseToken = localStorage.getItem(`hexa-lite-coingeeko/coin/${coinId}/market_chart?interval=${interval}`); + const jsonData = JSON.parse(responseToken||'{}'); + const isDeadlineReach = (Date.now() - jsonData.timestamp) > (60 * 1000 * 30); + if (responseToken && !isDeadlineReach && jsonData.data) { + seriesData.set(interval, jsonData.data); + } else { + const days = interval === '1D' ? 1 : interval === '1W' ? 7 : interval === '1M' ? 30 : 365; + const dataInterval = interval === '1D' ? '' : interval === '1W' ? '' : interval === '1M' ? '' : '&interval=daily'; + const url = `https://api.coingecko.com/api/v3/coins/${coinId}/market_chart?vs_currency=usd&days=${days}${dataInterval}`; + const result = await fetch(url, this.options) + .then((res) => res.json()) + .catch((error) => ({prices: []})); + const prices = (result?.prices as number[][]||[]); + const data = prices + .map(([time, value]: number[]) => { + const dataItem = { + time: time / 1000|| "", + value: Number(value), + }; + return dataItem; + }) + // remove latest element + .slice(0, -1) + // remove duplicates + .filter((item, index, self) => index === self.findIndex((t) => t.time === item.time)); + seriesData.set(interval, data); + localStorage.setItem(`hexa-lite-coingeeko/coin/${coinId}/market_chart?interval=${interval}`, JSON.stringify({ + data, + timestamp: Date.now() + })); + } + } + return seriesData; + } + /** + * Method to get token info: description, market data, community data + * @param symbol + * @returns + */ + static async getTokenInfo(symbol: string) { + const tokenId = await CoingeckoAPI.getTokenId(symbol); + if (!tokenId) return undefined; + // check localstorage if data is stored from less than 1 day + const response = localStorage.getItem(`hexa-lite-coingeeko/coin/${tokenId}/info`); + const jsonData = JSON.parse(response||'{}'); + const isDeadlineReach = (Date.now() - jsonData.timestamp) > (60 * 1000 * 60 * 24); + let tokenInfo; + if (response && !isDeadlineReach && jsonData.data) { + tokenInfo = jsonData.data; + } else { + // fetch data from coingecko + tokenInfo = await fetch(`https://api.coingecko.com/api/v3/coins/${tokenId}?market_data=true&community_data=true`, this.options) + .then((res) => res.json()); + localStorage.setItem(`hexa-lite-coingeeko/coin/${tokenId}/info`, JSON.stringify({ + data: tokenInfo, + timestamp: Date.now() + })); + } + return tokenInfo as TokenInfo; + } + + /** + * Method to get simple price of a token + * @param id + * @param vs_currencies + * @returns + */ + static async getSimplePrice(id: string, vs_currencies: string) { + const response = await fetch( + `https://api.coingecko.com/api/v3/simple/price?ids=${id}&vs_currencies=${vs_currencies}`, this.options + ); + const json = await response.json(); + return json[id]?.[vs_currencies]; + } +} \ No newline at end of file diff --git a/src/servcies/firebase-web3-connect.ts b/src/servcies/firebase-web3-connect.ts new file mode 100644 index 00000000..e5e3390b --- /dev/null +++ b/src/servcies/firebase-web3-connect.ts @@ -0,0 +1,209 @@ +import { FirebaseWeb3Connect } from '@/lib'; +import { auth } from '@/firebase-config'; +import { CHAIN_AVAILABLES, CHAIN_DEFAULT } from '@/constants/chains'; +import { TxInterface } from '@/interfaces/tx.interface'; +import { getTransactionsHistory } from './zerion.service'; +import { IAsset } from '@/interfaces/asset.interface'; +import { getNFTsBalances, getTokensBalances } from './ankr.service'; +import { getTokensPrice } from './lifi.service'; +import { Signer, utils } from 'ethers'; +import { INFT } from '@/interfaces/nft.interface'; + +/** + * Function tha takes wallet address and fetches all assets for that wallet + * using Ankr API. It also fetches token price from LiFi API if Ankr response contains + * token with balance > 0 && balanceUsd === 0 && priceUsd === 0 + * This ensures that all tokens have price in USD and the total balance is calculated correctly + * for each token that user has in the wallet. + */ +const fetchEVMAssets = async (walletAddress: string, force?: boolean) => { + console.log(`[INFO] fetchUserAssets()`, walletAddress); + if (!walletAddress) return null; + const assets = await getTokensBalances([], walletAddress, force); + // remove elements with 0 balance and add to new arrany using extracting + const assetWithBalanceUsd = [], + assetsWithoutBalanceUsd = []; + for (let i = 0; i < assets.length; i++) { + const asset = assets[i]; + (asset.balanceUsd === 0 && asset.balance > 0) + ? assetsWithoutBalanceUsd.push(asset) + : assetWithBalanceUsd.push(asset); + } + // get token price for tokens without balanceUsd + const tokenWithbalanceUsd = await getTokensPrice(assetsWithoutBalanceUsd); + return [ + ...assetWithBalanceUsd, + ...tokenWithbalanceUsd + ]; +}; + +const origin = window.location.origin; +const path = '/auth/link'; +const params = `/?finishSignUp=true`; +const EMAIL_LINK_URL = [origin, path, params].join(''); + +/** + * Web3Connector class that wraps FirebaseWeb3Connect class + * that provides methods to connect, disconnect, switch accross networks and + * get signer for the connected wallet. + * It also provides methods to load balances and transactions for the connected wallet + * and also provides methods to listen to connect state changes. + */ +class Web3Connector { + + private readonly _connector = new FirebaseWeb3Connect(auth, 'APIKEY', { + chainId: CHAIN_DEFAULT.id, + dialogUI: { + integrator: 'Hexa Lite', + ops: { + authProvider: { + authEmailUrl: EMAIL_LINK_URL + } + } + } + }); + + async connect(){ + const isLightmode = !document.querySelector('body')?.classList.contains('dark'); + const { address } = await this._connector.connectWithUI(isLightmode) || {}; + if (!address) { + throw new Error('Connect wallet fail'); + } + return address; + } + + async connectWithLink() { + await this._connector.connectWithLink(); + } + + async disconnect(){ + const isLightmode = !document.querySelector('body')?.classList.contains('dark'); + await this._connector.signout(true, isLightmode); + return true; + } + wallets(){ + return [this._connector.wallet]; + } + async switchNetwork(chainId: number){ + await this._connector.switchNetwork(chainId); + } + currentWallet(){ + return this._connector.wallet; + } + + async getSigner(): Promise { + try { + const signer = await this._connector.wallet?.getSigner(); + return signer; + } catch (error) { + return undefined; + } + } + + async getNetworkFeesAsUSD(): Promise { + // get ethers network fees using ethers.js + const signer = await this.getSigner(); + if (!signer) { + throw new Error('Signer not available'); + } + const network = await signer.provider?.getNetwork(); + if (!network) { + throw new Error('Network not available'); + } + // get network fees in USD + const networkFees = await signer.provider?.getFeeData(); + if (!networkFees || !networkFees.gasPrice || !networkFees.maxFeePerGas) { + throw new Error('Network fees not available'); + } + // get network fees in ETH + const totalFee = utils.formatUnits( + networkFees.gasPrice.add(networkFees.maxFeePerGas), 'gwei' + ); + // const response = await fetch('https://api.coingecko.com/api/v3/coins/ethereum'); + // const result = await response.json(); + // const ethPriceUSD = result?.market_data?.current_price?.usd as number||0; + // const total = ethPriceUSD * Number(totalFee); + return Number(totalFee).toFixed(0) + ' Gwei'; + } + + onConnectStateChanged(callback: (user: { + address: string; + } | null) => void){ + this._connector.onConnectStateChanged(callback); + } + + async loadBalances(force?: boolean){ + const assets: IAsset[] = []; + for (const wallet of this.wallets()) { + if (!wallet) { + return assets; + } + const chain = CHAIN_AVAILABLES.find((chain) => chain.id === wallet.chainId); + switch (true) { + // evm wallet type + case chain?.type === 'evm': { + const evmAssets = await fetchEVMAssets(wallet.address, force)||[]; + assets.push(...evmAssets); + break; + } + default: + break + } + } + return assets; + }; + + async loadTxs(force?: boolean) { + const txs: TxInterface[] = []; + for (const wallet of this.wallets()) { + if (!wallet) { + return txs; + } + const chain = CHAIN_AVAILABLES.find((chain) => chain.id === wallet.chainId); + switch (true) { + // evm wallet type + case chain?.type === 'evm': { + const result = await getTransactionsHistory(wallet.address); + txs.push(...result); + break; + } + default: + break + } + } + return txs; + } + + async loadNFTs(force?: boolean) { + const nfts: INFT[] = []; + for (const wallet of this.wallets()) { + if (!wallet) { + return nfts; + } + const chain = CHAIN_AVAILABLES.find((chain) => chain.id === wallet.chainId); + switch (true) { + // evm wallet type + case chain?.type === 'evm': { + const evmAssets = await getNFTsBalances([], wallet.address, force)||[]; + nfts.push(...evmAssets); + break; + } + default: + break + } + } + return nfts; + + } + + async backupWallet() { + const isLightmode = !document.querySelector('body')?.classList.contains('dark'); + return this._connector.backupWallet(true, isLightmode); + + } + +} +const web3Connector = new Web3Connector(); + +// export default instance +export default web3Connector; diff --git a/src/servcies/lifi.service.ts b/src/servcies/lifi.service.ts index 651f294d..420d4eb8 100644 --- a/src/servcies/lifi.service.ts +++ b/src/servcies/lifi.service.ts @@ -764,9 +764,8 @@ export const fakeQuote = { */ export const sendTransaction = async ( quote: LiFiQuoteResponse, - provider: ethers.providers.Web3Provider + signer: ethers.providers.JsonRpcSigner ) => { - const signer = provider.getSigner(); const tx = await signer.sendTransaction(quote.transactionRequest); const receipt = await tx.wait(); return receipt; @@ -778,7 +777,7 @@ export const sendTransaction = async ( */ export const checkAndSetAllowance = async ( - provider: ethers.providers.Web3Provider, + signer: ethers.providers.JsonRpcSigner, tokenAddress: string, approvalAddress: string, amount: string @@ -787,7 +786,6 @@ export const checkAndSetAllowance = async ( if (tokenAddress === ethers.constants.AddressZero) { return; } - const signer = provider.getSigner(); const erc20 = new Contract(tokenAddress, ERC20_ABI, signer); const address = await signer.getAddress(); const allowance = await erc20.allowance(address, approvalAddress); @@ -811,7 +809,7 @@ export const swapWithLiFi = async ( fromAmount: string; fromAddress: string; }, - provider: ethers.providers.Web3Provider + signer: ethers.providers.JsonRpcSigner ) => { const quote = await getQuote( ops.fromChain, @@ -822,12 +820,12 @@ export const swapWithLiFi = async ( ops.fromAddress ); await checkAndSetAllowance( - provider, + signer, quote.action.fromToken.address, quote.estimate.approvalAddress, quote.action.fromAmount ); - const receipt = await sendTransaction(quote, provider); + const receipt = await sendTransaction(quote, signer); return receipt; }; @@ -875,11 +873,12 @@ export const getTokensPrice = async (tokens: IAsset[]) => { tokensResponse = responseData.tokens; } } catch (error) { - throw error; + // throw error; + tokensResponse = {}; } const tokenWithPrice: IAsset[] = []; for (const token of tokens) { - const index = tokensResponse[token.chain?.id as number].findIndex( + const index = tokensResponse?.[token.chain?.id as number].findIndex( (t) => t.symbol === token.symbol ); if (index > -1) { @@ -926,16 +925,16 @@ export const LIFI_CONFIG = Object.freeze({ secondary: "rgba(var(--ion-text-color-rgb), 0.6)", }, background: { - paper: "rgb(var(--item-background-shader-rgb))", // green + paper: "rgb(var(--lifi-paper-background-rgb))", // green // default: '#182449', }, primary: { main: "#0090FF", - contrastText: "rgb(var(--ion-text-color.rgb))", + contrastText: "rgb(var(--ion-text-color-rgb))", }, secondary: { main: "#4CCCE6", - contrastText: "rgb(var(--ion-text-color.rgb))", + contrastText: "rgb(var(--ion-text-color-rgb))", }, }, }, diff --git a/src/servcies/magic-web3-connect.ts b/src/servcies/magic-web3-connect.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/servcies/zerion.service.ts b/src/servcies/zerion.service.ts new file mode 100644 index 00000000..098324dc --- /dev/null +++ b/src/servcies/zerion.service.ts @@ -0,0 +1,113 @@ +import { SeriesData, SeriesMarkerData } from "@/components/ui/LightChart"; +import { TxInterface } from "@/interfaces/tx.interface"; +import { SeriesMarker, Time } from "lightweight-charts"; + +export const formatTxsAsSeriemarker = (txs: TxInterface[]): SeriesMarkerData => { + // only `in` and `out` transfers form `symbol` token + const filteredTxs = txs.filter((tx) => + tx.attributes.transfers[0].direction === "in" || tx.attributes.transfers[0].direction === "out" + ); + const serieData:SeriesMarkerData = new Map(); + serieData.set("1D", []); + serieData.set("1W", []); + serieData.set("1M", []); + serieData.set("1Y", []); + const now = new Date(); + const oneDay = 24 * 60 * 60 * 1000; + const oneWeek = 7 * oneDay; + const oneMonth = 30 * oneDay; + const oneYear = 365 * oneDay; + const today = now.getTime(); + const oneDayAgo = today - oneDay; + const oneWeekAgo = today - oneWeek; + const oneMonthAgo = today - oneMonth; + const oneYearAgo = today - oneYear; + + // loop over txs and create SeriesMarkerData + filteredTxs + .forEach((tx) => { + // `tx.attributes.mined_at` as `2024-06-20` + const txDate = new Date(tx.attributes.mined_at).getTime(); + const time = new Date(tx.attributes.mined_at).toISOString().split('T').shift()||``; + // SeriesMarker